commit fb5b440d425c95d43d2fa75d3a1ddb2baaaaeaca Author: mahyargdz Date: Mon Oct 21 10:22:26 2024 +0330 feat: add ci cd files dont edit those files diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml new file mode 100644 index 0000000..89d6f22 --- /dev/null +++ b/.github/workflows/deploy.yaml @@ -0,0 +1,48 @@ +name: deploy to danak + +on: + push: + branches: + - main + +jobs: + build_and_deploy: + runs-on: ubuntu-latest + + env: + DANAK_SERVER: "https://captain.run.danakcorp.com" + APP_TOKEN: 5a2526d13383aa8c4c3e6019352b96cf81e84b7b781e80c2b8012eaf5e2e69fd + CAPROVER_APP_NAME: ostandari + GITHUB_TOKEN: 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 + + steps: + - name: Check out repositorys + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: zmihamid + password: ${{ env.GITHUB_TOKEN }} + + - name: Preset Image Name + run: echo "IMAGE_URL=$(echo ghcr.io/zmihamid/${{ github.event.repository.name }}:$(echo ${{ github.sha }} | cut -c1-7) | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV + + - name: Build and push Docker Image + uses: docker/build-push-action@v5 + with: + context: . + file: ./Dockerfile + push: true + tags: ${{ env.IMAGE_URL }} + + - name: Install CapRover CLI + run: npm install -g caprover + + - name: deploy to server + run: | + caprover deploy -a $CAPROVER_APP_NAME -u $DANAK_SERVER --appToken $APP_TOKEN -i "$IMAGE_URL" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dedb06c --- /dev/null +++ b/.gitignore @@ -0,0 +1,131 @@ +node_modules +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b01edb6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,47 @@ +FROM node:20-alpine AS base + +RUN apk add --no-cache tzdata + +# Set the timezone to Asia/Tehran +RUN cp /usr/share/zoneinfo/Asia/Tehran /etc/localtime && echo "Asia/Tehran" > /etc/timezone + +FROM base AS deps +WORKDIR /temp-deps +COPY package*.json ./ +RUN npm install + +FROM base AS builder +WORKDIR /build +COPY . ./ +COPY --from=deps /temp-deps/node_modules ./node_modules +RUN npm run build +RUN npm install --omit=dev + + +FROM base AS runner +WORKDIR /app +ENV NUXT_TELEMETRY_DISABLED=1 + + +RUN addgroup -S appgroup && adduser -S appuser -G appgroup +RUN chown -R appuser:appgroup /app + +# COPY --from=builder --chown=appuser:appgroup /build/.nuxt ./.nuxt +# COPY --from=builder --chown=appuser:appgroup /build/static ./static +# COPY --from=builder --chown=appuser:appgroup /build/package.json ./ +# COPY --from=builder --chown=appuser:appgroup /build/node_modules/ ./node_modules/ +COPY --from=builder --chown=appuser:appgroup /build ./ + + +USER appuser + +# Set environment variables +ENV NODE_ENV=production +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" + + +EXPOSE 3000 + +# Start the Nuxt 2 app +CMD ["npm", "start"] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..bbbaadd --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# ostandari \ No newline at end of file diff --git a/assets/admin/fonts/fontawesome/css/all.min.css b/assets/admin/fonts/fontawesome/css/all.min.css new file mode 100644 index 0000000..0998088 --- /dev/null +++ b/assets/admin/fonts/fontawesome/css/all.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Pro 5.12.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Commercial License) + * www.Ulabs.ir + */ +.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-abacus:before{content:"\f640"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acorn:before{content:"\f6ae"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-conditioner:before{content:"\f8f4"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-alarm-clock:before{content:"\f34e"}.fa-alarm-exclamation:before{content:"\f843"}.fa-alarm-plus:before{content:"\f844"}.fa-alarm-snooze:before{content:"\f845"}.fa-album:before{content:"\f89f"}.fa-album-collection:before{content:"\f8a0"}.fa-algolia:before{content:"\f36c"}.fa-alicorn:before{content:"\f6b0"}.fa-alien:before{content:"\f8f5"}.fa-alien-monster:before{content:"\f8f6"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-align-slash:before{content:"\f846"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-amp-guitar:before{content:"\f8a1"}.fa-analytics:before{content:"\f643"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angel:before{content:"\f779"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-crate:before{content:"\f6b1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-alt-down:before{content:"\f354"}.fa-arrow-alt-from-bottom:before{content:"\f346"}.fa-arrow-alt-from-left:before{content:"\f347"}.fa-arrow-alt-from-right:before{content:"\f348"}.fa-arrow-alt-from-top:before{content:"\f349"}.fa-arrow-alt-left:before{content:"\f355"}.fa-arrow-alt-right:before{content:"\f356"}.fa-arrow-alt-square-down:before{content:"\f350"}.fa-arrow-alt-square-left:before{content:"\f351"}.fa-arrow-alt-square-right:before{content:"\f352"}.fa-arrow-alt-square-up:before{content:"\f353"}.fa-arrow-alt-to-bottom:before{content:"\f34a"}.fa-arrow-alt-to-left:before{content:"\f34b"}.fa-arrow-alt-to-right:before{content:"\f34c"}.fa-arrow-alt-to-top:before{content:"\f34d"}.fa-arrow-alt-up:before{content:"\f357"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-from-bottom:before{content:"\f342"}.fa-arrow-from-left:before{content:"\f343"}.fa-arrow-from-right:before{content:"\f344"}.fa-arrow-from-top:before{content:"\f345"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-square-down:before{content:"\f339"}.fa-arrow-square-left:before{content:"\f33a"}.fa-arrow-square-right:before{content:"\f33b"}.fa-arrow-square-up:before{content:"\f33c"}.fa-arrow-to-bottom:before{content:"\f33d"}.fa-arrow-to-left:before{content:"\f33e"}.fa-arrow-to-right:before{content:"\f340"}.fa-arrow-to-top:before{content:"\f341"}.fa-arrow-up:before{content:"\f062"}.fa-arrows:before{content:"\f047"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-arrows-h:before{content:"\f07e"}.fa-arrows-v:before{content:"\f07d"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-atom-alt:before{content:"\f5d3"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-axe:before{content:"\f6b2"}.fa-axe-battle:before{content:"\f6b3"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backpack:before{content:"\f5d4"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-badge:before{content:"\f335"}.fa-badge-check:before{content:"\f336"}.fa-badge-dollar:before{content:"\f645"}.fa-badge-percent:before{content:"\f646"}.fa-badge-sheriff:before{content:"\f8a2"}.fa-badger-honey:before{content:"\f6b4"}.fa-bags-shopping:before{content:"\f847"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ball-pile:before{content:"\f77e"}.fa-ballot:before{content:"\f732"}.fa-ballot-check:before{content:"\f733"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-banjo:before{content:"\f8a3"}.fa-barcode:before{content:"\f02a"}.fa-barcode-alt:before{content:"\f463"}.fa-barcode-read:before{content:"\f464"}.fa-barcode-scan:before{content:"\f465"}.fa-bars:before{content:"\f0c9"}.fa-baseball:before{content:"\f432"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-basketball-hoop:before{content:"\f435"}.fa-bat:before{content:"\f6b5"}.fa-bath:before{content:"\f2cd"}.fa-battery-bolt:before{content:"\f376"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-slash:before{content:"\f377"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-bed-alt:before{content:"\f8f7"}.fa-bed-bunk:before{content:"\f8f8"}.fa-bed-empty:before{content:"\f8f9"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-exclamation:before{content:"\f848"}.fa-bell-on:before{content:"\f8fa"}.fa-bell-plus:before{content:"\f849"}.fa-bell-school:before{content:"\f5d5"}.fa-bell-school-slash:before{content:"\f5d6"}.fa-bell-slash:before{content:"\f1f6"}.fa-bells:before{content:"\f77f"}.fa-betamax:before{content:"\f8a4"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-biking-mountain:before{content:"\f84b"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blanket:before{content:"\f498"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blinds:before{content:"\f8fb"}.fa-blinds-open:before{content:"\f8fc"}.fa-blinds-raised:before{content:"\f8fd"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bone-break:before{content:"\f5d8"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-alt:before{content:"\f5d9"}.fa-book-dead:before{content:"\f6b7"}.fa-book-heart:before{content:"\f499"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-book-spells:before{content:"\f6b8"}.fa-book-user:before{content:"\f7e7"}.fa-bookmark:before{content:"\f02e"}.fa-books:before{content:"\f5db"}.fa-books-medical:before{content:"\f7e8"}.fa-boombox:before{content:"\f8a5"}.fa-boot:before{content:"\f782"}.fa-booth-curtain:before{content:"\f734"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-bottom:before{content:"\f84d"}.fa-border-center-h:before{content:"\f89c"}.fa-border-center-v:before{content:"\f89d"}.fa-border-inner:before{content:"\f84e"}.fa-border-left:before{content:"\f84f"}.fa-border-none:before{content:"\f850"}.fa-border-outer:before{content:"\f851"}.fa-border-right:before{content:"\f852"}.fa-border-style:before{content:"\f853"}.fa-border-style-alt:before{content:"\f854"}.fa-border-top:before{content:"\f855"}.fa-bow-arrow:before{content:"\f6b9"}.fa-bowling-ball:before{content:"\f436"}.fa-bowling-pins:before{content:"\f437"}.fa-box:before{content:"\f466"}.fa-box-alt:before{content:"\f49a"}.fa-box-ballot:before{content:"\f735"}.fa-box-check:before{content:"\f467"}.fa-box-fragile:before{content:"\f49b"}.fa-box-full:before{content:"\f49c"}.fa-box-heart:before{content:"\f49d"}.fa-box-open:before{content:"\f49e"}.fa-box-up:before{content:"\f49f"}.fa-box-usd:before{content:"\f4a0"}.fa-boxes:before{content:"\f468"}.fa-boxes-alt:before{content:"\f4a1"}.fa-boxing-glove:before{content:"\f438"}.fa-brackets:before{content:"\f7e9"}.fa-brackets-curly:before{content:"\f7ea"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-loaf:before{content:"\f7eb"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-bring-forward:before{content:"\f856"}.fa-bring-front:before{content:"\f857"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-browser:before{content:"\f37e"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-bullseye-arrow:before{content:"\f648"}.fa-bullseye-pointer:before{content:"\f649"}.fa-burger-soda:before{content:"\f858"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-burrito:before{content:"\f7ed"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-bus-school:before{content:"\f5dd"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-cabinet-filing:before{content:"\f64b"}.fa-cactus:before{content:"\f8a7"}.fa-calculator:before{content:"\f1ec"}.fa-calculator-alt:before{content:"\f64c"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-edit:before{content:"\f333"}.fa-calendar-exclamation:before{content:"\f334"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-star:before{content:"\f736"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camcorder:before{content:"\f8a8"}.fa-camera:before{content:"\f030"}.fa-camera-alt:before{content:"\f332"}.fa-camera-home:before{content:"\f8fe"}.fa-camera-movie:before{content:"\f8a9"}.fa-camera-polaroid:before{content:"\f8aa"}.fa-camera-retro:before{content:"\f083"}.fa-campfire:before{content:"\f6ba"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candle-holder:before{content:"\f6bc"}.fa-candy-cane:before{content:"\f786"}.fa-candy-corn:before{content:"\f6bd"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-building:before{content:"\f859"}.fa-car-bump:before{content:"\f5e0"}.fa-car-bus:before{content:"\f85a"}.fa-car-crash:before{content:"\f5e1"}.fa-car-garage:before{content:"\f5e2"}.fa-car-mechanic:before{content:"\f5e3"}.fa-car-side:before{content:"\f5e4"}.fa-car-tilt:before{content:"\f5e5"}.fa-car-wash:before{content:"\f5e6"}.fa-caravan:before{content:"\f8ff"}.fa-caravan-alt:before{content:"\f900"}.fa-caret-circle-down:before{content:"\f32d"}.fa-caret-circle-left:before{content:"\f32e"}.fa-caret-circle-right:before{content:"\f330"}.fa-caret-circle-up:before{content:"\f331"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cars:before{content:"\f85b"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cassette-tape:before{content:"\f8ab"}.fa-cat:before{content:"\f6be"}.fa-cat-space:before{content:"\f901"}.fa-cauldron:before{content:"\f6bf"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-cctv:before{content:"\f8ac"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chair-office:before{content:"\f6c1"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-line-down:before{content:"\f64d"}.fa-chart-network:before{content:"\f78a"}.fa-chart-pie:before{content:"\f200"}.fa-chart-pie-alt:before{content:"\f64e"}.fa-chart-scatter:before{content:"\f7ee"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-cheese-swiss:before{content:"\f7f0"}.fa-cheeseburger:before{content:"\f7f1"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-bishop-alt:before{content:"\f43b"}.fa-chess-board:before{content:"\f43c"}.fa-chess-clock:before{content:"\f43d"}.fa-chess-clock-alt:before{content:"\f43e"}.fa-chess-king:before{content:"\f43f"}.fa-chess-king-alt:before{content:"\f440"}.fa-chess-knight:before{content:"\f441"}.fa-chess-knight-alt:before{content:"\f442"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-pawn-alt:before{content:"\f444"}.fa-chess-queen:before{content:"\f445"}.fa-chess-queen-alt:before{content:"\f446"}.fa-chess-rook:before{content:"\f447"}.fa-chess-rook-alt:before{content:"\f448"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-double-down:before{content:"\f322"}.fa-chevron-double-left:before{content:"\f323"}.fa-chevron-double-right:before{content:"\f324"}.fa-chevron-double-up:before{content:"\f325"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-square-down:before{content:"\f329"}.fa-chevron-square-left:before{content:"\f32a"}.fa-chevron-square-right:before{content:"\f32b"}.fa-chevron-square-up:before{content:"\f32c"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chimney:before{content:"\f78b"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clarinet:before{content:"\f8ad"}.fa-claw-marks:before{content:"\f6c2"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clipboard-list-check:before{content:"\f737"}.fa-clipboard-prescription:before{content:"\f5e8"}.fa-clipboard-user:before{content:"\f7f3"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-drizzle:before{content:"\f738"}.fa-cloud-hail:before{content:"\f739"}.fa-cloud-hail-mixed:before{content:"\f73a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-music:before{content:"\f8ae"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-rainbow:before{content:"\f73e"}.fa-cloud-showers:before{content:"\f73f"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sleet:before{content:"\f741"}.fa-cloud-snow:before{content:"\f742"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload:before{content:"\f0ee"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-clouds:before{content:"\f744"}.fa-clouds-moon:before{content:"\f745"}.fa-clouds-sun:before{content:"\f746"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-club:before{content:"\f327"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-code-commit:before{content:"\f386"}.fa-code-merge:before{content:"\f387"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-coffee-pot:before{content:"\f902"}.fa-coffee-togo:before{content:"\f6c5"}.fa-coffin:before{content:"\f6c6"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coin:before{content:"\f85c"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comet:before{content:"\f903"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-alt-check:before{content:"\f4a2"}.fa-comment-alt-dollar:before{content:"\f650"}.fa-comment-alt-dots:before{content:"\f4a3"}.fa-comment-alt-edit:before{content:"\f4a4"}.fa-comment-alt-exclamation:before{content:"\f4a5"}.fa-comment-alt-lines:before{content:"\f4a6"}.fa-comment-alt-medical:before{content:"\f7f4"}.fa-comment-alt-minus:before{content:"\f4a7"}.fa-comment-alt-music:before{content:"\f8af"}.fa-comment-alt-plus:before{content:"\f4a8"}.fa-comment-alt-slash:before{content:"\f4a9"}.fa-comment-alt-smile:before{content:"\f4aa"}.fa-comment-alt-times:before{content:"\f4ab"}.fa-comment-check:before{content:"\f4ac"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-edit:before{content:"\f4ae"}.fa-comment-exclamation:before{content:"\f4af"}.fa-comment-lines:before{content:"\f4b0"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-minus:before{content:"\f4b1"}.fa-comment-music:before{content:"\f8b0"}.fa-comment-plus:before{content:"\f4b2"}.fa-comment-slash:before{content:"\f4b3"}.fa-comment-smile:before{content:"\f4b4"}.fa-comment-times:before{content:"\f4b5"}.fa-comments:before{content:"\f086"}.fa-comments-alt:before{content:"\f4b6"}.fa-comments-alt-dollar:before{content:"\f652"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compass-slash:before{content:"\f5e9"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-compress-wide:before{content:"\f326"}.fa-computer-classic:before{content:"\f8b1"}.fa-computer-speaker:before{content:"\f8b2"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-construction:before{content:"\f85d"}.fa-container-storage:before{content:"\f4b7"}.fa-contao:before{content:"\f26d"}.fa-conveyor-belt:before{content:"\f46e"}.fa-conveyor-belt-alt:before{content:"\f46f"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-corn:before{content:"\f6c7"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cow:before{content:"\f6c8"}.fa-cowbell:before{content:"\f8b3"}.fa-cowbell-more:before{content:"\f8b4"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-credit-card-blank:before{content:"\f389"}.fa-credit-card-front:before{content:"\f38a"}.fa-cricket:before{content:"\f449"}.fa-critical-role:before{content:"\f6c9"}.fa-croissant:before{content:"\f7f6"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-crutches:before{content:"\f7f8"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-curling:before{content:"\f44a"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dagger:before{content:"\f6cb"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-debug:before{content:"\f7f9"}.fa-deer:before{content:"\f78e"}.fa-deer-rudolph:before{content:"\f78f"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-desktop-alt:before{content:"\f390"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dewpoint:before{content:"\f748"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diamond:before{content:"\f219"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d10:before{content:"\f6cd"}.fa-dice-d12:before{content:"\f6ce"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d4:before{content:"\f6d0"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-d8:before{content:"\f6d2"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digging:before{content:"\f85e"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-diploma:before{content:"\f5ea"}.fa-directions:before{content:"\f5eb"}.fa-disc-drive:before{content:"\f8b5"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-do-not-enter:before{content:"\f5ec"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dog-leashed:before{content:"\f6d4"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-empty:before{content:"\f473"}.fa-dolly-flatbed:before{content:"\f474"}.fa-dolly-flatbed-alt:before{content:"\f475"}.fa-dolly-flatbed-empty:before{content:"\f476"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-circle:before{content:"\f5ed"}.fa-draw-polygon:before{content:"\f5ee"}.fa-draw-square:before{content:"\f5ef"}.fa-dreidel:before{content:"\f792"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-drone:before{content:"\f85f"}.fa-drone-alt:before{content:"\f860"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick:before{content:"\f6d6"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dryer:before{content:"\f861"}.fa-dryer-alt:before{content:"\f862"}.fa-duck:before{content:"\f6d8"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-ear:before{content:"\f5f0"}.fa-ear-muffs:before{content:"\f795"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-eclipse:before{content:"\f749"}.fa-eclipse-alt:before{content:"\f74a"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-egg-fried:before{content:"\f7fc"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-elephant:before{content:"\f6da"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-h-alt:before{content:"\f39b"}.fa-ellipsis-v:before{content:"\f142"}.fa-ellipsis-v-alt:before{content:"\f39c"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-empty-set:before{content:"\f656"}.fa-engine-warning:before{content:"\f5f2"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-dollar:before{content:"\f657"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange:before{content:"\f0ec"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-square:before{content:"\f321"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows:before{content:"\f31d"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expand-wide:before{content:"\f320"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link:before{content:"\f08e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square:before{content:"\f14c"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-evil:before{content:"\f6db"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fan-table:before{content:"\f904"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-farm:before{content:"\f864"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\f905"}.fa-faucet-drip:before{content:"\f906"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-field-hockey:before{content:"\f44c"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-certificate:before{content:"\f5f3"}.fa-file-chart-line:before{content:"\f659"}.fa-file-chart-pie:before{content:"\f65a"}.fa-file-check:before{content:"\f316"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-edit:before{content:"\f31c"}.fa-file-excel:before{content:"\f1c3"}.fa-file-exclamation:before{content:"\f31a"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-minus:before{content:"\f318"}.fa-file-music:before{content:"\f8b6"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-plus:before{content:"\f319"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-search:before{content:"\f865"}.fa-file-signature:before{content:"\f573"}.fa-file-spreadsheet:before{content:"\f65b"}.fa-file-times:before{content:"\f317"}.fa-file-upload:before{content:"\f574"}.fa-file-user:before{content:"\f65c"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-files-medical:before{content:"\f7fd"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-film-alt:before{content:"\f3a0"}.fa-film-canister:before{content:"\f8b7"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-fire-smoke:before{content:"\f74b"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\f907"}.fa-fireplace:before{content:"\f79a"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fish-cooked:before{content:"\f7fe"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-alt:before{content:"\f74c"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flame:before{content:"\f6df"}.fa-flashlight:before{content:"\f8b8"}.fa-flask:before{content:"\f0c3"}.fa-flask-poison:before{content:"\f6e0"}.fa-flask-potion:before{content:"\f6e1"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flower:before{content:"\f7ff"}.fa-flower-daffodil:before{content:"\f800"}.fa-flower-tulip:before{content:"\f801"}.fa-flushed:before{content:"\f579"}.fa-flute:before{content:"\f8b9"}.fa-flux-capacitor:before{content:"\f8ba"}.fa-fly:before{content:"\f417"}.fa-fog:before{content:"\f74e"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-folder-times:before{content:"\f65f"}.fa-folder-tree:before{content:"\f802"}.fa-folders:before{content:"\f660"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-font-case:before{content:"\f866"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-football-helmet:before{content:"\f44f"}.fa-forklift:before{content:"\f47a"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-fragile:before{content:"\f4bb"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-french-fries:before{content:"\f803"}.fa-frog:before{content:"\f52e"}.fa-frosty-head:before{content:"\f79b"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-function:before{content:"\f661"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-galaxy:before{content:"\f908"}.fa-game-board:before{content:"\f867"}.fa-game-board-alt:before{content:"\f868"}.fa-game-console-handheld:before{content:"\f8bb"}.fa-gamepad:before{content:"\f11b"}.fa-gamepad-alt:before{content:"\f8bc"}.fa-garage:before{content:"\f909"}.fa-garage-car:before{content:"\f90a"}.fa-garage-open:before{content:"\f90b"}.fa-gas-pump:before{content:"\f52f"}.fa-gas-pump-slash:before{content:"\f5f4"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gift-card:before{content:"\f663"}.fa-gifts:before{content:"\f79c"}.fa-gingerbread-man:before{content:"\f79d"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass:before{content:"\f804"}.fa-glass-champagne:before{content:"\f79e"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-citrus:before{content:"\f869"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glass-whiskey-rocks:before{content:"\f7a1"}.fa-glasses:before{content:"\f530"}.fa-glasses-alt:before{content:"\f5f5"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-globe-snow:before{content:"\f7a3"}.fa-globe-stand:before{content:"\f5f6"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-golf-club:before{content:"\f451"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gramophone:before{content:"\f8bd"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-guitar-electric:before{content:"\f8be"}.fa-guitars:before{content:"\f8bf"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-h1:before{content:"\f313"}.fa-h2:before{content:"\f314"}.fa-h3:before{content:"\f315"}.fa-h4:before{content:"\f86a"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hammer-war:before{content:"\f6e4"}.fa-hamsa:before{content:"\f665"}.fa-hand-heart:before{content:"\f4bc"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-box:before{content:"\f47b"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-magic:before{content:"\f6e5"}.fa-hand-holding-seedling:before{content:"\f4bf"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-receiving:before{content:"\f47c"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-heart:before{content:"\f4c3"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-usd:before{content:"\f4c5"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt:before{content:"\f4c6"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-chef:before{content:"\f86b"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-santa:before{content:"\f7a7"}.fa-hat-winter:before{content:"\f7a8"}.fa-hat-witch:before{content:"\f6e7"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side:before{content:"\f6e9"}.fa-head-side-brain:before{content:"\f808"}.fa-head-side-headphones:before{content:"\f8c2"}.fa-head-side-medical:before{content:"\f809"}.fa-head-vr:before{content:"\f6ea"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heart-circle:before{content:"\f4c7"}.fa-heart-rate:before{content:"\f5f8"}.fa-heart-square:before{content:"\f4c8"}.fa-heartbeat:before{content:"\f21e"}.fa-heat:before{content:"\f90c"}.fa-helicopter:before{content:"\f533"}.fa-helmet-battle:before{content:"\f6eb"}.fa-hexagon:before{content:"\f312"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-mask:before{content:"\f6ee"}.fa-hockey-puck:before{content:"\f453"}.fa-hockey-sticks:before{content:"\f454"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-home-alt:before{content:"\f80a"}.fa-home-heart:before{content:"\f4c9"}.fa-home-lg:before{content:"\f80b"}.fa-home-lg-alt:before{content:"\f80c"}.fa-hood-cloak:before{content:"\f6ef"}.fa-hooli:before{content:"\f427"}.fa-horizontal-rule:before{content:"\f86c"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-horse-saddle:before{content:"\f8c3"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hospitals:before{content:"\f80e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house:before{content:"\f90d"}.fa-house-damage:before{content:"\f6f1"}.fa-house-day:before{content:"\f90e"}.fa-house-flood:before{content:"\f74f"}.fa-house-leave:before{content:"\f90f"}.fa-house-night:before{content:"\f910"}.fa-house-return:before{content:"\f911"}.fa-house-signal:before{content:"\f912"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-humidity:before{content:"\f750"}.fa-hurricane:before{content:"\f751"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-ice-skate:before{content:"\f7ac"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-icons-alt:before{content:"\f86e"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\f913"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-image-polaroid:before{content:"\f8c4"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-inbox-in:before{content:"\f310"}.fa-inbox-out:before{content:"\f311"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-industry-alt:before{content:"\f3b3"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-info-square:before{content:"\f30f"}.fa-inhaler:before{content:"\f5f9"}.fa-instagram:before{content:"\f16d"}.fa-integral:before{content:"\f667"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-intersection:before{content:"\f668"}.fa-inventory:before{content:"\f480"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-island-tropical:before{content:"\f811"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-jack-o-lantern:before{content:"\f30e"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-joystick:before{content:"\f8c5"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-jug:before{content:"\f8c6"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-kazoo:before{content:"\f8c7"}.fa-kerning:before{content:"\f86f"}.fa-key:before{content:"\f084"}.fa-key-skeleton:before{content:"\f6f3"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-keynote:before{content:"\f66c"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kidneys:before{content:"\f5fb"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kite:before{content:"\f6f4"}.fa-kiwi-bird:before{content:"\f535"}.fa-knife-kitchen:before{content:"\f6f5"}.fa-korvue:before{content:"\f42f"}.fa-lambda:before{content:"\f66e"}.fa-lamp:before{content:"\f4ca"}.fa-lamp-desk:before{content:"\f914"}.fa-lamp-floor:before{content:"\f915"}.fa-landmark:before{content:"\f66f"}.fa-landmark-alt:before{content:"\f752"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lasso:before{content:"\f8c8"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-layer-minus:before{content:"\f5fe"}.fa-layer-plus:before{content:"\f5ff"}.fa-leaf:before{content:"\f06c"}.fa-leaf-heart:before{content:"\f4cb"}.fa-leaf-maple:before{content:"\f6f6"}.fa-leaf-oak:before{content:"\f6f7"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down:before{content:"\f149"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up:before{content:"\f148"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-light-ceiling:before{content:"\f916"}.fa-light-switch:before{content:"\f917"}.fa-light-switch-off:before{content:"\f918"}.fa-light-switch-on:before{content:"\f919"}.fa-lightbulb:before{content:"\f0eb"}.fa-lightbulb-dollar:before{content:"\f670"}.fa-lightbulb-exclamation:before{content:"\f671"}.fa-lightbulb-on:before{content:"\f672"}.fa-lightbulb-slash:before{content:"\f673"}.fa-lights-holiday:before{content:"\f7b2"}.fa-line:before{content:"\f3c0"}.fa-line-columns:before{content:"\f870"}.fa-line-height:before{content:"\f871"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lips:before{content:"\f600"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-music:before{content:"\f8c9"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location:before{content:"\f601"}.fa-location-arrow:before{content:"\f124"}.fa-location-circle:before{content:"\f602"}.fa-location-slash:before{content:"\f603"}.fa-lock:before{content:"\f023"}.fa-lock-alt:before{content:"\f30d"}.fa-lock-open:before{content:"\f3c1"}.fa-lock-open-alt:before{content:"\f3c2"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-long-arrow-up:before{content:"\f176"}.fa-loveseat:before{content:"\f4cc"}.fa-low-vision:before{content:"\f2a8"}.fa-luchador:before{content:"\f455"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lyft:before{content:"\f3c3"}.fa-mace:before{content:"\f6f8"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailbox:before{content:"\f813"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-mandolin:before{content:"\f6f9"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-marker-alt-slash:before{content:"\f605"}.fa-map-marker-check:before{content:"\f606"}.fa-map-marker-edit:before{content:"\f607"}.fa-map-marker-exclamation:before{content:"\f608"}.fa-map-marker-minus:before{content:"\f609"}.fa-map-marker-plus:before{content:"\f60a"}.fa-map-marker-question:before{content:"\f60b"}.fa-map-marker-slash:before{content:"\f60c"}.fa-map-marker-smile:before{content:"\f60d"}.fa-map-marker-times:before{content:"\f60e"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-meat:before{content:"\f814"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaphone:before{content:"\f675"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\f91a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microphone-stand:before{content:"\f8cb"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-microwave:before{content:"\f91b"}.fa-mind-share:before{content:"\f677"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-hexagon:before{content:"\f307"}.fa-minus-octagon:before{content:"\f308"}.fa-minus-square:before{content:"\f146"}.fa-mistletoe:before{content:"\f7b4"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-mobile-android:before{content:"\f3ce"}.fa-mobile-android-alt:before{content:"\f3cf"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-money-check-edit:before{content:"\f872"}.fa-money-check-edit-alt:before{content:"\f873"}.fa-monitor-heart-rate:before{content:"\f611"}.fa-monkey:before{content:"\f6fb"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-moon-cloud:before{content:"\f754"}.fa-moon-stars:before{content:"\f755"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mountains:before{content:"\f6fd"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-alt:before{content:"\f8cd"}.fa-mouse-pointer:before{content:"\f245"}.fa-mp3-player:before{content:"\f8ce"}.fa-mug:before{content:"\f874"}.fa-mug-hot:before{content:"\f7b6"}.fa-mug-marshmallows:before{content:"\f7b7"}.fa-mug-tea:before{content:"\f875"}.fa-music:before{content:"\f001"}.fa-music-alt:before{content:"\f8cf"}.fa-music-alt-slash:before{content:"\f8d0"}.fa-music-slash:before{content:"\f8d1"}.fa-napster:before{content:"\f3d2"}.fa-narwhal:before{content:"\f6fe"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octagon:before{content:"\f306"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-oil-temp:before{content:"\f614"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-omega:before{content:"\f67a"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-ornament:before{content:"\f7b8"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-outlet:before{content:"\f91c"}.fa-oven:before{content:"\f91d"}.fa-overline:before{content:"\f876"}.fa-page-break:before{content:"\f877"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-brush-alt:before{content:"\f5a9"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-pallet-alt:before{content:"\f483"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-paragraph-rtl:before{content:"\f878"}.fa-parking:before{content:"\f540"}.fa-parking-circle:before{content:"\f615"}.fa-parking-circle-slash:before{content:"\f616"}.fa-parking-slash:before{content:"\f617"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paw-alt:before{content:"\f701"}.fa-paw-claws:before{content:"\f702"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pegasus:before{content:"\f703"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil:before{content:"\f040"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-paintbrush:before{content:"\f618"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-pennant:before{content:"\f456"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-person-carry:before{content:"\f4cf"}.fa-person-dolly:before{content:"\f4d0"}.fa-person-dolly-empty:before{content:"\f4d1"}.fa-person-sign:before{content:"\f757"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-laptop:before{content:"\f87a"}.fa-phone-office:before{content:"\f67d"}.fa-phone-plus:before{content:"\f4d2"}.fa-phone-rotary:before{content:"\f8d3"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pi:before{content:"\f67e"}.fa-piano:before{content:"\f8d4"}.fa-piano-keyboard:before{content:"\f8d5"}.fa-pie:before{content:"\f705"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\f91e"}.fa-pig:before{content:"\f706"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza:before{content:"\f817"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-alt:before{content:"\f3de"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-planet-moon:before{content:"\f91f"}.fa-planet-ringed:before{content:"\f920"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-hexagon:before{content:"\f300"}.fa-plus-octagon:before{content:"\f301"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-podium:before{content:"\f680"}.fa-podium-star:before{content:"\f758"}.fa-police-box:before{content:"\f921"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poll-people:before{content:"\f759"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-popcorn:before{content:"\f819"}.fa-portal-enter:before{content:"\f922"}.fa-portal-exit:before{content:"\f923"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-presentation:before{content:"\f685"}.fa-print:before{content:"\f02f"}.fa-print-search:before{content:"\f81a"}.fa-print-slash:before{content:"\f686"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-projector:before{content:"\f8d6"}.fa-pumpkin:before{content:"\f707"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-question-square:before{content:"\f2fd"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-rabbit:before{content:"\f708"}.fa-rabbit-fast:before{content:"\f709"}.fa-racquet:before{content:"\f45a"}.fa-radar:before{content:"\f924"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-radio:before{content:"\f8d7"}.fa-radio-alt:before{content:"\f8d8"}.fa-rainbow:before{content:"\f75b"}.fa-raindrops:before{content:"\f75c"}.fa-ram:before{content:"\f70a"}.fa-ramp-loading:before{content:"\f4d4"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-raygun:before{content:"\f925"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-rectangle-landscape:before{content:"\f2fa"}.fa-rectangle-portrait:before{content:"\f2fb"}.fa-rectangle-wide:before{content:"\f2fc"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-refrigerator:before{content:"\f926"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-repeat:before{content:"\f363"}.fa-repeat-1:before{content:"\f365"}.fa-repeat-1-alt:before{content:"\f366"}.fa-repeat-alt:before{content:"\f364"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-retweet-alt:before{content:"\f361"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-rings-wedding:before{content:"\f81b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocket-launch:before{content:"\f927"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-route-highway:before{content:"\f61a"}.fa-route-interstate:before{content:"\f61b"}.fa-router:before{content:"\f8da"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-triangle:before{content:"\f61c"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rv:before{content:"\f7be"}.fa-sack:before{content:"\f81c"}.fa-sack-dollar:before{content:"\f81d"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salad:before{content:"\f81e"}.fa-salesforce:before{content:"\f83b"}.fa-sandwich:before{content:"\f81f"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-sausage:before{content:"\f820"}.fa-save:before{content:"\f0c7"}.fa-sax-hot:before{content:"\f8db"}.fa-saxophone:before{content:"\f8dc"}.fa-scalpel:before{content:"\f61d"}.fa-scalpel-path:before{content:"\f61e"}.fa-scanner:before{content:"\f488"}.fa-scanner-image:before{content:"\f8f3"}.fa-scanner-keyboard:before{content:"\f489"}.fa-scanner-touchscreen:before{content:"\f48a"}.fa-scarecrow:before{content:"\f70d"}.fa-scarf:before{content:"\f7c1"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-scroll-old:before{content:"\f70f"}.fa-scrubber:before{content:"\f2f8"}.fa-scythe:before{content:"\f710"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-send-back:before{content:"\f87e"}.fa-send-backward:before{content:"\f87f"}.fa-sensor:before{content:"\f928"}.fa-sensor-alert:before{content:"\f929"}.fa-sensor-fire:before{content:"\f92a"}.fa-sensor-on:before{content:"\f92b"}.fa-sensor-smoke:before{content:"\f92c"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-all:before{content:"\f367"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-sheep:before{content:"\f711"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield:before{content:"\f132"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-check:before{content:"\f2f7"}.fa-shield-cross:before{content:"\f712"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shipping-timed:before{content:"\f48c"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shish-kebab:before{content:"\f821"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shovel:before{content:"\f713"}.fa-shovel-snow:before{content:"\f7c3"}.fa-shower:before{content:"\f2cc"}.fa-shredder:before{content:"\f68a"}.fa-shuttle-van:before{content:"\f5b6"}.fa-shuttlecock:before{content:"\f45b"}.fa-sickle:before{content:"\f822"}.fa-sigma:before{content:"\f68b"}.fa-sign:before{content:"\f4d9"}.fa-sign-in:before{content:"\f090"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out:before{content:"\f08b"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signal-1:before{content:"\f68c"}.fa-signal-2:before{content:"\f68d"}.fa-signal-3:before{content:"\f68e"}.fa-signal-4:before{content:"\f68f"}.fa-signal-alt:before{content:"\f690"}.fa-signal-alt-1:before{content:"\f691"}.fa-signal-alt-2:before{content:"\f692"}.fa-signal-alt-3:before{content:"\f693"}.fa-signal-alt-slash:before{content:"\f694"}.fa-signal-slash:before{content:"\f695"}.fa-signal-stream:before{content:"\f8dd"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-siren:before{content:"\f92d"}.fa-siren-on:before{content:"\f92e"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-skeleton:before{content:"\f620"}.fa-sketch:before{content:"\f7c6"}.fa-ski-jump:before{content:"\f7c7"}.fa-ski-lift:before{content:"\f7c8"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-cow:before{content:"\f8de"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sledding:before{content:"\f7cb"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-sliders-h-square:before{content:"\f3f0"}.fa-sliders-v:before{content:"\f3f1"}.fa-sliders-v-square:before{content:"\f3f2"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-plus:before{content:"\f5b9"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoke:before{content:"\f760"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snake:before{content:"\f716"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snooze:before{content:"\f880"}.fa-snow-blowing:before{content:"\f761"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowflakes:before{content:"\f7cf"}.fa-snowman:before{content:"\f7d0"}.fa-snowmobile:before{content:"\f7d1"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-solar-system:before{content:"\f92f"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-alt:before{content:"\f883"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-circle:before{content:"\f930"}.fa-sort-circle-down:before{content:"\f931"}.fa-sort-circle-up:before{content:"\f932"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-shapes-down:before{content:"\f888"}.fa-sort-shapes-down-alt:before{content:"\f889"}.fa-sort-shapes-up:before{content:"\f88a"}.fa-sort-shapes-up-alt:before{content:"\f88b"}.fa-sort-size-down:before{content:"\f88c"}.fa-sort-size-down-alt:before{content:"\f88d"}.fa-sort-size-up:before{content:"\f88e"}.fa-sort-size-up-alt:before{content:"\f88f"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-soup:before{content:"\f823"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-space-station-moon:before{content:"\f933"}.fa-space-station-moon-alt:before{content:"\f934"}.fa-spade:before{content:"\f2f4"}.fa-sparkles:before{content:"\f890"}.fa-speakap:before{content:"\f3f3"}.fa-speaker:before{content:"\f8df"}.fa-speaker-deck:before{content:"\f83c"}.fa-speakers:before{content:"\f8e0"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spider-black-widow:before{content:"\f718"}.fa-spider-web:before{content:"\f719"}.fa-spinner:before{content:"\f110"}.fa-spinner-third:before{content:"\f3f4"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-sprinkler:before{content:"\f935"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root:before{content:"\f697"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-squirrel:before{content:"\f71a"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-staff:before{content:"\f71b"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-christmas:before{content:"\f7d4"}.fa-star-exclamation:before{content:"\f2f3"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-star-shooting:before{content:"\f936"}.fa-starfighter:before{content:"\f937"}.fa-starfighter-alt:before{content:"\f938"}.fa-stars:before{content:"\f762"}.fa-starship:before{content:"\f939"}.fa-starship-freighter:before{content:"\f93a"}.fa-staylinked:before{content:"\f3f5"}.fa-steak:before{content:"\f824"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-steering-wheel:before{content:"\f622"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stocking:before{content:"\f7d5"}.fa-stomach:before{content:"\f623"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-stretcher:before{content:"\f825"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-sun-cloud:before{content:"\f763"}.fa-sun-dust:before{content:"\f764"}.fa-sun-haze:before{content:"\f765"}.fa-sunglasses:before{content:"\f892"}.fa-sunrise:before{content:"\f766"}.fa-sunset:before{content:"\f767"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-sword:before{content:"\f71c"}.fa-sword-laser:before{content:"\f93b"}.fa-sword-laser-alt:before{content:"\f93c"}.fa-swords:before{content:"\f71d"}.fa-swords-laser:before{content:"\f93d"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablet-android:before{content:"\f3fb"}.fa-tablet-android-alt:before{content:"\f3fc"}.fa-tablet-rugged:before{content:"\f48f"}.fa-tablets:before{content:"\f490"}.fa-tachometer:before{content:"\f0e4"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tachometer-alt-average:before{content:"\f624"}.fa-tachometer-alt-fast:before{content:"\f625"}.fa-tachometer-alt-fastest:before{content:"\f626"}.fa-tachometer-alt-slow:before{content:"\f627"}.fa-tachometer-alt-slowest:before{content:"\f628"}.fa-tachometer-average:before{content:"\f629"}.fa-tachometer-fast:before{content:"\f62a"}.fa-tachometer-fastest:before{content:"\f62b"}.fa-tachometer-slow:before{content:"\f62c"}.fa-tachometer-slowest:before{content:"\f62d"}.fa-taco:before{content:"\f826"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tally:before{content:"\f69c"}.fa-tanakh:before{content:"\f827"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-tasks-alt:before{content:"\f828"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-telescope:before{content:"\f93e"}.fa-temperature-down:before{content:"\f93f"}.fa-temperature-frigid:before{content:"\f768"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-hot:before{content:"\f76a"}.fa-temperature-low:before{content:"\f76b"}.fa-temperature-up:before{content:"\f940"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-tennis-ball:before{content:"\f45e"}.fa-terminal:before{content:"\f120"}.fa-text:before{content:"\f893"}.fa-text-height:before{content:"\f034"}.fa-text-size:before{content:"\f894"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-theta:before{content:"\f69e"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-thunderstorm:before{content:"\f76c"}.fa-thunderstorm-moon:before{content:"\f76d"}.fa-thunderstorm-sun:before{content:"\f76e"}.fa-ticket:before{content:"\f145"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tilde:before{content:"\f69f"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-times-hexagon:before{content:"\f2ee"}.fa-times-octagon:before{content:"\f2f0"}.fa-times-square:before{content:"\f2d3"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tire:before{content:"\f631"}.fa-tire-flat:before{content:"\f632"}.fa-tire-pressure-warning:before{content:"\f633"}.fa-tire-rugged:before{content:"\f634"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-alt:before{content:"\f71f"}.fa-tombstone:before{content:"\f720"}.fa-tombstone-alt:before{content:"\f721"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-toothbrush:before{content:"\f635"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tornado:before{content:"\f76f"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-cone:before{content:"\f636"}.fa-traffic-light:before{content:"\f637"}.fa-traffic-light-go:before{content:"\f638"}.fa-traffic-light-slow:before{content:"\f639"}.fa-traffic-light-stop:before{content:"\f63a"}.fa-trailer:before{content:"\f941"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-transporter:before{content:"\f942"}.fa-transporter-1:before{content:"\f943"}.fa-transporter-2:before{content:"\f944"}.fa-transporter-3:before{content:"\f945"}.fa-transporter-empty:before{content:"\f946"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-trash-undo:before{content:"\f895"}.fa-trash-undo-alt:before{content:"\f896"}.fa-treasure-chest:before{content:"\f723"}.fa-tree:before{content:"\f1bb"}.fa-tree-alt:before{content:"\f400"}.fa-tree-christmas:before{content:"\f7db"}.fa-tree-decorated:before{content:"\f7dc"}.fa-tree-large:before{content:"\f7dd"}.fa-tree-palm:before{content:"\f82b"}.fa-trees:before{content:"\f724"}.fa-trello:before{content:"\f181"}.fa-triangle:before{content:"\f2ec"}.fa-triangle-music:before{content:"\f8e2"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-trophy-alt:before{content:"\f2eb"}.fa-truck:before{content:"\f0d1"}.fa-truck-container:before{content:"\f4dc"}.fa-truck-couch:before{content:"\f4dd"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-truck-plow:before{content:"\f7de"}.fa-truck-ramp:before{content:"\f4e0"}.fa-trumpet:before{content:"\f8e3"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-turkey:before{content:"\f725"}.fa-turntable:before{content:"\f8e4"}.fa-turtle:before{content:"\f726"}.fa-tv:before{content:"\f26c"}.fa-tv-alt:before{content:"\f8e5"}.fa-tv-music:before{content:"\f8e6"}.fa-tv-retro:before{content:"\f401"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typewriter:before{content:"\f8e7"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-ufo:before{content:"\f947"}.fa-ufo-beam:before{content:"\f948"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-unicorn:before{content:"\f727"}.fa-union:before{content:"\f6a2"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\f949"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-usb-drive:before{content:"\f8e9"}.fa-usd-circle:before{content:"\f2e8"}.fa-usd-square:before{content:"\f2e9"}.fa-user:before{content:"\f007"}.fa-user-alien:before{content:"\f94a"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-chart:before{content:"\f6a3"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-cowboy:before{content:"\f8ea"}.fa-user-crown:before{content:"\f6a4"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-hard-hat:before{content:"\f82c"}.fa-user-headset:before{content:"\f82d"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-md-chat:before{content:"\f82e"}.fa-user-minus:before{content:"\f503"}.fa-user-music:before{content:"\f8eb"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-robot:before{content:"\f94b"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-user-visor:before{content:"\f94c"}.fa-users:before{content:"\f0c0"}.fa-users-class:before{content:"\f63d"}.fa-users-cog:before{content:"\f509"}.fa-users-crown:before{content:"\f6a5"}.fa-users-medical:before{content:"\f830"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-fork:before{content:"\f2e3"}.fa-utensil-knife:before{content:"\f2e4"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-utensils-alt:before{content:"\f2e6"}.fa-vaadin:before{content:"\f408"}.fa-vacuum:before{content:"\f94d"}.fa-vacuum-robot:before{content:"\f94e"}.fa-value-absolute:before{content:"\f6a6"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vhs:before{content:"\f8ec"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-plus:before{content:"\f4e1"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-violin:before{content:"\f8ed"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volcano:before{content:"\f770"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume:before{content:"\f6a8"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-slash:before{content:"\f2e2"}.fa-volume-up:before{content:"\f028"}.fa-vote-nay:before{content:"\f771"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-wagon-covered:before{content:"\f8ee"}.fa-walker:before{content:"\f831"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-wand:before{content:"\f72a"}.fa-wand-magic:before{content:"\f72b"}.fa-warehouse:before{content:"\f494"}.fa-warehouse-alt:before{content:"\f495"}.fa-washer:before{content:"\f898"}.fa-watch:before{content:"\f2e1"}.fa-watch-calculator:before{content:"\f8f0"}.fa-watch-fitness:before{content:"\f63e"}.fa-water:before{content:"\f773"}.fa-water-lower:before{content:"\f774"}.fa-water-rise:before{content:"\f775"}.fa-wave-sine:before{content:"\f899"}.fa-wave-square:before{content:"\f83e"}.fa-wave-triangle:before{content:"\f89a"}.fa-waveform:before{content:"\f8f1"}.fa-waveform-path:before{content:"\f8f2"}.fa-waze:before{content:"\f83f"}.fa-webcam:before{content:"\f832"}.fa-webcam-slash:before{content:"\f833"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whale:before{content:"\f72c"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheat:before{content:"\f72d"}.fa-wheelchair:before{content:"\f193"}.fa-whistle:before{content:"\f460"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wifi-1:before{content:"\f6aa"}.fa-wifi-2:before{content:"\f6ab"}.fa-wifi-slash:before{content:"\f6ac"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-wind-turbine:before{content:"\f89b"}.fa-wind-warning:before{content:"\f776"}.fa-window:before{content:"\f40e"}.fa-window-alt:before{content:"\f40f"}.fa-window-close:before{content:"\f410"}.fa-window-frame:before{content:"\f94f"}.fa-window-frame-open:before{content:"\f950"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-windsock:before{content:"\f777"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wreath:before{content:"\f7e2"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Duotone";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-duotone-900.eot);src:url(../webfonts/fa-duotone-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-duotone-900.woff2) format("woff2"),url(../webfonts/fa-duotone-900.woff) format("woff"),url(../webfonts/fa-duotone-900.ttf) format("truetype"),url(../webfonts/fa-duotone-900.svg#fontawesome) format("svg")}.fad{position:relative;font-family:"Font Awesome 5 Duotone";font-weight:900}.fad:before{position:absolute;color:var(--fa-primary-color,inherit);opacity:1;opacity:var(--fa-primary-opacity,1)}.fad:after{color:var(--fa-secondary-color,inherit)}.fa-swap-opacity .fad:before,.fad.fa-swap-opacity:before,.fad:after{opacity:.4;opacity:var(--fa-secondary-opacity,.4)}.fa-swap-opacity .fad:after,.fad.fa-swap-opacity:after{opacity:1;opacity:var(--fa-primary-opacity,1)}.fad.fa-inverse{color:#fff}.fad.fa-stack-1x,.fad.fa-stack-2x{position:absolute}.fad.fa-fw:before,.fad.fa-stack-1x:before,.fad.fa-stack-2x:before{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.fad.fa-abacus:after{content:"\10f640"}.fad.fa-acorn:after{content:"\10f6ae"}.fad.fa-ad:after{content:"\10f641"}.fad.fa-address-book:after{content:"\10f2b9"}.fad.fa-address-card:after{content:"\10f2bb"}.fad.fa-adjust:after{content:"\10f042"}.fad.fa-air-conditioner:after{content:"\10f8f4"}.fad.fa-air-freshener:after{content:"\10f5d0"}.fad.fa-alarm-clock:after{content:"\10f34e"}.fad.fa-alarm-exclamation:after{content:"\10f843"}.fad.fa-alarm-plus:after{content:"\10f844"}.fad.fa-alarm-snooze:after{content:"\10f845"}.fad.fa-album:after{content:"\10f89f"}.fad.fa-album-collection:after{content:"\10f8a0"}.fad.fa-alicorn:after{content:"\10f6b0"}.fad.fa-alien:after{content:"\10f8f5"}.fad.fa-alien-monster:after{content:"\10f8f6"}.fad.fa-align-center:after{content:"\10f037"}.fad.fa-align-justify:after{content:"\10f039"}.fad.fa-align-left:after{content:"\10f036"}.fad.fa-align-right:after{content:"\10f038"}.fad.fa-align-slash:after{content:"\10f846"}.fad.fa-allergies:after{content:"\10f461"}.fad.fa-ambulance:after{content:"\10f0f9"}.fad.fa-american-sign-language-interpreting:after{content:"\10f2a3"}.fad.fa-amp-guitar:after{content:"\10f8a1"}.fad.fa-analytics:after{content:"\10f643"}.fad.fa-anchor:after{content:"\10f13d"}.fad.fa-angel:after{content:"\10f779"}.fad.fa-angle-double-down:after{content:"\10f103"}.fad.fa-angle-double-left:after{content:"\10f100"}.fad.fa-angle-double-right:after{content:"\10f101"}.fad.fa-angle-double-up:after{content:"\10f102"}.fad.fa-angle-down:after{content:"\10f107"}.fad.fa-angle-left:after{content:"\10f104"}.fad.fa-angle-right:after{content:"\10f105"}.fad.fa-angle-up:after{content:"\10f106"}.fad.fa-angry:after{content:"\10f556"}.fad.fa-ankh:after{content:"\10f644"}.fad.fa-apple-alt:after{content:"\10f5d1"}.fad.fa-apple-crate:after{content:"\10f6b1"}.fad.fa-archive:after{content:"\10f187"}.fad.fa-archway:after{content:"\10f557"}.fad.fa-arrow-alt-circle-down:after{content:"\10f358"}.fad.fa-arrow-alt-circle-left:after{content:"\10f359"}.fad.fa-arrow-alt-circle-right:after{content:"\10f35a"}.fad.fa-arrow-alt-circle-up:after{content:"\10f35b"}.fad.fa-arrow-alt-down:after{content:"\10f354"}.fad.fa-arrow-alt-from-bottom:after{content:"\10f346"}.fad.fa-arrow-alt-from-left:after{content:"\10f347"}.fad.fa-arrow-alt-from-right:after{content:"\10f348"}.fad.fa-arrow-alt-from-top:after{content:"\10f349"}.fad.fa-arrow-alt-left:after{content:"\10f355"}.fad.fa-arrow-alt-right:after{content:"\10f356"}.fad.fa-arrow-alt-square-down:after{content:"\10f350"}.fad.fa-arrow-alt-square-left:after{content:"\10f351"}.fad.fa-arrow-alt-square-right:after{content:"\10f352"}.fad.fa-arrow-alt-square-up:after{content:"\10f353"}.fad.fa-arrow-alt-to-bottom:after{content:"\10f34a"}.fad.fa-arrow-alt-to-left:after{content:"\10f34b"}.fad.fa-arrow-alt-to-right:after{content:"\10f34c"}.fad.fa-arrow-alt-to-top:after{content:"\10f34d"}.fad.fa-arrow-alt-up:after{content:"\10f357"}.fad.fa-arrow-circle-down:after{content:"\10f0ab"}.fad.fa-arrow-circle-left:after{content:"\10f0a8"}.fad.fa-arrow-circle-right:after{content:"\10f0a9"}.fad.fa-arrow-circle-up:after{content:"\10f0aa"}.fad.fa-arrow-down:after{content:"\10f063"}.fad.fa-arrow-from-bottom:after{content:"\10f342"}.fad.fa-arrow-from-left:after{content:"\10f343"}.fad.fa-arrow-from-right:after{content:"\10f344"}.fad.fa-arrow-from-top:after{content:"\10f345"}.fad.fa-arrow-left:after{content:"\10f060"}.fad.fa-arrow-right:after{content:"\10f061"}.fad.fa-arrow-square-down:after{content:"\10f339"}.fad.fa-arrow-square-left:after{content:"\10f33a"}.fad.fa-arrow-square-right:after{content:"\10f33b"}.fad.fa-arrow-square-up:after{content:"\10f33c"}.fad.fa-arrow-to-bottom:after{content:"\10f33d"}.fad.fa-arrow-to-left:after{content:"\10f33e"}.fad.fa-arrow-to-right:after{content:"\10f340"}.fad.fa-arrow-to-top:after{content:"\10f341"}.fad.fa-arrow-up:after{content:"\10f062"}.fad.fa-arrows:after{content:"\10f047"}.fad.fa-arrows-alt:after{content:"\10f0b2"}.fad.fa-arrows-alt-h:after{content:"\10f337"}.fad.fa-arrows-alt-v:after{content:"\10f338"}.fad.fa-arrows-h:after{content:"\10f07e"}.fad.fa-arrows-v:after{content:"\10f07d"}.fad.fa-assistive-listening-systems:after{content:"\10f2a2"}.fad.fa-asterisk:after{content:"\10f069"}.fad.fa-at:after{content:"\10f1fa"}.fad.fa-atlas:after{content:"\10f558"}.fad.fa-atom:after{content:"\10f5d2"}.fad.fa-atom-alt:after{content:"\10f5d3"}.fad.fa-audio-description:after{content:"\10f29e"}.fad.fa-award:after{content:"\10f559"}.fad.fa-axe:after{content:"\10f6b2"}.fad.fa-axe-battle:after{content:"\10f6b3"}.fad.fa-baby:after{content:"\10f77c"}.fad.fa-baby-carriage:after{content:"\10f77d"}.fad.fa-backpack:after{content:"\10f5d4"}.fad.fa-backspace:after{content:"\10f55a"}.fad.fa-backward:after{content:"\10f04a"}.fad.fa-bacon:after{content:"\10f7e5"}.fad.fa-badge:after{content:"\10f335"}.fad.fa-badge-check:after{content:"\10f336"}.fad.fa-badge-dollar:after{content:"\10f645"}.fad.fa-badge-percent:after{content:"\10f646"}.fad.fa-badge-sheriff:after{content:"\10f8a2"}.fad.fa-badger-honey:after{content:"\10f6b4"}.fad.fa-bags-shopping:after{content:"\10f847"}.fad.fa-bahai:after{content:"\10f666"}.fad.fa-balance-scale:after{content:"\10f24e"}.fad.fa-balance-scale-left:after{content:"\10f515"}.fad.fa-balance-scale-right:after{content:"\10f516"}.fad.fa-ball-pile:after{content:"\10f77e"}.fad.fa-ballot:after{content:"\10f732"}.fad.fa-ballot-check:after{content:"\10f733"}.fad.fa-ban:after{content:"\10f05e"}.fad.fa-band-aid:after{content:"\10f462"}.fad.fa-banjo:after{content:"\10f8a3"}.fad.fa-barcode:after{content:"\10f02a"}.fad.fa-barcode-alt:after{content:"\10f463"}.fad.fa-barcode-read:after{content:"\10f464"}.fad.fa-barcode-scan:after{content:"\10f465"}.fad.fa-bars:after{content:"\10f0c9"}.fad.fa-baseball:after{content:"\10f432"}.fad.fa-baseball-ball:after{content:"\10f433"}.fad.fa-basketball-ball:after{content:"\10f434"}.fad.fa-basketball-hoop:after{content:"\10f435"}.fad.fa-bat:after{content:"\10f6b5"}.fad.fa-bath:after{content:"\10f2cd"}.fad.fa-battery-bolt:after{content:"\10f376"}.fad.fa-battery-empty:after{content:"\10f244"}.fad.fa-battery-full:after{content:"\10f240"}.fad.fa-battery-half:after{content:"\10f242"}.fad.fa-battery-quarter:after{content:"\10f243"}.fad.fa-battery-slash:after{content:"\10f377"}.fad.fa-battery-three-quarters:after{content:"\10f241"}.fad.fa-bed:after{content:"\10f236"}.fad.fa-bed-alt:after{content:"\10f8f7"}.fad.fa-bed-bunk:after{content:"\10f8f8"}.fad.fa-bed-empty:after{content:"\10f8f9"}.fad.fa-beer:after{content:"\10f0fc"}.fad.fa-bell:after{content:"\10f0f3"}.fad.fa-bell-exclamation:after{content:"\10f848"}.fad.fa-bell-on:after{content:"\10f8fa"}.fad.fa-bell-plus:after{content:"\10f849"}.fad.fa-bell-school:after{content:"\10f5d5"}.fad.fa-bell-school-slash:after{content:"\10f5d6"}.fad.fa-bell-slash:after{content:"\10f1f6"}.fad.fa-bells:after{content:"\10f77f"}.fad.fa-betamax:after{content:"\10f8a4"}.fad.fa-bezier-curve:after{content:"\10f55b"}.fad.fa-bible:after{content:"\10f647"}.fad.fa-bicycle:after{content:"\10f206"}.fad.fa-biking:after{content:"\10f84a"}.fad.fa-biking-mountain:after{content:"\10f84b"}.fad.fa-binoculars:after{content:"\10f1e5"}.fad.fa-biohazard:after{content:"\10f780"}.fad.fa-birthday-cake:after{content:"\10f1fd"}.fad.fa-blanket:after{content:"\10f498"}.fad.fa-blender:after{content:"\10f517"}.fad.fa-blender-phone:after{content:"\10f6b6"}.fad.fa-blind:after{content:"\10f29d"}.fad.fa-blinds:after{content:"\10f8fb"}.fad.fa-blinds-open:after{content:"\10f8fc"}.fad.fa-blinds-raised:after{content:"\10f8fd"}.fad.fa-blog:after{content:"\10f781"}.fad.fa-bold:after{content:"\10f032"}.fad.fa-bolt:after{content:"\10f0e7"}.fad.fa-bomb:after{content:"\10f1e2"}.fad.fa-bone:after{content:"\10f5d7"}.fad.fa-bone-break:after{content:"\10f5d8"}.fad.fa-bong:after{content:"\10f55c"}.fad.fa-book:after{content:"\10f02d"}.fad.fa-book-alt:after{content:"\10f5d9"}.fad.fa-book-dead:after{content:"\10f6b7"}.fad.fa-book-heart:after{content:"\10f499"}.fad.fa-book-medical:after{content:"\10f7e6"}.fad.fa-book-open:after{content:"\10f518"}.fad.fa-book-reader:after{content:"\10f5da"}.fad.fa-book-spells:after{content:"\10f6b8"}.fad.fa-book-user:after{content:"\10f7e7"}.fad.fa-bookmark:after{content:"\10f02e"}.fad.fa-books:after{content:"\10f5db"}.fad.fa-books-medical:after{content:"\10f7e8"}.fad.fa-boombox:after{content:"\10f8a5"}.fad.fa-boot:after{content:"\10f782"}.fad.fa-booth-curtain:after{content:"\10f734"}.fad.fa-border-all:after{content:"\10f84c"}.fad.fa-border-bottom:after{content:"\10f84d"}.fad.fa-border-center-h:after{content:"\10f89c"}.fad.fa-border-center-v:after{content:"\10f89d"}.fad.fa-border-inner:after{content:"\10f84e"}.fad.fa-border-left:after{content:"\10f84f"}.fad.fa-border-none:after{content:"\10f850"}.fad.fa-border-outer:after{content:"\10f851"}.fad.fa-border-right:after{content:"\10f852"}.fad.fa-border-style:after{content:"\10f853"}.fad.fa-border-style-alt:after{content:"\10f854"}.fad.fa-border-top:after{content:"\10f855"}.fad.fa-bow-arrow:after{content:"\10f6b9"}.fad.fa-bowling-ball:after{content:"\10f436"}.fad.fa-bowling-pins:after{content:"\10f437"}.fad.fa-box:after{content:"\10f466"}.fad.fa-box-alt:after{content:"\10f49a"}.fad.fa-box-ballot:after{content:"\10f735"}.fad.fa-box-check:after{content:"\10f467"}.fad.fa-box-fragile:after{content:"\10f49b"}.fad.fa-box-full:after{content:"\10f49c"}.fad.fa-box-heart:after{content:"\10f49d"}.fad.fa-box-open:after{content:"\10f49e"}.fad.fa-box-up:after{content:"\10f49f"}.fad.fa-box-usd:after{content:"\10f4a0"}.fad.fa-boxes:after{content:"\10f468"}.fad.fa-boxes-alt:after{content:"\10f4a1"}.fad.fa-boxing-glove:after{content:"\10f438"}.fad.fa-brackets:after{content:"\10f7e9"}.fad.fa-brackets-curly:after{content:"\10f7ea"}.fad.fa-braille:after{content:"\10f2a1"}.fad.fa-brain:after{content:"\10f5dc"}.fad.fa-bread-loaf:after{content:"\10f7eb"}.fad.fa-bread-slice:after{content:"\10f7ec"}.fad.fa-briefcase:after{content:"\10f0b1"}.fad.fa-briefcase-medical:after{content:"\10f469"}.fad.fa-bring-forward:after{content:"\10f856"}.fad.fa-bring-front:after{content:"\10f857"}.fad.fa-broadcast-tower:after{content:"\10f519"}.fad.fa-broom:after{content:"\10f51a"}.fad.fa-browser:after{content:"\10f37e"}.fad.fa-brush:after{content:"\10f55d"}.fad.fa-bug:after{content:"\10f188"}.fad.fa-building:after{content:"\10f1ad"}.fad.fa-bullhorn:after{content:"\10f0a1"}.fad.fa-bullseye:after{content:"\10f140"}.fad.fa-bullseye-arrow:after{content:"\10f648"}.fad.fa-bullseye-pointer:after{content:"\10f649"}.fad.fa-burger-soda:after{content:"\10f858"}.fad.fa-burn:after{content:"\10f46a"}.fad.fa-burrito:after{content:"\10f7ed"}.fad.fa-bus:after{content:"\10f207"}.fad.fa-bus-alt:after{content:"\10f55e"}.fad.fa-bus-school:after{content:"\10f5dd"}.fad.fa-business-time:after{content:"\10f64a"}.fad.fa-cabinet-filing:after{content:"\10f64b"}.fad.fa-cactus:after{content:"\10f8a7"}.fad.fa-calculator:after{content:"\10f1ec"}.fad.fa-calculator-alt:after{content:"\10f64c"}.fad.fa-calendar:after{content:"\10f133"}.fad.fa-calendar-alt:after{content:"\10f073"}.fad.fa-calendar-check:after{content:"\10f274"}.fad.fa-calendar-day:after{content:"\10f783"}.fad.fa-calendar-edit:after{content:"\10f333"}.fad.fa-calendar-exclamation:after{content:"\10f334"}.fad.fa-calendar-minus:after{content:"\10f272"}.fad.fa-calendar-plus:after{content:"\10f271"}.fad.fa-calendar-star:after{content:"\10f736"}.fad.fa-calendar-times:after{content:"\10f273"}.fad.fa-calendar-week:after{content:"\10f784"}.fad.fa-camcorder:after{content:"\10f8a8"}.fad.fa-camera:after{content:"\10f030"}.fad.fa-camera-alt:after{content:"\10f332"}.fad.fa-camera-home:after{content:"\10f8fe"}.fad.fa-camera-movie:after{content:"\10f8a9"}.fad.fa-camera-polaroid:after{content:"\10f8aa"}.fad.fa-camera-retro:after{content:"\10f083"}.fad.fa-campfire:after{content:"\10f6ba"}.fad.fa-campground:after{content:"\10f6bb"}.fad.fa-candle-holder:after{content:"\10f6bc"}.fad.fa-candy-cane:after{content:"\10f786"}.fad.fa-candy-corn:after{content:"\10f6bd"}.fad.fa-cannabis:after{content:"\10f55f"}.fad.fa-capsules:after{content:"\10f46b"}.fad.fa-car:after{content:"\10f1b9"}.fad.fa-car-alt:after{content:"\10f5de"}.fad.fa-car-battery:after{content:"\10f5df"}.fad.fa-car-building:after{content:"\10f859"}.fad.fa-car-bump:after{content:"\10f5e0"}.fad.fa-car-bus:after{content:"\10f85a"}.fad.fa-car-crash:after{content:"\10f5e1"}.fad.fa-car-garage:after{content:"\10f5e2"}.fad.fa-car-mechanic:after{content:"\10f5e3"}.fad.fa-car-side:after{content:"\10f5e4"}.fad.fa-car-tilt:after{content:"\10f5e5"}.fad.fa-car-wash:after{content:"\10f5e6"}.fad.fa-caravan:after{content:"\10f8ff"}.fad.fa-caravan-alt:after{content:"\10f900"}.fad.fa-caret-circle-down:after{content:"\10f32d"}.fad.fa-caret-circle-left:after{content:"\10f32e"}.fad.fa-caret-circle-right:after{content:"\10f330"}.fad.fa-caret-circle-up:after{content:"\10f331"}.fad.fa-caret-down:after{content:"\10f0d7"}.fad.fa-caret-left:after{content:"\10f0d9"}.fad.fa-caret-right:after{content:"\10f0da"}.fad.fa-caret-square-down:after{content:"\10f150"}.fad.fa-caret-square-left:after{content:"\10f191"}.fad.fa-caret-square-right:after{content:"\10f152"}.fad.fa-caret-square-up:after{content:"\10f151"}.fad.fa-caret-up:after{content:"\10f0d8"}.fad.fa-carrot:after{content:"\10f787"}.fad.fa-cars:after{content:"\10f85b"}.fad.fa-cart-arrow-down:after{content:"\10f218"}.fad.fa-cart-plus:after{content:"\10f217"}.fad.fa-cash-register:after{content:"\10f788"}.fad.fa-cassette-tape:after{content:"\10f8ab"}.fad.fa-cat:after{content:"\10f6be"}.fad.fa-cat-space:after{content:"\10f901"}.fad.fa-cauldron:after{content:"\10f6bf"}.fad.fa-cctv:after{content:"\10f8ac"}.fad.fa-certificate:after{content:"\10f0a3"}.fad.fa-chair:after{content:"\10f6c0"}.fad.fa-chair-office:after{content:"\10f6c1"}.fad.fa-chalkboard:after{content:"\10f51b"}.fad.fa-chalkboard-teacher:after{content:"\10f51c"}.fad.fa-charging-station:after{content:"\10f5e7"}.fad.fa-chart-area:after{content:"\10f1fe"}.fad.fa-chart-bar:after{content:"\10f080"}.fad.fa-chart-line:after{content:"\10f201"}.fad.fa-chart-line-down:after{content:"\10f64d"}.fad.fa-chart-network:after{content:"\10f78a"}.fad.fa-chart-pie:after{content:"\10f200"}.fad.fa-chart-pie-alt:after{content:"\10f64e"}.fad.fa-chart-scatter:after{content:"\10f7ee"}.fad.fa-check:after{content:"\10f00c"}.fad.fa-check-circle:after{content:"\10f058"}.fad.fa-check-double:after{content:"\10f560"}.fad.fa-check-square:after{content:"\10f14a"}.fad.fa-cheese:after{content:"\10f7ef"}.fad.fa-cheese-swiss:after{content:"\10f7f0"}.fad.fa-cheeseburger:after{content:"\10f7f1"}.fad.fa-chess:after{content:"\10f439"}.fad.fa-chess-bishop:after{content:"\10f43a"}.fad.fa-chess-bishop-alt:after{content:"\10f43b"}.fad.fa-chess-board:after{content:"\10f43c"}.fad.fa-chess-clock:after{content:"\10f43d"}.fad.fa-chess-clock-alt:after{content:"\10f43e"}.fad.fa-chess-king:after{content:"\10f43f"}.fad.fa-chess-king-alt:after{content:"\10f440"}.fad.fa-chess-knight:after{content:"\10f441"}.fad.fa-chess-knight-alt:after{content:"\10f442"}.fad.fa-chess-pawn:after{content:"\10f443"}.fad.fa-chess-pawn-alt:after{content:"\10f444"}.fad.fa-chess-queen:after{content:"\10f445"}.fad.fa-chess-queen-alt:after{content:"\10f446"}.fad.fa-chess-rook:after{content:"\10f447"}.fad.fa-chess-rook-alt:after{content:"\10f448"}.fad.fa-chevron-circle-down:after{content:"\10f13a"}.fad.fa-chevron-circle-left:after{content:"\10f137"}.fad.fa-chevron-circle-right:after{content:"\10f138"}.fad.fa-chevron-circle-up:after{content:"\10f139"}.fad.fa-chevron-double-down:after{content:"\10f322"}.fad.fa-chevron-double-left:after{content:"\10f323"}.fad.fa-chevron-double-right:after{content:"\10f324"}.fad.fa-chevron-double-up:after{content:"\10f325"}.fad.fa-chevron-down:after{content:"\10f078"}.fad.fa-chevron-left:after{content:"\10f053"}.fad.fa-chevron-right:after{content:"\10f054"}.fad.fa-chevron-square-down:after{content:"\10f329"}.fad.fa-chevron-square-left:after{content:"\10f32a"}.fad.fa-chevron-square-right:after{content:"\10f32b"}.fad.fa-chevron-square-up:after{content:"\10f32c"}.fad.fa-chevron-up:after{content:"\10f077"}.fad.fa-child:after{content:"\10f1ae"}.fad.fa-chimney:after{content:"\10f78b"}.fad.fa-church:after{content:"\10f51d"}.fad.fa-circle:after{content:"\10f111"}.fad.fa-circle-notch:after{content:"\10f1ce"}.fad.fa-city:after{content:"\10f64f"}.fad.fa-clarinet:after{content:"\10f8ad"}.fad.fa-claw-marks:after{content:"\10f6c2"}.fad.fa-clinic-medical:after{content:"\10f7f2"}.fad.fa-clipboard:after{content:"\10f328"}.fad.fa-clipboard-check:after{content:"\10f46c"}.fad.fa-clipboard-list:after{content:"\10f46d"}.fad.fa-clipboard-list-check:after{content:"\10f737"}.fad.fa-clipboard-prescription:after{content:"\10f5e8"}.fad.fa-clipboard-user:after{content:"\10f7f3"}.fad.fa-clock:after{content:"\10f017"}.fad.fa-clone:after{content:"\10f24d"}.fad.fa-closed-captioning:after{content:"\10f20a"}.fad.fa-cloud:after{content:"\10f0c2"}.fad.fa-cloud-download:after{content:"\10f0ed"}.fad.fa-cloud-download-alt:after{content:"\10f381"}.fad.fa-cloud-drizzle:after{content:"\10f738"}.fad.fa-cloud-hail:after{content:"\10f739"}.fad.fa-cloud-hail-mixed:after{content:"\10f73a"}.fad.fa-cloud-meatball:after{content:"\10f73b"}.fad.fa-cloud-moon:after{content:"\10f6c3"}.fad.fa-cloud-moon-rain:after{content:"\10f73c"}.fad.fa-cloud-music:after{content:"\10f8ae"}.fad.fa-cloud-rain:after{content:"\10f73d"}.fad.fa-cloud-rainbow:after{content:"\10f73e"}.fad.fa-cloud-showers:after{content:"\10f73f"}.fad.fa-cloud-showers-heavy:after{content:"\10f740"}.fad.fa-cloud-sleet:after{content:"\10f741"}.fad.fa-cloud-snow:after{content:"\10f742"}.fad.fa-cloud-sun:after{content:"\10f6c4"}.fad.fa-cloud-sun-rain:after{content:"\10f743"}.fad.fa-cloud-upload:after{content:"\10f0ee"}.fad.fa-cloud-upload-alt:after{content:"\10f382"}.fad.fa-clouds:after{content:"\10f744"}.fad.fa-clouds-moon:after{content:"\10f745"}.fad.fa-clouds-sun:after{content:"\10f746"}.fad.fa-club:after{content:"\10f327"}.fad.fa-cocktail:after{content:"\10f561"}.fad.fa-code:after{content:"\10f121"}.fad.fa-code-branch:after{content:"\10f126"}.fad.fa-code-commit:after{content:"\10f386"}.fad.fa-code-merge:after{content:"\10f387"}.fad.fa-coffee:after{content:"\10f0f4"}.fad.fa-coffee-pot:after{content:"\10f902"}.fad.fa-coffee-togo:after{content:"\10f6c5"}.fad.fa-coffin:after{content:"\10f6c6"}.fad.fa-cog:after{content:"\10f013"}.fad.fa-cogs:after{content:"\10f085"}.fad.fa-coin:after{content:"\10f85c"}.fad.fa-coins:after{content:"\10f51e"}.fad.fa-columns:after{content:"\10f0db"}.fad.fa-comet:after{content:"\10f903"}.fad.fa-comment:after{content:"\10f075"}.fad.fa-comment-alt:after{content:"\10f27a"}.fad.fa-comment-alt-check:after{content:"\10f4a2"}.fad.fa-comment-alt-dollar:after{content:"\10f650"}.fad.fa-comment-alt-dots:after{content:"\10f4a3"}.fad.fa-comment-alt-edit:after{content:"\10f4a4"}.fad.fa-comment-alt-exclamation:after{content:"\10f4a5"}.fad.fa-comment-alt-lines:after{content:"\10f4a6"}.fad.fa-comment-alt-medical:after{content:"\10f7f4"}.fad.fa-comment-alt-minus:after{content:"\10f4a7"}.fad.fa-comment-alt-music:after{content:"\10f8af"}.fad.fa-comment-alt-plus:after{content:"\10f4a8"}.fad.fa-comment-alt-slash:after{content:"\10f4a9"}.fad.fa-comment-alt-smile:after{content:"\10f4aa"}.fad.fa-comment-alt-times:after{content:"\10f4ab"}.fad.fa-comment-check:after{content:"\10f4ac"}.fad.fa-comment-dollar:after{content:"\10f651"}.fad.fa-comment-dots:after{content:"\10f4ad"}.fad.fa-comment-edit:after{content:"\10f4ae"}.fad.fa-comment-exclamation:after{content:"\10f4af"}.fad.fa-comment-lines:after{content:"\10f4b0"}.fad.fa-comment-medical:after{content:"\10f7f5"}.fad.fa-comment-minus:after{content:"\10f4b1"}.fad.fa-comment-music:after{content:"\10f8b0"}.fad.fa-comment-plus:after{content:"\10f4b2"}.fad.fa-comment-slash:after{content:"\10f4b3"}.fad.fa-comment-smile:after{content:"\10f4b4"}.fad.fa-comment-times:after{content:"\10f4b5"}.fad.fa-comments:after{content:"\10f086"}.fad.fa-comments-alt:after{content:"\10f4b6"}.fad.fa-comments-alt-dollar:after{content:"\10f652"}.fad.fa-comments-dollar:after{content:"\10f653"}.fad.fa-compact-disc:after{content:"\10f51f"}.fad.fa-compass:after{content:"\10f14e"}.fad.fa-compass-slash:after{content:"\10f5e9"}.fad.fa-compress:after{content:"\10f066"}.fad.fa-compress-alt:after{content:"\10f422"}.fad.fa-compress-arrows-alt:after{content:"\10f78c"}.fad.fa-compress-wide:after{content:"\10f326"}.fad.fa-computer-classic:after{content:"\10f8b1"}.fad.fa-computer-speaker:after{content:"\10f8b2"}.fad.fa-concierge-bell:after{content:"\10f562"}.fad.fa-construction:after{content:"\10f85d"}.fad.fa-container-storage:after{content:"\10f4b7"}.fad.fa-conveyor-belt:after{content:"\10f46e"}.fad.fa-conveyor-belt-alt:after{content:"\10f46f"}.fad.fa-cookie:after{content:"\10f563"}.fad.fa-cookie-bite:after{content:"\10f564"}.fad.fa-copy:after{content:"\10f0c5"}.fad.fa-copyright:after{content:"\10f1f9"}.fad.fa-corn:after{content:"\10f6c7"}.fad.fa-couch:after{content:"\10f4b8"}.fad.fa-cow:after{content:"\10f6c8"}.fad.fa-cowbell:after{content:"\10f8b3"}.fad.fa-cowbell-more:after{content:"\10f8b4"}.fad.fa-credit-card:after{content:"\10f09d"}.fad.fa-credit-card-blank:after{content:"\10f389"}.fad.fa-credit-card-front:after{content:"\10f38a"}.fad.fa-cricket:after{content:"\10f449"}.fad.fa-croissant:after{content:"\10f7f6"}.fad.fa-crop:after{content:"\10f125"}.fad.fa-crop-alt:after{content:"\10f565"}.fad.fa-cross:after{content:"\10f654"}.fad.fa-crosshairs:after{content:"\10f05b"}.fad.fa-crow:after{content:"\10f520"}.fad.fa-crown:after{content:"\10f521"}.fad.fa-crutch:after{content:"\10f7f7"}.fad.fa-crutches:after{content:"\10f7f8"}.fad.fa-cube:after{content:"\10f1b2"}.fad.fa-cubes:after{content:"\10f1b3"}.fad.fa-curling:after{content:"\10f44a"}.fad.fa-cut:after{content:"\10f0c4"}.fad.fa-dagger:after{content:"\10f6cb"}.fad.fa-database:after{content:"\10f1c0"}.fad.fa-deaf:after{content:"\10f2a4"}.fad.fa-debug:after{content:"\10f7f9"}.fad.fa-deer:after{content:"\10f78e"}.fad.fa-deer-rudolph:after{content:"\10f78f"}.fad.fa-democrat:after{content:"\10f747"}.fad.fa-desktop:after{content:"\10f108"}.fad.fa-desktop-alt:after{content:"\10f390"}.fad.fa-dewpoint:after{content:"\10f748"}.fad.fa-dharmachakra:after{content:"\10f655"}.fad.fa-diagnoses:after{content:"\10f470"}.fad.fa-diamond:after{content:"\10f219"}.fad.fa-dice:after{content:"\10f522"}.fad.fa-dice-d10:after{content:"\10f6cd"}.fad.fa-dice-d12:after{content:"\10f6ce"}.fad.fa-dice-d20:after{content:"\10f6cf"}.fad.fa-dice-d4:after{content:"\10f6d0"}.fad.fa-dice-d6:after{content:"\10f6d1"}.fad.fa-dice-d8:after{content:"\10f6d2"}.fad.fa-dice-five:after{content:"\10f523"}.fad.fa-dice-four:after{content:"\10f524"}.fad.fa-dice-one:after{content:"\10f525"}.fad.fa-dice-six:after{content:"\10f526"}.fad.fa-dice-three:after{content:"\10f527"}.fad.fa-dice-two:after{content:"\10f528"}.fad.fa-digging:after{content:"\10f85e"}.fad.fa-digital-tachograph:after{content:"\10f566"}.fad.fa-diploma:after{content:"\10f5ea"}.fad.fa-directions:after{content:"\10f5eb"}.fad.fa-disc-drive:after{content:"\10f8b5"}.fad.fa-disease:after{content:"\10f7fa"}.fad.fa-divide:after{content:"\10f529"}.fad.fa-dizzy:after{content:"\10f567"}.fad.fa-dna:after{content:"\10f471"}.fad.fa-do-not-enter:after{content:"\10f5ec"}.fad.fa-dog:after{content:"\10f6d3"}.fad.fa-dog-leashed:after{content:"\10f6d4"}.fad.fa-dollar-sign:after{content:"\10f155"}.fad.fa-dolly:after{content:"\10f472"}.fad.fa-dolly-empty:after{content:"\10f473"}.fad.fa-dolly-flatbed:after{content:"\10f474"}.fad.fa-dolly-flatbed-alt:after{content:"\10f475"}.fad.fa-dolly-flatbed-empty:after{content:"\10f476"}.fad.fa-donate:after{content:"\10f4b9"}.fad.fa-door-closed:after{content:"\10f52a"}.fad.fa-door-open:after{content:"\10f52b"}.fad.fa-dot-circle:after{content:"\10f192"}.fad.fa-dove:after{content:"\10f4ba"}.fad.fa-download:after{content:"\10f019"}.fad.fa-drafting-compass:after{content:"\10f568"}.fad.fa-dragon:after{content:"\10f6d5"}.fad.fa-draw-circle:after{content:"\10f5ed"}.fad.fa-draw-polygon:after{content:"\10f5ee"}.fad.fa-draw-square:after{content:"\10f5ef"}.fad.fa-dreidel:after{content:"\10f792"}.fad.fa-drone:after{content:"\10f85f"}.fad.fa-drone-alt:after{content:"\10f860"}.fad.fa-drum:after{content:"\10f569"}.fad.fa-drum-steelpan:after{content:"\10f56a"}.fad.fa-drumstick:after{content:"\10f6d6"}.fad.fa-drumstick-bite:after{content:"\10f6d7"}.fad.fa-dryer:after{content:"\10f861"}.fad.fa-dryer-alt:after{content:"\10f862"}.fad.fa-duck:after{content:"\10f6d8"}.fad.fa-dumbbell:after{content:"\10f44b"}.fad.fa-dumpster:after{content:"\10f793"}.fad.fa-dumpster-fire:after{content:"\10f794"}.fad.fa-dungeon:after{content:"\10f6d9"}.fad.fa-ear:after{content:"\10f5f0"}.fad.fa-ear-muffs:after{content:"\10f795"}.fad.fa-eclipse:after{content:"\10f749"}.fad.fa-eclipse-alt:after{content:"\10f74a"}.fad.fa-edit:after{content:"\10f044"}.fad.fa-egg:after{content:"\10f7fb"}.fad.fa-egg-fried:after{content:"\10f7fc"}.fad.fa-eject:after{content:"\10f052"}.fad.fa-elephant:after{content:"\10f6da"}.fad.fa-ellipsis-h:after{content:"\10f141"}.fad.fa-ellipsis-h-alt:after{content:"\10f39b"}.fad.fa-ellipsis-v:after{content:"\10f142"}.fad.fa-ellipsis-v-alt:after{content:"\10f39c"}.fad.fa-empty-set:after{content:"\10f656"}.fad.fa-engine-warning:after{content:"\10f5f2"}.fad.fa-envelope:after{content:"\10f0e0"}.fad.fa-envelope-open:after{content:"\10f2b6"}.fad.fa-envelope-open-dollar:after{content:"\10f657"}.fad.fa-envelope-open-text:after{content:"\10f658"}.fad.fa-envelope-square:after{content:"\10f199"}.fad.fa-equals:after{content:"\10f52c"}.fad.fa-eraser:after{content:"\10f12d"}.fad.fa-ethernet:after{content:"\10f796"}.fad.fa-euro-sign:after{content:"\10f153"}.fad.fa-exchange:after{content:"\10f0ec"}.fad.fa-exchange-alt:after{content:"\10f362"}.fad.fa-exclamation:after{content:"\10f12a"}.fad.fa-exclamation-circle:after{content:"\10f06a"}.fad.fa-exclamation-square:after{content:"\10f321"}.fad.fa-exclamation-triangle:after{content:"\10f071"}.fad.fa-expand:after{content:"\10f065"}.fad.fa-expand-alt:after{content:"\10f424"}.fad.fa-expand-arrows:after{content:"\10f31d"}.fad.fa-expand-arrows-alt:after{content:"\10f31e"}.fad.fa-expand-wide:after{content:"\10f320"}.fad.fa-external-link:after{content:"\10f08e"}.fad.fa-external-link-alt:after{content:"\10f35d"}.fad.fa-external-link-square:after{content:"\10f14c"}.fad.fa-external-link-square-alt:after{content:"\10f360"}.fad.fa-eye:after{content:"\10f06e"}.fad.fa-eye-dropper:after{content:"\10f1fb"}.fad.fa-eye-evil:after{content:"\10f6db"}.fad.fa-eye-slash:after{content:"\10f070"}.fad.fa-fan:after{content:"\10f863"}.fad.fa-fan-table:after{content:"\10f904"}.fad.fa-farm:after{content:"\10f864"}.fad.fa-fast-backward:after{content:"\10f049"}.fad.fa-fast-forward:after{content:"\10f050"}.fad.fa-faucet:after{content:"\10f905"}.fad.fa-faucet-drip:after{content:"\10f906"}.fad.fa-fax:after{content:"\10f1ac"}.fad.fa-feather:after{content:"\10f52d"}.fad.fa-feather-alt:after{content:"\10f56b"}.fad.fa-female:after{content:"\10f182"}.fad.fa-field-hockey:after{content:"\10f44c"}.fad.fa-fighter-jet:after{content:"\10f0fb"}.fad.fa-file:after{content:"\10f15b"}.fad.fa-file-alt:after{content:"\10f15c"}.fad.fa-file-archive:after{content:"\10f1c6"}.fad.fa-file-audio:after{content:"\10f1c7"}.fad.fa-file-certificate:after{content:"\10f5f3"}.fad.fa-file-chart-line:after{content:"\10f659"}.fad.fa-file-chart-pie:after{content:"\10f65a"}.fad.fa-file-check:after{content:"\10f316"}.fad.fa-file-code:after{content:"\10f1c9"}.fad.fa-file-contract:after{content:"\10f56c"}.fad.fa-file-csv:after{content:"\10f6dd"}.fad.fa-file-download:after{content:"\10f56d"}.fad.fa-file-edit:after{content:"\10f31c"}.fad.fa-file-excel:after{content:"\10f1c3"}.fad.fa-file-exclamation:after{content:"\10f31a"}.fad.fa-file-export:after{content:"\10f56e"}.fad.fa-file-image:after{content:"\10f1c5"}.fad.fa-file-import:after{content:"\10f56f"}.fad.fa-file-invoice:after{content:"\10f570"}.fad.fa-file-invoice-dollar:after{content:"\10f571"}.fad.fa-file-medical:after{content:"\10f477"}.fad.fa-file-medical-alt:after{content:"\10f478"}.fad.fa-file-minus:after{content:"\10f318"}.fad.fa-file-music:after{content:"\10f8b6"}.fad.fa-file-pdf:after{content:"\10f1c1"}.fad.fa-file-plus:after{content:"\10f319"}.fad.fa-file-powerpoint:after{content:"\10f1c4"}.fad.fa-file-prescription:after{content:"\10f572"}.fad.fa-file-search:after{content:"\10f865"}.fad.fa-file-signature:after{content:"\10f573"}.fad.fa-file-spreadsheet:after{content:"\10f65b"}.fad.fa-file-times:after{content:"\10f317"}.fad.fa-file-upload:after{content:"\10f574"}.fad.fa-file-user:after{content:"\10f65c"}.fad.fa-file-video:after{content:"\10f1c8"}.fad.fa-file-word:after{content:"\10f1c2"}.fad.fa-files-medical:after{content:"\10f7fd"}.fad.fa-fill:after{content:"\10f575"}.fad.fa-fill-drip:after{content:"\10f576"}.fad.fa-film:after{content:"\10f008"}.fad.fa-film-alt:after{content:"\10f3a0"}.fad.fa-film-canister:after{content:"\10f8b7"}.fad.fa-filter:after{content:"\10f0b0"}.fad.fa-fingerprint:after{content:"\10f577"}.fad.fa-fire:after{content:"\10f06d"}.fad.fa-fire-alt:after{content:"\10f7e4"}.fad.fa-fire-extinguisher:after{content:"\10f134"}.fad.fa-fire-smoke:after{content:"\10f74b"}.fad.fa-fireplace:after{content:"\10f79a"}.fad.fa-first-aid:after{content:"\10f479"}.fad.fa-fish:after{content:"\10f578"}.fad.fa-fish-cooked:after{content:"\10f7fe"}.fad.fa-fist-raised:after{content:"\10f6de"}.fad.fa-flag:after{content:"\10f024"}.fad.fa-flag-alt:after{content:"\10f74c"}.fad.fa-flag-checkered:after{content:"\10f11e"}.fad.fa-flag-usa:after{content:"\10f74d"}.fad.fa-flame:after{content:"\10f6df"}.fad.fa-flashlight:after{content:"\10f8b8"}.fad.fa-flask:after{content:"\10f0c3"}.fad.fa-flask-poison:after{content:"\10f6e0"}.fad.fa-flask-potion:after{content:"\10f6e1"}.fad.fa-flower:after{content:"\10f7ff"}.fad.fa-flower-daffodil:after{content:"\10f800"}.fad.fa-flower-tulip:after{content:"\10f801"}.fad.fa-flushed:after{content:"\10f579"}.fad.fa-flute:after{content:"\10f8b9"}.fad.fa-flux-capacitor:after{content:"\10f8ba"}.fad.fa-fog:after{content:"\10f74e"}.fad.fa-folder:after{content:"\10f07b"}.fad.fa-folder-minus:after{content:"\10f65d"}.fad.fa-folder-open:after{content:"\10f07c"}.fad.fa-folder-plus:after{content:"\10f65e"}.fad.fa-folder-times:after{content:"\10f65f"}.fad.fa-folder-tree:after{content:"\10f802"}.fad.fa-folders:after{content:"\10f660"}.fad.fa-font:after{content:"\10f031"}.fad.fa-font-awesome-logo-full:after{content:"\10f4e6"}.fad.fa-font-case:after{content:"\10f866"}.fad.fa-football-ball:after{content:"\10f44e"}.fad.fa-football-helmet:after{content:"\10f44f"}.fad.fa-forklift:after{content:"\10f47a"}.fad.fa-forward:after{content:"\10f04e"}.fad.fa-fragile:after{content:"\10f4bb"}.fad.fa-french-fries:after{content:"\10f803"}.fad.fa-frog:after{content:"\10f52e"}.fad.fa-frosty-head:after{content:"\10f79b"}.fad.fa-frown:after{content:"\10f119"}.fad.fa-frown-open:after{content:"\10f57a"}.fad.fa-function:after{content:"\10f661"}.fad.fa-funnel-dollar:after{content:"\10f662"}.fad.fa-futbol:after{content:"\10f1e3"}.fad.fa-galaxy:after{content:"\10f908"}.fad.fa-game-board:after{content:"\10f867"}.fad.fa-game-board-alt:after{content:"\10f868"}.fad.fa-game-console-handheld:after{content:"\10f8bb"}.fad.fa-gamepad:after{content:"\10f11b"}.fad.fa-gamepad-alt:after{content:"\10f8bc"}.fad.fa-garage:after{content:"\10f909"}.fad.fa-garage-car:after{content:"\10f90a"}.fad.fa-garage-open:after{content:"\10f90b"}.fad.fa-gas-pump:after{content:"\10f52f"}.fad.fa-gas-pump-slash:after{content:"\10f5f4"}.fad.fa-gavel:after{content:"\10f0e3"}.fad.fa-gem:after{content:"\10f3a5"}.fad.fa-genderless:after{content:"\10f22d"}.fad.fa-ghost:after{content:"\10f6e2"}.fad.fa-gift:after{content:"\10f06b"}.fad.fa-gift-card:after{content:"\10f663"}.fad.fa-gifts:after{content:"\10f79c"}.fad.fa-gingerbread-man:after{content:"\10f79d"}.fad.fa-glass:after{content:"\10f804"}.fad.fa-glass-champagne:after{content:"\10f79e"}.fad.fa-glass-cheers:after{content:"\10f79f"}.fad.fa-glass-citrus:after{content:"\10f869"}.fad.fa-glass-martini:after{content:"\10f000"}.fad.fa-glass-martini-alt:after{content:"\10f57b"}.fad.fa-glass-whiskey:after{content:"\10f7a0"}.fad.fa-glass-whiskey-rocks:after{content:"\10f7a1"}.fad.fa-glasses:after{content:"\10f530"}.fad.fa-glasses-alt:after{content:"\10f5f5"}.fad.fa-globe:after{content:"\10f0ac"}.fad.fa-globe-africa:after{content:"\10f57c"}.fad.fa-globe-americas:after{content:"\10f57d"}.fad.fa-globe-asia:after{content:"\10f57e"}.fad.fa-globe-europe:after{content:"\10f7a2"}.fad.fa-globe-snow:after{content:"\10f7a3"}.fad.fa-globe-stand:after{content:"\10f5f6"}.fad.fa-golf-ball:after{content:"\10f450"}.fad.fa-golf-club:after{content:"\10f451"}.fad.fa-gopuram:after{content:"\10f664"}.fad.fa-graduation-cap:after{content:"\10f19d"}.fad.fa-gramophone:after{content:"\10f8bd"}.fad.fa-greater-than:after{content:"\10f531"}.fad.fa-greater-than-equal:after{content:"\10f532"}.fad.fa-grimace:after{content:"\10f57f"}.fad.fa-grin:after{content:"\10f580"}.fad.fa-grin-alt:after{content:"\10f581"}.fad.fa-grin-beam:after{content:"\10f582"}.fad.fa-grin-beam-sweat:after{content:"\10f583"}.fad.fa-grin-hearts:after{content:"\10f584"}.fad.fa-grin-squint:after{content:"\10f585"}.fad.fa-grin-squint-tears:after{content:"\10f586"}.fad.fa-grin-stars:after{content:"\10f587"}.fad.fa-grin-tears:after{content:"\10f588"}.fad.fa-grin-tongue:after{content:"\10f589"}.fad.fa-grin-tongue-squint:after{content:"\10f58a"}.fad.fa-grin-tongue-wink:after{content:"\10f58b"}.fad.fa-grin-wink:after{content:"\10f58c"}.fad.fa-grip-horizontal:after{content:"\10f58d"}.fad.fa-grip-lines:after{content:"\10f7a4"}.fad.fa-grip-lines-vertical:after{content:"\10f7a5"}.fad.fa-grip-vertical:after{content:"\10f58e"}.fad.fa-guitar:after{content:"\10f7a6"}.fad.fa-guitar-electric:after{content:"\10f8be"}.fad.fa-guitars:after{content:"\10f8bf"}.fad.fa-h-square:after{content:"\10f0fd"}.fad.fa-h1:after{content:"\10f313"}.fad.fa-h2:after{content:"\10f314"}.fad.fa-h3:after{content:"\10f315"}.fad.fa-h4:after{content:"\10f86a"}.fad.fa-hamburger:after{content:"\10f805"}.fad.fa-hammer:after{content:"\10f6e3"}.fad.fa-hammer-war:after{content:"\10f6e4"}.fad.fa-hamsa:after{content:"\10f665"}.fad.fa-hand-heart:after{content:"\10f4bc"}.fad.fa-hand-holding:after{content:"\10f4bd"}.fad.fa-hand-holding-box:after{content:"\10f47b"}.fad.fa-hand-holding-heart:after{content:"\10f4be"}.fad.fa-hand-holding-magic:after{content:"\10f6e5"}.fad.fa-hand-holding-seedling:after{content:"\10f4bf"}.fad.fa-hand-holding-usd:after{content:"\10f4c0"}.fad.fa-hand-holding-water:after{content:"\10f4c1"}.fad.fa-hand-lizard:after{content:"\10f258"}.fad.fa-hand-middle-finger:after{content:"\10f806"}.fad.fa-hand-paper:after{content:"\10f256"}.fad.fa-hand-peace:after{content:"\10f25b"}.fad.fa-hand-point-down:after{content:"\10f0a7"}.fad.fa-hand-point-left:after{content:"\10f0a5"}.fad.fa-hand-point-right:after{content:"\10f0a4"}.fad.fa-hand-point-up:after{content:"\10f0a6"}.fad.fa-hand-pointer:after{content:"\10f25a"}.fad.fa-hand-receiving:after{content:"\10f47c"}.fad.fa-hand-rock:after{content:"\10f255"}.fad.fa-hand-scissors:after{content:"\10f257"}.fad.fa-hand-spock:after{content:"\10f259"}.fad.fa-hands:after{content:"\10f4c2"}.fad.fa-hands-heart:after{content:"\10f4c3"}.fad.fa-hands-helping:after{content:"\10f4c4"}.fad.fa-hands-usd:after{content:"\10f4c5"}.fad.fa-handshake:after{content:"\10f2b5"}.fad.fa-handshake-alt:after{content:"\10f4c6"}.fad.fa-hanukiah:after{content:"\10f6e6"}.fad.fa-hard-hat:after{content:"\10f807"}.fad.fa-hashtag:after{content:"\10f292"}.fad.fa-hat-chef:after{content:"\10f86b"}.fad.fa-hat-cowboy:after{content:"\10f8c0"}.fad.fa-hat-cowboy-side:after{content:"\10f8c1"}.fad.fa-hat-santa:after{content:"\10f7a7"}.fad.fa-hat-winter:after{content:"\10f7a8"}.fad.fa-hat-witch:after{content:"\10f6e7"}.fad.fa-hat-wizard:after{content:"\10f6e8"}.fad.fa-hdd:after{content:"\10f0a0"}.fad.fa-head-side:after{content:"\10f6e9"}.fad.fa-head-side-brain:after{content:"\10f808"}.fad.fa-head-side-headphones:after{content:"\10f8c2"}.fad.fa-head-side-medical:after{content:"\10f809"}.fad.fa-head-vr:after{content:"\10f6ea"}.fad.fa-heading:after{content:"\10f1dc"}.fad.fa-headphones:after{content:"\10f025"}.fad.fa-headphones-alt:after{content:"\10f58f"}.fad.fa-headset:after{content:"\10f590"}.fad.fa-heart:after{content:"\10f004"}.fad.fa-heart-broken:after{content:"\10f7a9"}.fad.fa-heart-circle:after{content:"\10f4c7"}.fad.fa-heart-rate:after{content:"\10f5f8"}.fad.fa-heart-square:after{content:"\10f4c8"}.fad.fa-heartbeat:after{content:"\10f21e"}.fad.fa-heat:after{content:"\10f90c"}.fad.fa-helicopter:after{content:"\10f533"}.fad.fa-helmet-battle:after{content:"\10f6eb"}.fad.fa-hexagon:after{content:"\10f312"}.fad.fa-highlighter:after{content:"\10f591"}.fad.fa-hiking:after{content:"\10f6ec"}.fad.fa-hippo:after{content:"\10f6ed"}.fad.fa-history:after{content:"\10f1da"}.fad.fa-hockey-mask:after{content:"\10f6ee"}.fad.fa-hockey-puck:after{content:"\10f453"}.fad.fa-hockey-sticks:after{content:"\10f454"}.fad.fa-holly-berry:after{content:"\10f7aa"}.fad.fa-home:after{content:"\10f015"}.fad.fa-home-alt:after{content:"\10f80a"}.fad.fa-home-heart:after{content:"\10f4c9"}.fad.fa-home-lg:after{content:"\10f80b"}.fad.fa-home-lg-alt:after{content:"\10f80c"}.fad.fa-hood-cloak:after{content:"\10f6ef"}.fad.fa-horizontal-rule:after{content:"\10f86c"}.fad.fa-horse:after{content:"\10f6f0"}.fad.fa-horse-head:after{content:"\10f7ab"}.fad.fa-horse-saddle:after{content:"\10f8c3"}.fad.fa-hospital:after{content:"\10f0f8"}.fad.fa-hospital-alt:after{content:"\10f47d"}.fad.fa-hospital-symbol:after{content:"\10f47e"}.fad.fa-hospital-user:after{content:"\10f80d"}.fad.fa-hospitals:after{content:"\10f80e"}.fad.fa-hot-tub:after{content:"\10f593"}.fad.fa-hotdog:after{content:"\10f80f"}.fad.fa-hotel:after{content:"\10f594"}.fad.fa-hourglass:after{content:"\10f254"}.fad.fa-hourglass-end:after{content:"\10f253"}.fad.fa-hourglass-half:after{content:"\10f252"}.fad.fa-hourglass-start:after{content:"\10f251"}.fad.fa-house:after{content:"\10f90d"}.fad.fa-house-damage:after{content:"\10f6f1"}.fad.fa-house-day:after{content:"\10f90e"}.fad.fa-house-flood:after{content:"\10f74f"}.fad.fa-house-leave:after{content:"\10f90f"}.fad.fa-house-night:after{content:"\10f910"}.fad.fa-house-return:after{content:"\10f911"}.fad.fa-house-signal:after{content:"\10f912"}.fad.fa-hryvnia:after{content:"\10f6f2"}.fad.fa-humidity:after{content:"\10f750"}.fad.fa-hurricane:after{content:"\10f751"}.fad.fa-i-cursor:after{content:"\10f246"}.fad.fa-ice-cream:after{content:"\10f810"}.fad.fa-ice-skate:after{content:"\10f7ac"}.fad.fa-icicles:after{content:"\10f7ad"}.fad.fa-icons:after{content:"\10f86d"}.fad.fa-icons-alt:after{content:"\10f86e"}.fad.fa-id-badge:after{content:"\10f2c1"}.fad.fa-id-card:after{content:"\10f2c2"}.fad.fa-id-card-alt:after{content:"\10f47f"}.fad.fa-igloo:after{content:"\10f7ae"}.fad.fa-image:after{content:"\10f03e"}.fad.fa-image-polaroid:after{content:"\10f8c4"}.fad.fa-images:after{content:"\10f302"}.fad.fa-inbox:after{content:"\10f01c"}.fad.fa-inbox-in:after{content:"\10f310"}.fad.fa-inbox-out:after{content:"\10f311"}.fad.fa-indent:after{content:"\10f03c"}.fad.fa-industry:after{content:"\10f275"}.fad.fa-industry-alt:after{content:"\10f3b3"}.fad.fa-infinity:after{content:"\10f534"}.fad.fa-info:after{content:"\10f129"}.fad.fa-info-circle:after{content:"\10f05a"}.fad.fa-info-square:after{content:"\10f30f"}.fad.fa-inhaler:after{content:"\10f5f9"}.fad.fa-integral:after{content:"\10f667"}.fad.fa-intersection:after{content:"\10f668"}.fad.fa-inventory:after{content:"\10f480"}.fad.fa-island-tropical:after{content:"\10f811"}.fad.fa-italic:after{content:"\10f033"}.fad.fa-jack-o-lantern:after{content:"\10f30e"}.fad.fa-jedi:after{content:"\10f669"}.fad.fa-joint:after{content:"\10f595"}.fad.fa-journal-whills:after{content:"\10f66a"}.fad.fa-joystick:after{content:"\10f8c5"}.fad.fa-jug:after{content:"\10f8c6"}.fad.fa-kaaba:after{content:"\10f66b"}.fad.fa-kazoo:after{content:"\10f8c7"}.fad.fa-kerning:after{content:"\10f86f"}.fad.fa-key:after{content:"\10f084"}.fad.fa-key-skeleton:after{content:"\10f6f3"}.fad.fa-keyboard:after{content:"\10f11c"}.fad.fa-keynote:after{content:"\10f66c"}.fad.fa-khanda:after{content:"\10f66d"}.fad.fa-kidneys:after{content:"\10f5fb"}.fad.fa-kiss:after{content:"\10f596"}.fad.fa-kiss-beam:after{content:"\10f597"}.fad.fa-kiss-wink-heart:after{content:"\10f598"}.fad.fa-kite:after{content:"\10f6f4"}.fad.fa-kiwi-bird:after{content:"\10f535"}.fad.fa-knife-kitchen:after{content:"\10f6f5"}.fad.fa-lambda:after{content:"\10f66e"}.fad.fa-lamp:after{content:"\10f4ca"}.fad.fa-lamp-desk:after{content:"\10f914"}.fad.fa-lamp-floor:after{content:"\10f915"}.fad.fa-landmark:after{content:"\10f66f"}.fad.fa-landmark-alt:after{content:"\10f752"}.fad.fa-language:after{content:"\10f1ab"}.fad.fa-laptop:after{content:"\10f109"}.fad.fa-laptop-code:after{content:"\10f5fc"}.fad.fa-laptop-medical:after{content:"\10f812"}.fad.fa-lasso:after{content:"\10f8c8"}.fad.fa-laugh:after{content:"\10f599"}.fad.fa-laugh-beam:after{content:"\10f59a"}.fad.fa-laugh-squint:after{content:"\10f59b"}.fad.fa-laugh-wink:after{content:"\10f59c"}.fad.fa-layer-group:after{content:"\10f5fd"}.fad.fa-layer-minus:after{content:"\10f5fe"}.fad.fa-layer-plus:after{content:"\10f5ff"}.fad.fa-leaf:after{content:"\10f06c"}.fad.fa-leaf-heart:after{content:"\10f4cb"}.fad.fa-leaf-maple:after{content:"\10f6f6"}.fad.fa-leaf-oak:after{content:"\10f6f7"}.fad.fa-lemon:after{content:"\10f094"}.fad.fa-less-than:after{content:"\10f536"}.fad.fa-less-than-equal:after{content:"\10f537"}.fad.fa-level-down:after{content:"\10f149"}.fad.fa-level-down-alt:after{content:"\10f3be"}.fad.fa-level-up:after{content:"\10f148"}.fad.fa-level-up-alt:after{content:"\10f3bf"}.fad.fa-life-ring:after{content:"\10f1cd"}.fad.fa-light-ceiling:after{content:"\10f916"}.fad.fa-light-switch:after{content:"\10f917"}.fad.fa-light-switch-off:after{content:"\10f918"}.fad.fa-light-switch-on:after{content:"\10f919"}.fad.fa-lightbulb:after{content:"\10f0eb"}.fad.fa-lightbulb-dollar:after{content:"\10f670"}.fad.fa-lightbulb-exclamation:after{content:"\10f671"}.fad.fa-lightbulb-on:after{content:"\10f672"}.fad.fa-lightbulb-slash:after{content:"\10f673"}.fad.fa-lights-holiday:after{content:"\10f7b2"}.fad.fa-line-columns:after{content:"\10f870"}.fad.fa-line-height:after{content:"\10f871"}.fad.fa-link:after{content:"\10f0c1"}.fad.fa-lips:after{content:"\10f600"}.fad.fa-lira-sign:after{content:"\10f195"}.fad.fa-list:after{content:"\10f03a"}.fad.fa-list-alt:after{content:"\10f022"}.fad.fa-list-music:after{content:"\10f8c9"}.fad.fa-list-ol:after{content:"\10f0cb"}.fad.fa-list-ul:after{content:"\10f0ca"}.fad.fa-location:after{content:"\10f601"}.fad.fa-location-arrow:after{content:"\10f124"}.fad.fa-location-circle:after{content:"\10f602"}.fad.fa-location-slash:after{content:"\10f603"}.fad.fa-lock:after{content:"\10f023"}.fad.fa-lock-alt:after{content:"\10f30d"}.fad.fa-lock-open:after{content:"\10f3c1"}.fad.fa-lock-open-alt:after{content:"\10f3c2"}.fad.fa-long-arrow-alt-down:after{content:"\10f309"}.fad.fa-long-arrow-alt-left:after{content:"\10f30a"}.fad.fa-long-arrow-alt-right:after{content:"\10f30b"}.fad.fa-long-arrow-alt-up:after{content:"\10f30c"}.fad.fa-long-arrow-down:after{content:"\10f175"}.fad.fa-long-arrow-left:after{content:"\10f177"}.fad.fa-long-arrow-right:after{content:"\10f178"}.fad.fa-long-arrow-up:after{content:"\10f176"}.fad.fa-loveseat:after{content:"\10f4cc"}.fad.fa-low-vision:after{content:"\10f2a8"}.fad.fa-luchador:after{content:"\10f455"}.fad.fa-luggage-cart:after{content:"\10f59d"}.fad.fa-lungs:after{content:"\10f604"}.fad.fa-mace:after{content:"\10f6f8"}.fad.fa-magic:after{content:"\10f0d0"}.fad.fa-magnet:after{content:"\10f076"}.fad.fa-mail-bulk:after{content:"\10f674"}.fad.fa-mailbox:after{content:"\10f813"}.fad.fa-male:after{content:"\10f183"}.fad.fa-mandolin:after{content:"\10f6f9"}.fad.fa-map:after{content:"\10f279"}.fad.fa-map-marked:after{content:"\10f59f"}.fad.fa-map-marked-alt:after{content:"\10f5a0"}.fad.fa-map-marker:after{content:"\10f041"}.fad.fa-map-marker-alt:after{content:"\10f3c5"}.fad.fa-map-marker-alt-slash:after{content:"\10f605"}.fad.fa-map-marker-check:after{content:"\10f606"}.fad.fa-map-marker-edit:after{content:"\10f607"}.fad.fa-map-marker-exclamation:after{content:"\10f608"}.fad.fa-map-marker-minus:after{content:"\10f609"}.fad.fa-map-marker-plus:after{content:"\10f60a"}.fad.fa-map-marker-question:after{content:"\10f60b"}.fad.fa-map-marker-slash:after{content:"\10f60c"}.fad.fa-map-marker-smile:after{content:"\10f60d"}.fad.fa-map-marker-times:after{content:"\10f60e"}.fad.fa-map-pin:after{content:"\10f276"}.fad.fa-map-signs:after{content:"\10f277"}.fad.fa-marker:after{content:"\10f5a1"}.fad.fa-mars:after{content:"\10f222"}.fad.fa-mars-double:after{content:"\10f227"}.fad.fa-mars-stroke:after{content:"\10f229"}.fad.fa-mars-stroke-h:after{content:"\10f22b"}.fad.fa-mars-stroke-v:after{content:"\10f22a"}.fad.fa-mask:after{content:"\10f6fa"}.fad.fa-meat:after{content:"\10f814"}.fad.fa-medal:after{content:"\10f5a2"}.fad.fa-medkit:after{content:"\10f0fa"}.fad.fa-megaphone:after{content:"\10f675"}.fad.fa-meh:after{content:"\10f11a"}.fad.fa-meh-blank:after{content:"\10f5a4"}.fad.fa-meh-rolling-eyes:after{content:"\10f5a5"}.fad.fa-memory:after{content:"\10f538"}.fad.fa-menorah:after{content:"\10f676"}.fad.fa-mercury:after{content:"\10f223"}.fad.fa-meteor:after{content:"\10f753"}.fad.fa-microchip:after{content:"\10f2db"}.fad.fa-microphone:after{content:"\10f130"}.fad.fa-microphone-alt:after{content:"\10f3c9"}.fad.fa-microphone-alt-slash:after{content:"\10f539"}.fad.fa-microphone-slash:after{content:"\10f131"}.fad.fa-microphone-stand:after{content:"\10f8cb"}.fad.fa-microscope:after{content:"\10f610"}.fad.fa-microwave:after{content:"\10f91b"}.fad.fa-mind-share:after{content:"\10f677"}.fad.fa-minus:after{content:"\10f068"}.fad.fa-minus-circle:after{content:"\10f056"}.fad.fa-minus-hexagon:after{content:"\10f307"}.fad.fa-minus-octagon:after{content:"\10f308"}.fad.fa-minus-square:after{content:"\10f146"}.fad.fa-mistletoe:after{content:"\10f7b4"}.fad.fa-mitten:after{content:"\10f7b5"}.fad.fa-mobile:after{content:"\10f10b"}.fad.fa-mobile-alt:after{content:"\10f3cd"}.fad.fa-mobile-android:after{content:"\10f3ce"}.fad.fa-mobile-android-alt:after{content:"\10f3cf"}.fad.fa-money-bill:after{content:"\10f0d6"}.fad.fa-money-bill-alt:after{content:"\10f3d1"}.fad.fa-money-bill-wave:after{content:"\10f53a"}.fad.fa-money-bill-wave-alt:after{content:"\10f53b"}.fad.fa-money-check:after{content:"\10f53c"}.fad.fa-money-check-alt:after{content:"\10f53d"}.fad.fa-money-check-edit:after{content:"\10f872"}.fad.fa-money-check-edit-alt:after{content:"\10f873"}.fad.fa-monitor-heart-rate:after{content:"\10f611"}.fad.fa-monkey:after{content:"\10f6fb"}.fad.fa-monument:after{content:"\10f5a6"}.fad.fa-moon:after{content:"\10f186"}.fad.fa-moon-cloud:after{content:"\10f754"}.fad.fa-moon-stars:after{content:"\10f755"}.fad.fa-mortar-pestle:after{content:"\10f5a7"}.fad.fa-mosque:after{content:"\10f678"}.fad.fa-motorcycle:after{content:"\10f21c"}.fad.fa-mountain:after{content:"\10f6fc"}.fad.fa-mountains:after{content:"\10f6fd"}.fad.fa-mouse:after{content:"\10f8cc"}.fad.fa-mouse-alt:after{content:"\10f8cd"}.fad.fa-mouse-pointer:after{content:"\10f245"}.fad.fa-mp3-player:after{content:"\10f8ce"}.fad.fa-mug:after{content:"\10f874"}.fad.fa-mug-hot:after{content:"\10f7b6"}.fad.fa-mug-marshmallows:after{content:"\10f7b7"}.fad.fa-mug-tea:after{content:"\10f875"}.fad.fa-music:after{content:"\10f001"}.fad.fa-music-alt:after{content:"\10f8cf"}.fad.fa-music-alt-slash:after{content:"\10f8d0"}.fad.fa-music-slash:after{content:"\10f8d1"}.fad.fa-narwhal:after{content:"\10f6fe"}.fad.fa-network-wired:after{content:"\10f6ff"}.fad.fa-neuter:after{content:"\10f22c"}.fad.fa-newspaper:after{content:"\10f1ea"}.fad.fa-not-equal:after{content:"\10f53e"}.fad.fa-notes-medical:after{content:"\10f481"}.fad.fa-object-group:after{content:"\10f247"}.fad.fa-object-ungroup:after{content:"\10f248"}.fad.fa-octagon:after{content:"\10f306"}.fad.fa-oil-can:after{content:"\10f613"}.fad.fa-oil-temp:after{content:"\10f614"}.fad.fa-om:after{content:"\10f679"}.fad.fa-omega:after{content:"\10f67a"}.fad.fa-ornament:after{content:"\10f7b8"}.fad.fa-otter:after{content:"\10f700"}.fad.fa-outdent:after{content:"\10f03b"}.fad.fa-outlet:after{content:"\10f91c"}.fad.fa-oven:after{content:"\10f91d"}.fad.fa-overline:after{content:"\10f876"}.fad.fa-page-break:after{content:"\10f877"}.fad.fa-pager:after{content:"\10f815"}.fad.fa-paint-brush:after{content:"\10f1fc"}.fad.fa-paint-brush-alt:after{content:"\10f5a9"}.fad.fa-paint-roller:after{content:"\10f5aa"}.fad.fa-palette:after{content:"\10f53f"}.fad.fa-pallet:after{content:"\10f482"}.fad.fa-pallet-alt:after{content:"\10f483"}.fad.fa-paper-plane:after{content:"\10f1d8"}.fad.fa-paperclip:after{content:"\10f0c6"}.fad.fa-parachute-box:after{content:"\10f4cd"}.fad.fa-paragraph:after{content:"\10f1dd"}.fad.fa-paragraph-rtl:after{content:"\10f878"}.fad.fa-parking:after{content:"\10f540"}.fad.fa-parking-circle:after{content:"\10f615"}.fad.fa-parking-circle-slash:after{content:"\10f616"}.fad.fa-parking-slash:after{content:"\10f617"}.fad.fa-passport:after{content:"\10f5ab"}.fad.fa-pastafarianism:after{content:"\10f67b"}.fad.fa-paste:after{content:"\10f0ea"}.fad.fa-pause:after{content:"\10f04c"}.fad.fa-pause-circle:after{content:"\10f28b"}.fad.fa-paw:after{content:"\10f1b0"}.fad.fa-paw-alt:after{content:"\10f701"}.fad.fa-paw-claws:after{content:"\10f702"}.fad.fa-peace:after{content:"\10f67c"}.fad.fa-pegasus:after{content:"\10f703"}.fad.fa-pen:after{content:"\10f304"}.fad.fa-pen-alt:after{content:"\10f305"}.fad.fa-pen-fancy:after{content:"\10f5ac"}.fad.fa-pen-nib:after{content:"\10f5ad"}.fad.fa-pen-square:after{content:"\10f14b"}.fad.fa-pencil:after{content:"\10f040"}.fad.fa-pencil-alt:after{content:"\10f303"}.fad.fa-pencil-paintbrush:after{content:"\10f618"}.fad.fa-pencil-ruler:after{content:"\10f5ae"}.fad.fa-pennant:after{content:"\10f456"}.fad.fa-people-carry:after{content:"\10f4ce"}.fad.fa-pepper-hot:after{content:"\10f816"}.fad.fa-percent:after{content:"\10f295"}.fad.fa-percentage:after{content:"\10f541"}.fad.fa-person-booth:after{content:"\10f756"}.fad.fa-person-carry:after{content:"\10f4cf"}.fad.fa-person-dolly:after{content:"\10f4d0"}.fad.fa-person-dolly-empty:after{content:"\10f4d1"}.fad.fa-person-sign:after{content:"\10f757"}.fad.fa-phone:after{content:"\10f095"}.fad.fa-phone-alt:after{content:"\10f879"}.fad.fa-phone-laptop:after{content:"\10f87a"}.fad.fa-phone-office:after{content:"\10f67d"}.fad.fa-phone-plus:after{content:"\10f4d2"}.fad.fa-phone-rotary:after{content:"\10f8d3"}.fad.fa-phone-slash:after{content:"\10f3dd"}.fad.fa-phone-square:after{content:"\10f098"}.fad.fa-phone-square-alt:after{content:"\10f87b"}.fad.fa-phone-volume:after{content:"\10f2a0"}.fad.fa-photo-video:after{content:"\10f87c"}.fad.fa-pi:after{content:"\10f67e"}.fad.fa-piano:after{content:"\10f8d4"}.fad.fa-piano-keyboard:after{content:"\10f8d5"}.fad.fa-pie:after{content:"\10f705"}.fad.fa-pig:after{content:"\10f706"}.fad.fa-piggy-bank:after{content:"\10f4d3"}.fad.fa-pills:after{content:"\10f484"}.fad.fa-pizza:after{content:"\10f817"}.fad.fa-pizza-slice:after{content:"\10f818"}.fad.fa-place-of-worship:after{content:"\10f67f"}.fad.fa-plane:after{content:"\10f072"}.fad.fa-plane-alt:after{content:"\10f3de"}.fad.fa-plane-arrival:after{content:"\10f5af"}.fad.fa-plane-departure:after{content:"\10f5b0"}.fad.fa-planet-moon:after{content:"\10f91f"}.fad.fa-planet-ringed:after{content:"\10f920"}.fad.fa-play:after{content:"\10f04b"}.fad.fa-play-circle:after{content:"\10f144"}.fad.fa-plug:after{content:"\10f1e6"}.fad.fa-plus:after{content:"\10f067"}.fad.fa-plus-circle:after{content:"\10f055"}.fad.fa-plus-hexagon:after{content:"\10f300"}.fad.fa-plus-octagon:after{content:"\10f301"}.fad.fa-plus-square:after{content:"\10f0fe"}.fad.fa-podcast:after{content:"\10f2ce"}.fad.fa-podium:after{content:"\10f680"}.fad.fa-podium-star:after{content:"\10f758"}.fad.fa-police-box:after{content:"\10f921"}.fad.fa-poll:after{content:"\10f681"}.fad.fa-poll-h:after{content:"\10f682"}.fad.fa-poll-people:after{content:"\10f759"}.fad.fa-poo:after{content:"\10f2fe"}.fad.fa-poo-storm:after{content:"\10f75a"}.fad.fa-poop:after{content:"\10f619"}.fad.fa-popcorn:after{content:"\10f819"}.fad.fa-portal-enter:after{content:"\10f922"}.fad.fa-portal-exit:after{content:"\10f923"}.fad.fa-portrait:after{content:"\10f3e0"}.fad.fa-pound-sign:after{content:"\10f154"}.fad.fa-power-off:after{content:"\10f011"}.fad.fa-pray:after{content:"\10f683"}.fad.fa-praying-hands:after{content:"\10f684"}.fad.fa-prescription:after{content:"\10f5b1"}.fad.fa-prescription-bottle:after{content:"\10f485"}.fad.fa-prescription-bottle-alt:after{content:"\10f486"}.fad.fa-presentation:after{content:"\10f685"}.fad.fa-print:after{content:"\10f02f"}.fad.fa-print-search:after{content:"\10f81a"}.fad.fa-print-slash:after{content:"\10f686"}.fad.fa-procedures:after{content:"\10f487"}.fad.fa-project-diagram:after{content:"\10f542"}.fad.fa-projector:after{content:"\10f8d6"}.fad.fa-pumpkin:after{content:"\10f707"}.fad.fa-puzzle-piece:after{content:"\10f12e"}.fad.fa-qrcode:after{content:"\10f029"}.fad.fa-question:after{content:"\10f128"}.fad.fa-question-circle:after{content:"\10f059"}.fad.fa-question-square:after{content:"\10f2fd"}.fad.fa-quidditch:after{content:"\10f458"}.fad.fa-quote-left:after{content:"\10f10d"}.fad.fa-quote-right:after{content:"\10f10e"}.fad.fa-quran:after{content:"\10f687"}.fad.fa-rabbit:after{content:"\10f708"}.fad.fa-rabbit-fast:after{content:"\10f709"}.fad.fa-racquet:after{content:"\10f45a"}.fad.fa-radar:after{content:"\10f924"}.fad.fa-radiation:after{content:"\10f7b9"}.fad.fa-radiation-alt:after{content:"\10f7ba"}.fad.fa-radio:after{content:"\10f8d7"}.fad.fa-radio-alt:after{content:"\10f8d8"}.fad.fa-rainbow:after{content:"\10f75b"}.fad.fa-raindrops:after{content:"\10f75c"}.fad.fa-ram:after{content:"\10f70a"}.fad.fa-ramp-loading:after{content:"\10f4d4"}.fad.fa-random:after{content:"\10f074"}.fad.fa-raygun:after{content:"\10f925"}.fad.fa-receipt:after{content:"\10f543"}.fad.fa-record-vinyl:after{content:"\10f8d9"}.fad.fa-rectangle-landscape:after{content:"\10f2fa"}.fad.fa-rectangle-portrait:after{content:"\10f2fb"}.fad.fa-rectangle-wide:after{content:"\10f2fc"}.fad.fa-recycle:after{content:"\10f1b8"}.fad.fa-redo:after{content:"\10f01e"}.fad.fa-redo-alt:after{content:"\10f2f9"}.fad.fa-refrigerator:after{content:"\10f926"}.fad.fa-registered:after{content:"\10f25d"}.fad.fa-remove-format:after{content:"\10f87d"}.fad.fa-repeat:after{content:"\10f363"}.fad.fa-repeat-1:after{content:"\10f365"}.fad.fa-repeat-1-alt:after{content:"\10f366"}.fad.fa-repeat-alt:after{content:"\10f364"}.fad.fa-reply:after{content:"\10f3e5"}.fad.fa-reply-all:after{content:"\10f122"}.fad.fa-republican:after{content:"\10f75e"}.fad.fa-restroom:after{content:"\10f7bd"}.fad.fa-retweet:after{content:"\10f079"}.fad.fa-retweet-alt:after{content:"\10f361"}.fad.fa-ribbon:after{content:"\10f4d6"}.fad.fa-ring:after{content:"\10f70b"}.fad.fa-rings-wedding:after{content:"\10f81b"}.fad.fa-road:after{content:"\10f018"}.fad.fa-robot:after{content:"\10f544"}.fad.fa-rocket:after{content:"\10f135"}.fad.fa-rocket-launch:after{content:"\10f927"}.fad.fa-route:after{content:"\10f4d7"}.fad.fa-route-highway:after{content:"\10f61a"}.fad.fa-route-interstate:after{content:"\10f61b"}.fad.fa-router:after{content:"\10f8da"}.fad.fa-rss:after{content:"\10f09e"}.fad.fa-rss-square:after{content:"\10f143"}.fad.fa-ruble-sign:after{content:"\10f158"}.fad.fa-ruler:after{content:"\10f545"}.fad.fa-ruler-combined:after{content:"\10f546"}.fad.fa-ruler-horizontal:after{content:"\10f547"}.fad.fa-ruler-triangle:after{content:"\10f61c"}.fad.fa-ruler-vertical:after{content:"\10f548"}.fad.fa-running:after{content:"\10f70c"}.fad.fa-rupee-sign:after{content:"\10f156"}.fad.fa-rv:after{content:"\10f7be"}.fad.fa-sack:after{content:"\10f81c"}.fad.fa-sack-dollar:after{content:"\10f81d"}.fad.fa-sad-cry:after{content:"\10f5b3"}.fad.fa-sad-tear:after{content:"\10f5b4"}.fad.fa-salad:after{content:"\10f81e"}.fad.fa-sandwich:after{content:"\10f81f"}.fad.fa-satellite:after{content:"\10f7bf"}.fad.fa-satellite-dish:after{content:"\10f7c0"}.fad.fa-sausage:after{content:"\10f820"}.fad.fa-save:after{content:"\10f0c7"}.fad.fa-sax-hot:after{content:"\10f8db"}.fad.fa-saxophone:after{content:"\10f8dc"}.fad.fa-scalpel:after{content:"\10f61d"}.fad.fa-scalpel-path:after{content:"\10f61e"}.fad.fa-scanner:after{content:"\10f488"}.fad.fa-scanner-image:after{content:"\10f8f3"}.fad.fa-scanner-keyboard:after{content:"\10f489"}.fad.fa-scanner-touchscreen:after{content:"\10f48a"}.fad.fa-scarecrow:after{content:"\10f70d"}.fad.fa-scarf:after{content:"\10f7c1"}.fad.fa-school:after{content:"\10f549"}.fad.fa-screwdriver:after{content:"\10f54a"}.fad.fa-scroll:after{content:"\10f70e"}.fad.fa-scroll-old:after{content:"\10f70f"}.fad.fa-scrubber:after{content:"\10f2f8"}.fad.fa-scythe:after{content:"\10f710"}.fad.fa-sd-card:after{content:"\10f7c2"}.fad.fa-search:after{content:"\10f002"}.fad.fa-search-dollar:after{content:"\10f688"}.fad.fa-search-location:after{content:"\10f689"}.fad.fa-search-minus:after{content:"\10f010"}.fad.fa-search-plus:after{content:"\10f00e"}.fad.fa-seedling:after{content:"\10f4d8"}.fad.fa-send-back:after{content:"\10f87e"}.fad.fa-send-backward:after{content:"\10f87f"}.fad.fa-sensor:after{content:"\10f928"}.fad.fa-sensor-alert:after{content:"\10f929"}.fad.fa-sensor-fire:after{content:"\10f92a"}.fad.fa-sensor-on:after{content:"\10f92b"}.fad.fa-sensor-smoke:after{content:"\10f92c"}.fad.fa-server:after{content:"\10f233"}.fad.fa-shapes:after{content:"\10f61f"}.fad.fa-share:after{content:"\10f064"}.fad.fa-share-all:after{content:"\10f367"}.fad.fa-share-alt:after{content:"\10f1e0"}.fad.fa-share-alt-square:after{content:"\10f1e1"}.fad.fa-share-square:after{content:"\10f14d"}.fad.fa-sheep:after{content:"\10f711"}.fad.fa-shekel-sign:after{content:"\10f20b"}.fad.fa-shield:after{content:"\10f132"}.fad.fa-shield-alt:after{content:"\10f3ed"}.fad.fa-shield-check:after{content:"\10f2f7"}.fad.fa-shield-cross:after{content:"\10f712"}.fad.fa-ship:after{content:"\10f21a"}.fad.fa-shipping-fast:after{content:"\10f48b"}.fad.fa-shipping-timed:after{content:"\10f48c"}.fad.fa-shish-kebab:after{content:"\10f821"}.fad.fa-shoe-prints:after{content:"\10f54b"}.fad.fa-shopping-bag:after{content:"\10f290"}.fad.fa-shopping-basket:after{content:"\10f291"}.fad.fa-shopping-cart:after{content:"\10f07a"}.fad.fa-shovel:after{content:"\10f713"}.fad.fa-shovel-snow:after{content:"\10f7c3"}.fad.fa-shower:after{content:"\10f2cc"}.fad.fa-shredder:after{content:"\10f68a"}.fad.fa-shuttle-van:after{content:"\10f5b6"}.fad.fa-shuttlecock:after{content:"\10f45b"}.fad.fa-sickle:after{content:"\10f822"}.fad.fa-sigma:after{content:"\10f68b"}.fad.fa-sign:after{content:"\10f4d9"}.fad.fa-sign-in:after{content:"\10f090"}.fad.fa-sign-in-alt:after{content:"\10f2f6"}.fad.fa-sign-language:after{content:"\10f2a7"}.fad.fa-sign-out:after{content:"\10f08b"}.fad.fa-sign-out-alt:after{content:"\10f2f5"}.fad.fa-signal:after{content:"\10f012"}.fad.fa-signal-1:after{content:"\10f68c"}.fad.fa-signal-2:after{content:"\10f68d"}.fad.fa-signal-3:after{content:"\10f68e"}.fad.fa-signal-4:after{content:"\10f68f"}.fad.fa-signal-alt:after{content:"\10f690"}.fad.fa-signal-alt-1:after{content:"\10f691"}.fad.fa-signal-alt-2:after{content:"\10f692"}.fad.fa-signal-alt-3:after{content:"\10f693"}.fad.fa-signal-alt-slash:after{content:"\10f694"}.fad.fa-signal-slash:after{content:"\10f695"}.fad.fa-signal-stream:after{content:"\10f8dd"}.fad.fa-signature:after{content:"\10f5b7"}.fad.fa-sim-card:after{content:"\10f7c4"}.fad.fa-siren:after{content:"\10f92d"}.fad.fa-siren-on:after{content:"\10f92e"}.fad.fa-sitemap:after{content:"\10f0e8"}.fad.fa-skating:after{content:"\10f7c5"}.fad.fa-skeleton:after{content:"\10f620"}.fad.fa-ski-jump:after{content:"\10f7c7"}.fad.fa-ski-lift:after{content:"\10f7c8"}.fad.fa-skiing:after{content:"\10f7c9"}.fad.fa-skiing-nordic:after{content:"\10f7ca"}.fad.fa-skull:after{content:"\10f54c"}.fad.fa-skull-cow:after{content:"\10f8de"}.fad.fa-skull-crossbones:after{content:"\10f714"}.fad.fa-slash:after{content:"\10f715"}.fad.fa-sledding:after{content:"\10f7cb"}.fad.fa-sleigh:after{content:"\10f7cc"}.fad.fa-sliders-h:after{content:"\10f1de"}.fad.fa-sliders-h-square:after{content:"\10f3f0"}.fad.fa-sliders-v:after{content:"\10f3f1"}.fad.fa-sliders-v-square:after{content:"\10f3f2"}.fad.fa-smile:after{content:"\10f118"}.fad.fa-smile-beam:after{content:"\10f5b8"}.fad.fa-smile-plus:after{content:"\10f5b9"}.fad.fa-smile-wink:after{content:"\10f4da"}.fad.fa-smog:after{content:"\10f75f"}.fad.fa-smoke:after{content:"\10f760"}.fad.fa-smoking:after{content:"\10f48d"}.fad.fa-smoking-ban:after{content:"\10f54d"}.fad.fa-sms:after{content:"\10f7cd"}.fad.fa-snake:after{content:"\10f716"}.fad.fa-snooze:after{content:"\10f880"}.fad.fa-snow-blowing:after{content:"\10f761"}.fad.fa-snowboarding:after{content:"\10f7ce"}.fad.fa-snowflake:after{content:"\10f2dc"}.fad.fa-snowflakes:after{content:"\10f7cf"}.fad.fa-snowman:after{content:"\10f7d0"}.fad.fa-snowmobile:after{content:"\10f7d1"}.fad.fa-snowplow:after{content:"\10f7d2"}.fad.fa-socks:after{content:"\10f696"}.fad.fa-solar-panel:after{content:"\10f5ba"}.fad.fa-solar-system:after{content:"\10f92f"}.fad.fa-sort:after{content:"\10f0dc"}.fad.fa-sort-alpha-down:after{content:"\10f15d"}.fad.fa-sort-alpha-down-alt:after{content:"\10f881"}.fad.fa-sort-alpha-up:after{content:"\10f15e"}.fad.fa-sort-alpha-up-alt:after{content:"\10f882"}.fad.fa-sort-alt:after{content:"\10f883"}.fad.fa-sort-amount-down:after{content:"\10f160"}.fad.fa-sort-amount-down-alt:after{content:"\10f884"}.fad.fa-sort-amount-up:after{content:"\10f161"}.fad.fa-sort-amount-up-alt:after{content:"\10f885"}.fad.fa-sort-circle:after{content:"\10f930"}.fad.fa-sort-circle-down:after{content:"\10f931"}.fad.fa-sort-circle-up:after{content:"\10f932"}.fad.fa-sort-down:after{content:"\10f0dd"}.fad.fa-sort-numeric-down:after{content:"\10f162"}.fad.fa-sort-numeric-down-alt:after{content:"\10f886"}.fad.fa-sort-numeric-up:after{content:"\10f163"}.fad.fa-sort-numeric-up-alt:after{content:"\10f887"}.fad.fa-sort-shapes-down:after{content:"\10f888"}.fad.fa-sort-shapes-down-alt:after{content:"\10f889"}.fad.fa-sort-shapes-up:after{content:"\10f88a"}.fad.fa-sort-shapes-up-alt:after{content:"\10f88b"}.fad.fa-sort-size-down:after{content:"\10f88c"}.fad.fa-sort-size-down-alt:after{content:"\10f88d"}.fad.fa-sort-size-up:after{content:"\10f88e"}.fad.fa-sort-size-up-alt:after{content:"\10f88f"}.fad.fa-sort-up:after{content:"\10f0de"}.fad.fa-soup:after{content:"\10f823"}.fad.fa-spa:after{content:"\10f5bb"}.fad.fa-space-shuttle:after{content:"\10f197"}.fad.fa-space-station-moon:after{content:"\10f933"}.fad.fa-space-station-moon-alt:after{content:"\10f934"}.fad.fa-spade:after{content:"\10f2f4"}.fad.fa-sparkles:after{content:"\10f890"}.fad.fa-speaker:after{content:"\10f8df"}.fad.fa-speakers:after{content:"\10f8e0"}.fad.fa-spell-check:after{content:"\10f891"}.fad.fa-spider:after{content:"\10f717"}.fad.fa-spider-black-widow:after{content:"\10f718"}.fad.fa-spider-web:after{content:"\10f719"}.fad.fa-spinner:after{content:"\10f110"}.fad.fa-spinner-third:after{content:"\10f3f4"}.fad.fa-splotch:after{content:"\10f5bc"}.fad.fa-spray-can:after{content:"\10f5bd"}.fad.fa-sprinkler:after{content:"\10f935"}.fad.fa-square:after{content:"\10f0c8"}.fad.fa-square-full:after{content:"\10f45c"}.fad.fa-square-root:after{content:"\10f697"}.fad.fa-square-root-alt:after{content:"\10f698"}.fad.fa-squirrel:after{content:"\10f71a"}.fad.fa-staff:after{content:"\10f71b"}.fad.fa-stamp:after{content:"\10f5bf"}.fad.fa-star:after{content:"\10f005"}.fad.fa-star-and-crescent:after{content:"\10f699"}.fad.fa-star-christmas:after{content:"\10f7d4"}.fad.fa-star-exclamation:after{content:"\10f2f3"}.fad.fa-star-half:after{content:"\10f089"}.fad.fa-star-half-alt:after{content:"\10f5c0"}.fad.fa-star-of-david:after{content:"\10f69a"}.fad.fa-star-of-life:after{content:"\10f621"}.fad.fa-star-shooting:after{content:"\10f936"}.fad.fa-starfighter:after{content:"\10f937"}.fad.fa-starfighter-alt:after{content:"\10f938"}.fad.fa-stars:after{content:"\10f762"}.fad.fa-starship:after{content:"\10f939"}.fad.fa-starship-freighter:after{content:"\10f93a"}.fad.fa-steak:after{content:"\10f824"}.fad.fa-steering-wheel:after{content:"\10f622"}.fad.fa-step-backward:after{content:"\10f048"}.fad.fa-step-forward:after{content:"\10f051"}.fad.fa-stethoscope:after{content:"\10f0f1"}.fad.fa-sticky-note:after{content:"\10f249"}.fad.fa-stocking:after{content:"\10f7d5"}.fad.fa-stomach:after{content:"\10f623"}.fad.fa-stop:after{content:"\10f04d"}.fad.fa-stop-circle:after{content:"\10f28d"}.fad.fa-stopwatch:after{content:"\10f2f2"}.fad.fa-store:after{content:"\10f54e"}.fad.fa-store-alt:after{content:"\10f54f"}.fad.fa-stream:after{content:"\10f550"}.fad.fa-street-view:after{content:"\10f21d"}.fad.fa-stretcher:after{content:"\10f825"}.fad.fa-strikethrough:after{content:"\10f0cc"}.fad.fa-stroopwafel:after{content:"\10f551"}.fad.fa-subscript:after{content:"\10f12c"}.fad.fa-subway:after{content:"\10f239"}.fad.fa-suitcase:after{content:"\10f0f2"}.fad.fa-suitcase-rolling:after{content:"\10f5c1"}.fad.fa-sun:after{content:"\10f185"}.fad.fa-sun-cloud:after{content:"\10f763"}.fad.fa-sun-dust:after{content:"\10f764"}.fad.fa-sun-haze:after{content:"\10f765"}.fad.fa-sunglasses:after{content:"\10f892"}.fad.fa-sunrise:after{content:"\10f766"}.fad.fa-sunset:after{content:"\10f767"}.fad.fa-superscript:after{content:"\10f12b"}.fad.fa-surprise:after{content:"\10f5c2"}.fad.fa-swatchbook:after{content:"\10f5c3"}.fad.fa-swimmer:after{content:"\10f5c4"}.fad.fa-swimming-pool:after{content:"\10f5c5"}.fad.fa-sword:after{content:"\10f71c"}.fad.fa-sword-laser:after{content:"\10f93b"}.fad.fa-sword-laser-alt:after{content:"\10f93c"}.fad.fa-swords:after{content:"\10f71d"}.fad.fa-swords-laser:after{content:"\10f93d"}.fad.fa-synagogue:after{content:"\10f69b"}.fad.fa-sync:after{content:"\10f021"}.fad.fa-sync-alt:after{content:"\10f2f1"}.fad.fa-syringe:after{content:"\10f48e"}.fad.fa-table:after{content:"\10f0ce"}.fad.fa-table-tennis:after{content:"\10f45d"}.fad.fa-tablet:after{content:"\10f10a"}.fad.fa-tablet-alt:after{content:"\10f3fa"}.fad.fa-tablet-android:after{content:"\10f3fb"}.fad.fa-tablet-android-alt:after{content:"\10f3fc"}.fad.fa-tablet-rugged:after{content:"\10f48f"}.fad.fa-tablets:after{content:"\10f490"}.fad.fa-tachometer:after{content:"\10f0e4"}.fad.fa-tachometer-alt:after{content:"\10f3fd"}.fad.fa-tachometer-alt-average:after{content:"\10f624"}.fad.fa-tachometer-alt-fast:after{content:"\10f625"}.fad.fa-tachometer-alt-fastest:after{content:"\10f626"}.fad.fa-tachometer-alt-slow:after{content:"\10f627"}.fad.fa-tachometer-alt-slowest:after{content:"\10f628"}.fad.fa-tachometer-average:after{content:"\10f629"}.fad.fa-tachometer-fast:after{content:"\10f62a"}.fad.fa-tachometer-fastest:after{content:"\10f62b"}.fad.fa-tachometer-slow:after{content:"\10f62c"}.fad.fa-tachometer-slowest:after{content:"\10f62d"}.fad.fa-taco:after{content:"\10f826"}.fad.fa-tag:after{content:"\10f02b"}.fad.fa-tags:after{content:"\10f02c"}.fad.fa-tally:after{content:"\10f69c"}.fad.fa-tanakh:after{content:"\10f827"}.fad.fa-tape:after{content:"\10f4db"}.fad.fa-tasks:after{content:"\10f0ae"}.fad.fa-tasks-alt:after{content:"\10f828"}.fad.fa-taxi:after{content:"\10f1ba"}.fad.fa-teeth:after{content:"\10f62e"}.fad.fa-teeth-open:after{content:"\10f62f"}.fad.fa-telescope:after{content:"\10f93e"}.fad.fa-temperature-down:after{content:"\10f93f"}.fad.fa-temperature-frigid:after{content:"\10f768"}.fad.fa-temperature-high:after{content:"\10f769"}.fad.fa-temperature-hot:after{content:"\10f76a"}.fad.fa-temperature-low:after{content:"\10f76b"}.fad.fa-temperature-up:after{content:"\10f940"}.fad.fa-tenge:after{content:"\10f7d7"}.fad.fa-tennis-ball:after{content:"\10f45e"}.fad.fa-terminal:after{content:"\10f120"}.fad.fa-text:after{content:"\10f893"}.fad.fa-text-height:after{content:"\10f034"}.fad.fa-text-size:after{content:"\10f894"}.fad.fa-text-width:after{content:"\10f035"}.fad.fa-th:after{content:"\10f00a"}.fad.fa-th-large:after{content:"\10f009"}.fad.fa-th-list:after{content:"\10f00b"}.fad.fa-theater-masks:after{content:"\10f630"}.fad.fa-thermometer:after{content:"\10f491"}.fad.fa-thermometer-empty:after{content:"\10f2cb"}.fad.fa-thermometer-full:after{content:"\10f2c7"}.fad.fa-thermometer-half:after{content:"\10f2c9"}.fad.fa-thermometer-quarter:after{content:"\10f2ca"}.fad.fa-thermometer-three-quarters:after{content:"\10f2c8"}.fad.fa-theta:after{content:"\10f69e"}.fad.fa-thumbs-down:after{content:"\10f165"}.fad.fa-thumbs-up:after{content:"\10f164"}.fad.fa-thumbtack:after{content:"\10f08d"}.fad.fa-thunderstorm:after{content:"\10f76c"}.fad.fa-thunderstorm-moon:after{content:"\10f76d"}.fad.fa-thunderstorm-sun:after{content:"\10f76e"}.fad.fa-ticket:after{content:"\10f145"}.fad.fa-ticket-alt:after{content:"\10f3ff"}.fad.fa-tilde:after{content:"\10f69f"}.fad.fa-times:after{content:"\10f00d"}.fad.fa-times-circle:after{content:"\10f057"}.fad.fa-times-hexagon:after{content:"\10f2ee"}.fad.fa-times-octagon:after{content:"\10f2f0"}.fad.fa-times-square:after{content:"\10f2d3"}.fad.fa-tint:after{content:"\10f043"}.fad.fa-tint-slash:after{content:"\10f5c7"}.fad.fa-tire:after{content:"\10f631"}.fad.fa-tire-flat:after{content:"\10f632"}.fad.fa-tire-pressure-warning:after{content:"\10f633"}.fad.fa-tire-rugged:after{content:"\10f634"}.fad.fa-tired:after{content:"\10f5c8"}.fad.fa-toggle-off:after{content:"\10f204"}.fad.fa-toggle-on:after{content:"\10f205"}.fad.fa-toilet:after{content:"\10f7d8"}.fad.fa-toilet-paper:after{content:"\10f71e"}.fad.fa-toilet-paper-alt:after{content:"\10f71f"}.fad.fa-tombstone:after{content:"\10f720"}.fad.fa-tombstone-alt:after{content:"\10f721"}.fad.fa-toolbox:after{content:"\10f552"}.fad.fa-tools:after{content:"\10f7d9"}.fad.fa-tooth:after{content:"\10f5c9"}.fad.fa-toothbrush:after{content:"\10f635"}.fad.fa-torah:after{content:"\10f6a0"}.fad.fa-torii-gate:after{content:"\10f6a1"}.fad.fa-tornado:after{content:"\10f76f"}.fad.fa-tractor:after{content:"\10f722"}.fad.fa-trademark:after{content:"\10f25c"}.fad.fa-traffic-cone:after{content:"\10f636"}.fad.fa-traffic-light:after{content:"\10f637"}.fad.fa-traffic-light-go:after{content:"\10f638"}.fad.fa-traffic-light-slow:after{content:"\10f639"}.fad.fa-traffic-light-stop:after{content:"\10f63a"}.fad.fa-trailer:after{content:"\10f941"}.fad.fa-train:after{content:"\10f238"}.fad.fa-tram:after{content:"\10f7da"}.fad.fa-transgender:after{content:"\10f224"}.fad.fa-transgender-alt:after{content:"\10f225"}.fad.fa-transporter:after{content:"\10f942"}.fad.fa-transporter-1:after{content:"\10f943"}.fad.fa-transporter-2:after{content:"\10f944"}.fad.fa-transporter-3:after{content:"\10f945"}.fad.fa-transporter-empty:after{content:"\10f946"}.fad.fa-trash:after{content:"\10f1f8"}.fad.fa-trash-alt:after{content:"\10f2ed"}.fad.fa-trash-restore:after{content:"\10f829"}.fad.fa-trash-restore-alt:after{content:"\10f82a"}.fad.fa-trash-undo:after{content:"\10f895"}.fad.fa-trash-undo-alt:after{content:"\10f896"}.fad.fa-treasure-chest:after{content:"\10f723"}.fad.fa-tree:after{content:"\10f1bb"}.fad.fa-tree-alt:after{content:"\10f400"}.fad.fa-tree-christmas:after{content:"\10f7db"}.fad.fa-tree-decorated:after{content:"\10f7dc"}.fad.fa-tree-large:after{content:"\10f7dd"}.fad.fa-tree-palm:after{content:"\10f82b"}.fad.fa-trees:after{content:"\10f724"}.fad.fa-triangle:after{content:"\10f2ec"}.fad.fa-triangle-music:after{content:"\10f8e2"}.fad.fa-trophy:after{content:"\10f091"}.fad.fa-trophy-alt:after{content:"\10f2eb"}.fad.fa-truck:after{content:"\10f0d1"}.fad.fa-truck-container:after{content:"\10f4dc"}.fad.fa-truck-couch:after{content:"\10f4dd"}.fad.fa-truck-loading:after{content:"\10f4de"}.fad.fa-truck-monster:after{content:"\10f63b"}.fad.fa-truck-moving:after{content:"\10f4df"}.fad.fa-truck-pickup:after{content:"\10f63c"}.fad.fa-truck-plow:after{content:"\10f7de"}.fad.fa-truck-ramp:after{content:"\10f4e0"}.fad.fa-trumpet:after{content:"\10f8e3"}.fad.fa-tshirt:after{content:"\10f553"}.fad.fa-tty:after{content:"\10f1e4"}.fad.fa-turkey:after{content:"\10f725"}.fad.fa-turntable:after{content:"\10f8e4"}.fad.fa-turtle:after{content:"\10f726"}.fad.fa-tv:after{content:"\10f26c"}.fad.fa-tv-alt:after{content:"\10f8e5"}.fad.fa-tv-music:after{content:"\10f8e6"}.fad.fa-tv-retro:after{content:"\10f401"}.fad.fa-typewriter:after{content:"\10f8e7"}.fad.fa-ufo:after{content:"\10f947"}.fad.fa-ufo-beam:after{content:"\10f948"}.fad.fa-umbrella:after{content:"\10f0e9"}.fad.fa-umbrella-beach:after{content:"\10f5ca"}.fad.fa-underline:after{content:"\10f0cd"}.fad.fa-undo:after{content:"\10f0e2"}.fad.fa-undo-alt:after{content:"\10f2ea"}.fad.fa-unicorn:after{content:"\10f727"}.fad.fa-union:after{content:"\10f6a2"}.fad.fa-universal-access:after{content:"\10f29a"}.fad.fa-university:after{content:"\10f19c"}.fad.fa-unlink:after{content:"\10f127"}.fad.fa-unlock:after{content:"\10f09c"}.fad.fa-unlock-alt:after{content:"\10f13e"}.fad.fa-upload:after{content:"\10f093"}.fad.fa-usb-drive:after{content:"\10f8e9"}.fad.fa-usd-circle:after{content:"\10f2e8"}.fad.fa-usd-square:after{content:"\10f2e9"}.fad.fa-user:after{content:"\10f007"}.fad.fa-user-alien:after{content:"\10f94a"}.fad.fa-user-alt:after{content:"\10f406"}.fad.fa-user-alt-slash:after{content:"\10f4fa"}.fad.fa-user-astronaut:after{content:"\10f4fb"}.fad.fa-user-chart:after{content:"\10f6a3"}.fad.fa-user-check:after{content:"\10f4fc"}.fad.fa-user-circle:after{content:"\10f2bd"}.fad.fa-user-clock:after{content:"\10f4fd"}.fad.fa-user-cog:after{content:"\10f4fe"}.fad.fa-user-cowboy:after{content:"\10f8ea"}.fad.fa-user-crown:after{content:"\10f6a4"}.fad.fa-user-edit:after{content:"\10f4ff"}.fad.fa-user-friends:after{content:"\10f500"}.fad.fa-user-graduate:after{content:"\10f501"}.fad.fa-user-hard-hat:after{content:"\10f82c"}.fad.fa-user-headset:after{content:"\10f82d"}.fad.fa-user-injured:after{content:"\10f728"}.fad.fa-user-lock:after{content:"\10f502"}.fad.fa-user-md:after{content:"\10f0f0"}.fad.fa-user-md-chat:after{content:"\10f82e"}.fad.fa-user-minus:after{content:"\10f503"}.fad.fa-user-music:after{content:"\10f8eb"}.fad.fa-user-ninja:after{content:"\10f504"}.fad.fa-user-nurse:after{content:"\10f82f"}.fad.fa-user-plus:after{content:"\10f234"}.fad.fa-user-robot:after{content:"\10f94b"}.fad.fa-user-secret:after{content:"\10f21b"}.fad.fa-user-shield:after{content:"\10f505"}.fad.fa-user-slash:after{content:"\10f506"}.fad.fa-user-tag:after{content:"\10f507"}.fad.fa-user-tie:after{content:"\10f508"}.fad.fa-user-times:after{content:"\10f235"}.fad.fa-user-visor:after{content:"\10f94c"}.fad.fa-users:after{content:"\10f0c0"}.fad.fa-users-class:after{content:"\10f63d"}.fad.fa-users-cog:after{content:"\10f509"}.fad.fa-users-crown:after{content:"\10f6a5"}.fad.fa-users-medical:after{content:"\10f830"}.fad.fa-utensil-fork:after{content:"\10f2e3"}.fad.fa-utensil-knife:after{content:"\10f2e4"}.fad.fa-utensil-spoon:after{content:"\10f2e5"}.fad.fa-utensils:after{content:"\10f2e7"}.fad.fa-utensils-alt:after{content:"\10f2e6"}.fad.fa-vacuum:after{content:"\10f94d"}.fad.fa-vacuum-robot:after{content:"\10f94e"}.fad.fa-value-absolute:after{content:"\10f6a6"}.fad.fa-vector-square:after{content:"\10f5cb"}.fad.fa-venus:after{content:"\10f221"}.fad.fa-venus-double:after{content:"\10f226"}.fad.fa-venus-mars:after{content:"\10f228"}.fad.fa-vhs:after{content:"\10f8ec"}.fad.fa-vial:after{content:"\10f492"}.fad.fa-vials:after{content:"\10f493"}.fad.fa-video:after{content:"\10f03d"}.fad.fa-video-plus:after{content:"\10f4e1"}.fad.fa-video-slash:after{content:"\10f4e2"}.fad.fa-vihara:after{content:"\10f6a7"}.fad.fa-violin:after{content:"\10f8ed"}.fad.fa-voicemail:after{content:"\10f897"}.fad.fa-volcano:after{content:"\10f770"}.fad.fa-volleyball-ball:after{content:"\10f45f"}.fad.fa-volume:after{content:"\10f6a8"}.fad.fa-volume-down:after{content:"\10f027"}.fad.fa-volume-mute:after{content:"\10f6a9"}.fad.fa-volume-off:after{content:"\10f026"}.fad.fa-volume-slash:after{content:"\10f2e2"}.fad.fa-volume-up:after{content:"\10f028"}.fad.fa-vote-nay:after{content:"\10f771"}.fad.fa-vote-yea:after{content:"\10f772"}.fad.fa-vr-cardboard:after{content:"\10f729"}.fad.fa-wagon-covered:after{content:"\10f8ee"}.fad.fa-walker:after{content:"\10f831"}.fad.fa-walkie-talkie:after{content:"\10f8ef"}.fad.fa-walking:after{content:"\10f554"}.fad.fa-wallet:after{content:"\10f555"}.fad.fa-wand:after{content:"\10f72a"}.fad.fa-wand-magic:after{content:"\10f72b"}.fad.fa-warehouse:after{content:"\10f494"}.fad.fa-warehouse-alt:after{content:"\10f495"}.fad.fa-washer:after{content:"\10f898"}.fad.fa-watch:after{content:"\10f2e1"}.fad.fa-watch-calculator:after{content:"\10f8f0"}.fad.fa-watch-fitness:after{content:"\10f63e"}.fad.fa-water:after{content:"\10f773"}.fad.fa-water-lower:after{content:"\10f774"}.fad.fa-water-rise:after{content:"\10f775"}.fad.fa-wave-sine:after{content:"\10f899"}.fad.fa-wave-square:after{content:"\10f83e"}.fad.fa-wave-triangle:after{content:"\10f89a"}.fad.fa-waveform:after{content:"\10f8f1"}.fad.fa-waveform-path:after{content:"\10f8f2"}.fad.fa-webcam:after{content:"\10f832"}.fad.fa-webcam-slash:after{content:"\10f833"}.fad.fa-weight:after{content:"\10f496"}.fad.fa-weight-hanging:after{content:"\10f5cd"}.fad.fa-whale:after{content:"\10f72c"}.fad.fa-wheat:after{content:"\10f72d"}.fad.fa-wheelchair:after{content:"\10f193"}.fad.fa-whistle:after{content:"\10f460"}.fad.fa-wifi:after{content:"\10f1eb"}.fad.fa-wifi-1:after{content:"\10f6aa"}.fad.fa-wifi-2:after{content:"\10f6ab"}.fad.fa-wifi-slash:after{content:"\10f6ac"}.fad.fa-wind:after{content:"\10f72e"}.fad.fa-wind-turbine:after{content:"\10f89b"}.fad.fa-wind-warning:after{content:"\10f776"}.fad.fa-window:after{content:"\10f40e"}.fad.fa-window-alt:after{content:"\10f40f"}.fad.fa-window-close:after{content:"\10f410"}.fad.fa-window-frame:after{content:"\10f94f"}.fad.fa-window-frame-open:after{content:"\10f950"}.fad.fa-window-maximize:after{content:"\10f2d0"}.fad.fa-window-minimize:after{content:"\10f2d1"}.fad.fa-window-restore:after{content:"\10f2d2"}.fad.fa-windsock:after{content:"\10f777"}.fad.fa-wine-bottle:after{content:"\10f72f"}.fad.fa-wine-glass:after{content:"\10f4e3"}.fad.fa-wine-glass-alt:after{content:"\10f5ce"}.fad.fa-won-sign:after{content:"\10f159"}.fad.fa-wreath:after{content:"\10f7e2"}.fad.fa-wrench:after{content:"\10f0ad"}.fad.fa-x-ray:after{content:"\10f497"}.fad.fa-yen-sign:after{content:"\10f157"}.fad.fa-yin-yang:after{content:"\10f6ad"}@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:300;font-display:auto;src:url(../webfonts/fa-light-300.eot);src:url(../webfonts/fa-light-300.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-light-300.woff2) format("woff2"),url(../webfonts/fa-light-300.woff) format("woff"),url(../webfonts/fa-light-300.ttf) format("truetype"),url(../webfonts/fa-light-300.svg#fontawesome) format("svg")}.fal{font-weight:300}@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.fal,.far{font-family:"Font Awesome 5 Pro"}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Pro";font-weight:900} \ No newline at end of file diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-brands-400.eot b/assets/admin/fonts/fontawesome/webfonts/fa-brands-400.eot new file mode 100644 index 0000000..ff42eeb Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-brands-400.eot differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-brands-400.svg b/assets/admin/fonts/fontawesome/webfonts/fa-brands-400.svg new file mode 100644 index 0000000..3613b35 --- /dev/null +++ b/assets/admin/fonts/fontawesome/webfonts/fa-brands-400.svg @@ -0,0 +1,3535 @@ + + + + + +Created by FontForge 20190801 at Tue Dec 10 16:08:44 2019 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-brands-400.ttf b/assets/admin/fonts/fontawesome/webfonts/fa-brands-400.ttf new file mode 100644 index 0000000..79b6bae Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-brands-400.ttf differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-brands-400.woff b/assets/admin/fonts/fontawesome/webfonts/fa-brands-400.woff new file mode 100644 index 0000000..56d4bbb Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-brands-400.woff differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-brands-400.woff2 b/assets/admin/fonts/fontawesome/webfonts/fa-brands-400.woff2 new file mode 100644 index 0000000..8a83663 Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-brands-400.woff2 differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-duotone-900.eot b/assets/admin/fonts/fontawesome/webfonts/fa-duotone-900.eot new file mode 100644 index 0000000..6ca4482 Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-duotone-900.eot differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-duotone-900.svg b/assets/admin/fonts/fontawesome/webfonts/fa-duotone-900.svg new file mode 100644 index 0000000..43d3417 --- /dev/null +++ b/assets/admin/fonts/fontawesome/webfonts/fa-duotone-900.svg @@ -0,0 +1,14692 @@ + + + + + +Created by FontForge 20190801 at Tue Dec 10 16:08:45 2019 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-duotone-900.ttf b/assets/admin/fonts/fontawesome/webfonts/fa-duotone-900.ttf new file mode 100644 index 0000000..b1a5e7e Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-duotone-900.ttf differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-duotone-900.woff b/assets/admin/fonts/fontawesome/webfonts/fa-duotone-900.woff new file mode 100644 index 0000000..de2ce75 Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-duotone-900.woff differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-duotone-900.woff2 b/assets/admin/fonts/fontawesome/webfonts/fa-duotone-900.woff2 new file mode 100644 index 0000000..0d57b19 Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-duotone-900.woff2 differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-light-300.eot b/assets/admin/fonts/fontawesome/webfonts/fa-light-300.eot new file mode 100644 index 0000000..5051b87 Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-light-300.eot differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-light-300.svg b/assets/admin/fonts/fontawesome/webfonts/fa-light-300.svg new file mode 100644 index 0000000..48908c4 --- /dev/null +++ b/assets/admin/fonts/fontawesome/webfonts/fa-light-300.svg @@ -0,0 +1,11936 @@ + + + + + +Created by FontForge 20190801 at Tue Dec 10 16:08:46 2019 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-light-300.ttf b/assets/admin/fonts/fontawesome/webfonts/fa-light-300.ttf new file mode 100644 index 0000000..34489d0 Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-light-300.ttf differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-light-300.woff b/assets/admin/fonts/fontawesome/webfonts/fa-light-300.woff new file mode 100644 index 0000000..414c107 Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-light-300.woff differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-light-300.woff2 b/assets/admin/fonts/fontawesome/webfonts/fa-light-300.woff2 new file mode 100644 index 0000000..d49e7e2 Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-light-300.woff2 differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-regular-400.eot b/assets/admin/fonts/fontawesome/webfonts/fa-regular-400.eot new file mode 100644 index 0000000..4c6662f Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-regular-400.eot differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-regular-400.svg b/assets/admin/fonts/fontawesome/webfonts/fa-regular-400.svg new file mode 100644 index 0000000..32aae12 --- /dev/null +++ b/assets/admin/fonts/fontawesome/webfonts/fa-regular-400.svg @@ -0,0 +1,10905 @@ + + + + + +Created by FontForge 20190801 at Tue Dec 10 16:08:46 2019 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-regular-400.ttf b/assets/admin/fonts/fontawesome/webfonts/fa-regular-400.ttf new file mode 100644 index 0000000..2da2b23 Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-regular-400.ttf differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-regular-400.woff b/assets/admin/fonts/fontawesome/webfonts/fa-regular-400.woff new file mode 100644 index 0000000..ae20cd5 Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-regular-400.woff differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-regular-400.woff2 b/assets/admin/fonts/fontawesome/webfonts/fa-regular-400.woff2 new file mode 100644 index 0000000..783cfcf Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-regular-400.woff2 differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-solid-900.eot b/assets/admin/fonts/fontawesome/webfonts/fa-solid-900.eot new file mode 100644 index 0000000..cbcc72f Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-solid-900.eot differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-solid-900.svg b/assets/admin/fonts/fontawesome/webfonts/fa-solid-900.svg new file mode 100644 index 0000000..190c4c8 --- /dev/null +++ b/assets/admin/fonts/fontawesome/webfonts/fa-solid-900.svg @@ -0,0 +1,9297 @@ + + + + + +Created by FontForge 20190801 at Tue Dec 10 16:08:45 2019 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-solid-900.ttf b/assets/admin/fonts/fontawesome/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000..18e30d4 Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-solid-900.ttf differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-solid-900.woff b/assets/admin/fonts/fontawesome/webfonts/fa-solid-900.woff new file mode 100644 index 0000000..c0e39e2 Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-solid-900.woff differ diff --git a/assets/admin/fonts/fontawesome/webfonts/fa-solid-900.woff2 b/assets/admin/fonts/fontawesome/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000..2524b30 Binary files /dev/null and b/assets/admin/fonts/fontawesome/webfonts/fa-solid-900.woff2 differ diff --git a/assets/admin/icons/icons.js b/assets/admin/icons/icons.js new file mode 100644 index 0000000..982b86c --- /dev/null +++ b/assets/admin/icons/icons.js @@ -0,0 +1,167 @@ +import { + cibFacebook, + cibTwitter, + cibLinkedin, + cibFlickr, + cibTumblr, + cibXing, + cibGithub, + cibStackoverflow, + cibYoutube, + cibDribbble, + cibInstagram, + cibPinterest, + cibVk, + cibYahoo, + cibBehance, + cibReddit, + cibVimeo, + cibCcMastercard, + cibCcVisa, + cibStripe, + cibPaypal, + cibGooglePay, + cibCcAmex +} from '@coreui/icons' +import { + cifUs, + cifBr, + cifIn, + cifFr, + cifEs, + cifPl +} from '@coreui/icons' +import { + cilArrowRight, + cilBan, + cilBasket, + cilBell, + cilCalculator, + cilCalendar, + cilCloudDownload, + cilChartPie, + cilCheck, + cilChevronBottom, + cilChevronTop, + cilCheckCircle, + cilCommentSquare, + cilCursor, + cilDrop, + cilDollar, + cilEnvelopeClosed, + cilEnvelopeOpen, + cilEuro, + cilGlobeAlt, + cilGrid, + cilFile, + cilJustifyCenter, + cilLaptop, + cilLayers, + cilLightbulb, + cilList, + cilLocationPin, + cilLockLocked, + cilMagnifyingGlass, + cilMoon, + cilOptions, + cilPencil, + cilPeople, + cilPuzzle, + cilSettings, + cilShieldAlt, + cilSpeech, + cilSpeedometer, + cilStar, + cilTask, + cilUser, + cilUserFemale, + cilUserFollow, + cilXCircle + +} from '@coreui/icons' +import { logo } from './logo' + +export const iconsSet = Object.assign( + {}, + { logo }, + { + cilArrowRight, + cilBan, + cilBasket, + cilBell, + cilCalculator, + cilCalendar, + cilCloudDownload, + cilChartPie, + cilCheck, + cilChevronBottom, + cilChevronTop, + cilCheckCircle, + cilCommentSquare, + cilCursor, + cilDrop, + cilDollar, + cilEnvelopeClosed, + cilEnvelopeOpen, + cilEuro, + cilGlobeAlt, + cilGrid, + cilFile, + cilJustifyCenter, + cilLaptop, + cilLayers, + cilLightbulb, + cilList, + cilLocationPin, + cilLockLocked, + cilMagnifyingGlass, + cilMoon, + cilOptions, + cilPencil, + cilPeople, + cilPuzzle, + cilSettings, + cilShieldAlt, + cilSpeech, + cilSpeedometer, + cilStar, + cilTask, + cilUser, + cilUserFemale, + cilUserFollow, + cilXCircle + }, + { + cifUs, + cifBr, + cifIn, + cifFr, + cifEs, + cifPl + }, + { + cibFacebook, + cibTwitter, + cibLinkedin, + cibFlickr, + cibTumblr, + cibXing, + cibGithub, + cibStackoverflow, + cibYoutube, + cibDribbble, + cibInstagram, + cibPinterest, + cibVk, + cibYahoo, + cibBehance, + cibReddit, + cibVimeo, + cibCcMastercard, + cibCcVisa, + cibStripe, + cibPaypal, + cibGooglePay, + cibCcAmex + } +) diff --git a/assets/admin/icons/logo.js b/assets/admin/icons/logo.js new file mode 100644 index 0000000..6923789 --- /dev/null +++ b/assets/admin/icons/logo.js @@ -0,0 +1,29 @@ +// Example of SVG converted to js array, so it can be used with CIcon. +// the first argument is two last values of svg viewBox, +// the second argument is the SVG content stripped of SVG tags +export const logo = ['556 134',` + + + + + + + + + + + + + + + + + + + + + + + + +`] diff --git a/assets/admin/img/homePageTemplate/s1-side.jpg b/assets/admin/img/homePageTemplate/s1-side.jpg new file mode 100644 index 0000000..54e4f5d Binary files /dev/null and b/assets/admin/img/homePageTemplate/s1-side.jpg differ diff --git a/assets/admin/img/homePageTemplate/s1.jpg b/assets/admin/img/homePageTemplate/s1.jpg new file mode 100644 index 0000000..9675ede Binary files /dev/null and b/assets/admin/img/homePageTemplate/s1.jpg differ diff --git a/assets/admin/img/homePageTemplate/s2-side.jpg b/assets/admin/img/homePageTemplate/s2-side.jpg new file mode 100644 index 0000000..c81d29c Binary files /dev/null and b/assets/admin/img/homePageTemplate/s2-side.jpg differ diff --git a/assets/admin/img/homePageTemplate/s2.jpg b/assets/admin/img/homePageTemplate/s2.jpg new file mode 100644 index 0000000..3da10e5 Binary files /dev/null and b/assets/admin/img/homePageTemplate/s2.jpg differ diff --git a/assets/admin/img/homePageTemplate/s3-side.jpg b/assets/admin/img/homePageTemplate/s3-side.jpg new file mode 100644 index 0000000..a2c81d0 Binary files /dev/null and b/assets/admin/img/homePageTemplate/s3-side.jpg differ diff --git a/assets/admin/img/homePageTemplate/s3.jpg b/assets/admin/img/homePageTemplate/s3.jpg new file mode 100644 index 0000000..873abc0 Binary files /dev/null and b/assets/admin/img/homePageTemplate/s3.jpg differ diff --git a/assets/admin/img/homePageTemplate/s4-side.jpg b/assets/admin/img/homePageTemplate/s4-side.jpg new file mode 100644 index 0000000..759abc8 Binary files /dev/null and b/assets/admin/img/homePageTemplate/s4-side.jpg differ diff --git a/assets/admin/img/homePageTemplate/s4.jpg b/assets/admin/img/homePageTemplate/s4.jpg new file mode 100644 index 0000000..ac31a33 Binary files /dev/null and b/assets/admin/img/homePageTemplate/s4.jpg differ diff --git a/assets/admin/img/homePageTemplate/s5-side.jpg b/assets/admin/img/homePageTemplate/s5-side.jpg new file mode 100644 index 0000000..ebe1d63 Binary files /dev/null and b/assets/admin/img/homePageTemplate/s5-side.jpg differ diff --git a/assets/admin/img/homePageTemplate/s5.jpg b/assets/admin/img/homePageTemplate/s5.jpg new file mode 100644 index 0000000..5036b7f Binary files /dev/null and b/assets/admin/img/homePageTemplate/s5.jpg differ diff --git a/assets/admin/img/homePageTemplate/s6-side.jpg b/assets/admin/img/homePageTemplate/s6-side.jpg new file mode 100644 index 0000000..9d84144 Binary files /dev/null and b/assets/admin/img/homePageTemplate/s6-side.jpg differ diff --git a/assets/admin/img/homePageTemplate/s6.jpg b/assets/admin/img/homePageTemplate/s6.jpg new file mode 100644 index 0000000..cf7b573 Binary files /dev/null and b/assets/admin/img/homePageTemplate/s6.jpg differ diff --git a/assets/admin/img/homePageTemplate/s7-side.jpg b/assets/admin/img/homePageTemplate/s7-side.jpg new file mode 100644 index 0000000..b9c2799 Binary files /dev/null and b/assets/admin/img/homePageTemplate/s7-side.jpg differ diff --git a/assets/admin/scss/_custom.scss b/assets/admin/scss/_custom.scss new file mode 100644 index 0000000..ec06093 --- /dev/null +++ b/assets/admin/scss/_custom.scss @@ -0,0 +1,206 @@ +// Here you can add other styles +.copy-right { + direction: ltr !important; + + .company { + color: #000; + font-weight: bold; + + &:hover { + text-decoration: none; + color: #000; + } + } +} + +pre { + background: #000 !important; + color: green !important; + direction: ltr !important; + text-align: left !important; + padding: 20px !important; + font-size: 20px !important; +} + +.c-app { + .custom-subheader { + align-items: center; + width: 100%; + position: fixed; + top: $header-height; + left: 0; + z-index: 10; + transition: width $layout-transition-speed; + -webkit-transition: width $layout-transition-speed; + -moz-transition: width $layout-transition-speed; + -ms-transition: width $layout-transition-speed; + -o-transition: width $layout-transition-speed; + + &.sideBarFull { + width: calc(100% - #{$sidebar-width}); + } + + &.sideBarMinimized { + width: calc(100% - #{$sidebar-minimized-width}); + } + + &.sideBarClose { + width: 100%; + } + + @media (max-width: 992px) { + width: 100% !important; + } + } + + .form-group { + &.err { + .col-form-label { + color: red !important; + } + + .form-control { + border-color: red !important; + } + + .form-text { + color: red !important; + } + } + } + + .homePageTemplate { + $elementsBG: rgba(#000, 0.7); + + .imgBox { + position: relative; + cursor: pointer; + + &:hover { + .elementTemp { + opacity: 1; + z-index: 5; + } + } + + .relativePos { + height: 100%; + } + + img { + width: 100%; + } + + .elementTemp { + width: 100%; + height: 100%; + background: $elementsBG; + position: absolute; + top: 0; + left: 0; + z-index: 1; + opacity: 0; + transition: 0.3s; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -ms-transition: 0.3s; + -o-transition: 0.3s; + + .txtBox { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + text-align: center; + + .list { + display: flex; + align-items: stretch; + } + + h2 { + margin-bottom: 15px; + } + + h2, .description { + color: #fff; + } + + a { + color: red; + } + } + } + } + + + .s1 { + margin-bottom: 50px; + + } + + .s2 { + + } + + .s4 { + margin-bottom: 40px; + } + + .s5 { + margin-bottom: 30px; + } + + aside { + section { + margin-bottom: 30px; + } + + .imgBox { + .elementTemp { + .txtBox { + width: 100%; + + h2 { + font-size: 17px; + margin-bottom: 5px; + } + + .description { + font-size: 13px !important; + } + + .list { + padding: 3px; + flex-direction: row; + flex-wrap: wrap; + justify-content: center; + + .el-select { + flex-basis: 100%; + margin-bottom: 5px; + } + } + } + } + } + + .s1-side { + + } + } + } +} + + +.btn-primary{ + background-color: #fff; + + &:hover{ + border-color: $border-panel; + } +} diff --git a/assets/admin/scss/_el_ui_rtl.scss b/assets/admin/scss/_el_ui_rtl.scss new file mode 100644 index 0000000..54419f2 --- /dev/null +++ b/assets/admin/scss/_el_ui_rtl.scss @@ -0,0 +1,292 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////////// element ui rtl fix +html:lang(fa) { + + .text-area { + textarea { + height: 100px; + } + } + + .el-popup-parent--hidden { + padding-right: 0 !important; + } + + .el-tag .el-icon-close { + right: auto !important; + left: -5px !important; + } + + .el-table .el-table__body-wrapper .el-table__row .is-left { + text-align: left !important; + } + + .wrapper { + min-height: 100vh; + } + + .el-form-item__label { + float: right !important; + text-align: right !important; + } + + .el-form-item__content { + margin-left: 0 !important; + margin-right: 120px !important; + } + + @media (max-width: 768px) { + .el-form-item__content { + margin-left: 0 !important; + margin-right: 0 !important; + } + } + + .secondTitle { + margin-top: 50px; + } + + .el-upload__input { + display: none !important; + } + + .el-message-box__title, .el-message-box__message { + direction: rtl !important; + text-align: right !important; + } + + .el-message-box__message { + padding-left: 12px !important; + padding-right: 36px !important; + } + + .el-message-box__btns { + text-align: left !important; + } + + .el-message-box__headerbtn { + right: auto !important; + left: 15px !important; + } + + .el-message-box__btns button:nth-child(2) { + margin-left: 0 !important; + margin-right: 10px !important; + } + + .el-message-box__status { + right: 0 !important; + } + + .el-table td, .el-table th { + text-align: right !important; + } + + .el-upload__input { + display: none !important; + } + + .el-checkbox__label { + padding-left: 0 !important; + padding-right: 10px !important; + } + + .el-message__icon { + margin-right: 0 !important; + margin-left: 10px !important; + } + + .sidebar-subnav { + background: rgba(0, 0, 0, 0.05) !important; + } + + .sidebar > .nav > li { + border-bottom: 1px solid #eee !important; + } + + .brand-logo p { + margin-top: 6px !important; + } + + .brand-logo-collapsed svg { + fill: #fff !important; + } + + .nav-floating { + background: #fff !important; + } + + .el-dialog__headerbtn { + right: auto !important; + left: 20px !important; + } + + .el-radio__label { + padding-right: 10px !important; + } + + .el-scrollbar__wrap { + margin-right: 0 !important; + margin-left: -17px !important; + } + + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after { + right: auto; + left: 20px; + } + + .el-select .el-tag { + margin: 2px 6px 2px 0; + } + + .el-select__input { + border: none; + outline: 0; + padding: 0; + margin-left: 15px; + color: #666; + font-size: 14px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + height: 28px; + background-color: transparent; + margin-right: 5%; + } + + .el-pagination .btn-next .el-icon, .el-pagination .btn-prev .el-icon { + display: block; + font-size: 12px; + font-weight: 700; + transform: scaleX(-1); + } + + .el-pagination { + white-space: nowrap; + padding: 2px 5px; + padding-right: 5px; + padding-left: 5px; + color: #303133; + font-weight: 700; + display: contents; + } + + .el-upload--picture-card { + background-color: #fbfdff; + border: 1px dashed #c0ccda; + border-radius: 6px; + box-sizing: border-box; + width: 148px; + height: 148px; + line-height: 146px; + vertical-align: top; + margin-right: 8px; + } + + .el-upload-list__item .el-icon-close-tip { + font-size: 12px; + cursor: pointer; + opacity: 1; + color: #409EFF; + } + + .el-tree-node__content > .el-tree-node__expand-icon { + padding: 6px; + transform: scaleX(-1); + } + + .el-tree-node__content { + display: flex; + align-items: center; + height: 40px; + cursor: pointer; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + margin-top: 10px; + margin-bottom: 10px; + padding-left: 0px !important; + } + + .el-tree-node > .el-tree-node__children { + overflow: visible; + background-color: transparent; + margin-right: 10px; + } + + .custom-tree-node { + display: block; + flex-basis: 100%; + position: relative; + + .btns { + display: inline-block; + position: absolute; + left: 5px; + top: 50%; + transform: translateY(-50%); + } + + .flagType { + display: inline-block; + position: absolute; + right: 50%; + top: 50%; + transform: translateY(-50%); + } + + } + + .el-button + .el-button { + margin-left: 0px; + } + + .el-tree-node__expand-icon.expanded { + transform: rotate(90deg) !important; + } + + .title{ + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + } + + .avatar-uploader{ + display: flex; + justify-content: center; + } + + .avatar-uploader .el-upload{ + background-color: #fff; + border: 1px dashed #d9d9d9; + border-radius: 6px; + box-sizing: border-box; + width: 360px; + height: 180px; + text-align: center; + justify-content: center; + display: flex; + align-items: center; +} + .avatar-uploader .el-upload:hover { + border-color: #409EFF; + } + .avatar-uploader-icon { + font-size: 28px; + color: #8c939d; + } + .avatar { + width: 100%; + display: block; + } + + .el-upload-list--picture-card .el-upload-list__item{ + overflow: hidden; + background-color: #fff; + border: 1px solid #c0ccda; + border-radius: 6px; + box-sizing: border-box; + width: 148px; + height: auto; + margin: 0 8px 8px 0; + display: inline-block; + } +} diff --git a/assets/admin/scss/_variables.scss b/assets/admin/scss/_variables.scss new file mode 100644 index 0000000..96cb549 --- /dev/null +++ b/assets/admin/scss/_variables.scss @@ -0,0 +1,5 @@ +// Variable overrides +$gray-base: #1a1e24; +$gray-panel: #e2e6ea; +$gray1-panel: #212529; +$border-panel: #ced4da; diff --git a/assets/admin/scss/style.scss b/assets/admin/scss/style.scss new file mode 100644 index 0000000..e6999f6 --- /dev/null +++ b/assets/admin/scss/style.scss @@ -0,0 +1,46 @@ +// If you want to override variables do it here +@import "variables"; + +// Import styles +@import "~@coreui/coreui/scss/coreui"; + +// If you want to add something do it here +@import "custom"; +@import "el_ui_rtl"; + +.card-header:not(.content-center) > .c-icon:first-child { + margin-right: 0.1rem; + margin-top: 0.1rem; + vertical-align: top; + width: 1.2rem; + height: 1.2rem; + font-size: 1.2rem; +} + +// span { + // color: black; +// } + +p { + color: black; +} + +.mainLink{ + color: #000000; + + transition: 0.3s; + &:hover{ + text-decoration: none; + color: blue; + } +} + +.numberMain{ + font-size: large; + color: red; +} + +.descMain{ + margin-right: 4px; + //font-size: medium; +} diff --git a/assets/css/bootstrap-grid.css b/assets/css/bootstrap-grid.css new file mode 100644 index 0000000..a6c9575 --- /dev/null +++ b/assets/css/bootstrap-grid.css @@ -0,0 +1,5014 @@ +/*! + * Bootstrap Grid v5.0.0-beta1 (https://getbootstrap.com/) + * Copyright 2011-2020 The Bootstrap Authors + * Copyright 2011-2020 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm{ + width: 100%; + box-sizing: border-box; + padding-right: var(--bs-gutter-x, 0.75rem); + padding-left: var(--bs-gutter-x, 0.75rem); + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px){ + .container-sm, .container{ + max-width: 540px; + } +} + +@media (min-width: 768px){ + .container-md, .container-sm, .container{ + max-width: 720px; + } +} + +@media (min-width: 992px){ + .container-lg, .container-md, .container-sm, .container{ + max-width: 960px; + } +} + +@media (min-width: 1200px){ + .container-xl, .container-lg, .container-md, .container-sm, .container{ + max-width: 1140px; + } +} + +@media (min-width: 1400px){ + .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container{ + max-width: 1320px; + } +} + +.row{ + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(var(--bs-gutter-y) * -1); + margin-right: calc(var(--bs-gutter-x) / -2); + margin-left: calc(var(--bs-gutter-x) / -2); +} + +.row > *{ + box-sizing: border-box; + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) / 2); + padding-left: calc(var(--bs-gutter-x) / 2); + margin-top: var(--bs-gutter-y); +} + +.col{ + flex: 1 0 0%; +} + +.row-cols-auto > *{ + flex: 0 0 auto; + width: auto; +} + +.row-cols-1 > *{ + flex: 0 0 auto; + width: 100%; +} + +.row-cols-2 > *{ + flex: 0 0 auto; + width: 50%; +} + +.row-cols-3 > *{ + flex: 0 0 auto; + width: 33.3333333333%; +} + +.row-cols-4 > *{ + flex: 0 0 auto; + width: 25%; +} + +.row-cols-5 > *{ + flex: 0 0 auto; + width: 20%; +} + +.row-cols-6 > *{ + flex: 0 0 auto; + width: 16.6666666667%; +} + +.col-auto{ + flex: 0 0 auto; + width: auto; +} + +.col-1{ + flex: 0 0 auto; + width: 8.3333333333%; +} + +.col-2{ + flex: 0 0 auto; + width: 16.6666666667%; +} + +.col-3{ + flex: 0 0 auto; + width: 25%; +} + +.col-4{ + flex: 0 0 auto; + width: 33.3333333333%; +} + +.col-5{ + flex: 0 0 auto; + width: 41.6666666667%; +} + +.col-6{ + flex: 0 0 auto; + width: 50%; +} + +.col-7{ + flex: 0 0 auto; + width: 58.3333333333%; +} + +.col-8{ + flex: 0 0 auto; + width: 66.6666666667%; +} + +.col-9{ + flex: 0 0 auto; + width: 75%; +} + +.col-10{ + flex: 0 0 auto; + width: 83.3333333333%; +} + +.col-11{ + flex: 0 0 auto; + width: 91.6666666667%; +} + +.col-12{ + flex: 0 0 auto; + width: 100%; +} + +.offset-1{ + margin-left: 8.3333333333%; +} + +.offset-2{ + margin-left: 16.6666666667%; +} + +.offset-3{ + margin-left: 25%; +} + +.offset-4{ + margin-left: 33.3333333333%; +} + +.offset-5{ + margin-left: 41.6666666667%; +} + +.offset-6{ + margin-left: 50%; +} + +.offset-7{ + margin-left: 58.3333333333%; +} + +.offset-8{ + margin-left: 66.6666666667%; +} + +.offset-9{ + margin-left: 75%; +} + +.offset-10{ + margin-left: 83.3333333333%; +} + +.offset-11{ + margin-left: 91.6666666667%; +} + +.g-0, +.gx-0{ + --bs-gutter-x: 0; +} + +.g-0, +.gy-0{ + --bs-gutter-y: 0; +} + +.g-1, +.gx-1{ + --bs-gutter-x: 0.25rem; +} + +.g-1, +.gy-1{ + --bs-gutter-y: 0.25rem; +} + +.g-2, +.gx-2{ + --bs-gutter-x: 0.5rem; +} + +.g-2, +.gy-2{ + --bs-gutter-y: 0.5rem; +} + +.g-3, +.gx-3{ + --bs-gutter-x: 1rem; +} + +.g-3, +.gy-3{ + --bs-gutter-y: 1rem; +} + +.g-4, +.gx-4{ + --bs-gutter-x: 1.5rem; +} + +.g-4, +.gy-4{ + --bs-gutter-y: 1.5rem; +} + +.g-5, +.gx-5{ + --bs-gutter-x: 3rem; +} + +.g-5, +.gy-5{ + --bs-gutter-y: 3rem; +} + +@media (min-width: 576px){ + .col-sm{ + flex: 1 0 0%; + } + + .row-cols-sm-auto > *{ + flex: 0 0 auto; + width: auto; + } + + .row-cols-sm-1 > *{ + flex: 0 0 auto; + width: 100%; + } + + .row-cols-sm-2 > *{ + flex: 0 0 auto; + width: 50%; + } + + .row-cols-sm-3 > *{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-sm-4 > *{ + flex: 0 0 auto; + width: 25%; + } + + .row-cols-sm-5 > *{ + flex: 0 0 auto; + width: 20%; + } + + .row-cols-sm-6 > *{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-sm-auto{ + flex: 0 0 auto; + width: auto; + } + + .col-sm-1{ + flex: 0 0 auto; + width: 8.3333333333%; + } + + .col-sm-2{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-sm-3{ + flex: 0 0 auto; + width: 25%; + } + + .col-sm-4{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .col-sm-5{ + flex: 0 0 auto; + width: 41.6666666667%; + } + + .col-sm-6{ + flex: 0 0 auto; + width: 50%; + } + + .col-sm-7{ + flex: 0 0 auto; + width: 58.3333333333%; + } + + .col-sm-8{ + flex: 0 0 auto; + width: 66.6666666667%; + } + + .col-sm-9{ + flex: 0 0 auto; + width: 75%; + } + + .col-sm-10{ + flex: 0 0 auto; + width: 83.3333333333%; + } + + .col-sm-11{ + flex: 0 0 auto; + width: 91.6666666667%; + } + + .col-sm-12{ + flex: 0 0 auto; + width: 100%; + } + + .offset-sm-0{ + margin-left: 0; + } + + .offset-sm-1{ + margin-left: 8.3333333333%; + } + + .offset-sm-2{ + margin-left: 16.6666666667%; + } + + .offset-sm-3{ + margin-left: 25%; + } + + .offset-sm-4{ + margin-left: 33.3333333333%; + } + + .offset-sm-5{ + margin-left: 41.6666666667%; + } + + .offset-sm-6{ + margin-left: 50%; + } + + .offset-sm-7{ + margin-left: 58.3333333333%; + } + + .offset-sm-8{ + margin-left: 66.6666666667%; + } + + .offset-sm-9{ + margin-left: 75%; + } + + .offset-sm-10{ + margin-left: 83.3333333333%; + } + + .offset-sm-11{ + margin-left: 91.6666666667%; + } + + .g-sm-0, + .gx-sm-0{ + --bs-gutter-x: 0; + } + + .g-sm-0, + .gy-sm-0{ + --bs-gutter-y: 0; + } + + .g-sm-1, + .gx-sm-1{ + --bs-gutter-x: 0.25rem; + } + + .g-sm-1, + .gy-sm-1{ + --bs-gutter-y: 0.25rem; + } + + .g-sm-2, + .gx-sm-2{ + --bs-gutter-x: 0.5rem; + } + + .g-sm-2, + .gy-sm-2{ + --bs-gutter-y: 0.5rem; + } + + .g-sm-3, + .gx-sm-3{ + --bs-gutter-x: 1rem; + } + + .g-sm-3, + .gy-sm-3{ + --bs-gutter-y: 1rem; + } + + .g-sm-4, + .gx-sm-4{ + --bs-gutter-x: 1.5rem; + } + + .g-sm-4, + .gy-sm-4{ + --bs-gutter-y: 1.5rem; + } + + .g-sm-5, + .gx-sm-5{ + --bs-gutter-x: 3rem; + } + + .g-sm-5, + .gy-sm-5{ + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 768px){ + .col-md{ + flex: 1 0 0%; + } + + .row-cols-md-auto > *{ + flex: 0 0 auto; + width: auto; + } + + .row-cols-md-1 > *{ + flex: 0 0 auto; + width: 100%; + } + + .row-cols-md-2 > *{ + flex: 0 0 auto; + width: 50%; + } + + .row-cols-md-3 > *{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-md-4 > *{ + flex: 0 0 auto; + width: 25%; + } + + .row-cols-md-5 > *{ + flex: 0 0 auto; + width: 20%; + } + + .row-cols-md-6 > *{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-md-auto{ + flex: 0 0 auto; + width: auto; + } + + .col-md-1{ + flex: 0 0 auto; + width: 8.3333333333%; + } + + .col-md-2{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-md-3{ + flex: 0 0 auto; + width: 25%; + } + + .col-md-4{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .col-md-5{ + flex: 0 0 auto; + width: 41.6666666667%; + } + + .col-md-6{ + flex: 0 0 auto; + width: 50%; + } + + .col-md-7{ + flex: 0 0 auto; + width: 58.3333333333%; + } + + .col-md-8{ + flex: 0 0 auto; + width: 66.6666666667%; + } + + .col-md-9{ + flex: 0 0 auto; + width: 75%; + } + + .col-md-10{ + flex: 0 0 auto; + width: 83.3333333333%; + } + + .col-md-11{ + flex: 0 0 auto; + width: 91.6666666667%; + } + + .col-md-12{ + flex: 0 0 auto; + width: 100%; + } + + .offset-md-0{ + margin-left: 0; + } + + .offset-md-1{ + margin-left: 8.3333333333%; + } + + .offset-md-2{ + margin-left: 16.6666666667%; + } + + .offset-md-3{ + margin-left: 25%; + } + + .offset-md-4{ + margin-left: 33.3333333333%; + } + + .offset-md-5{ + margin-left: 41.6666666667%; + } + + .offset-md-6{ + margin-left: 50%; + } + + .offset-md-7{ + margin-left: 58.3333333333%; + } + + .offset-md-8{ + margin-left: 66.6666666667%; + } + + .offset-md-9{ + margin-left: 75%; + } + + .offset-md-10{ + margin-left: 83.3333333333%; + } + + .offset-md-11{ + margin-left: 91.6666666667%; + } + + .g-md-0, + .gx-md-0{ + --bs-gutter-x: 0; + } + + .g-md-0, + .gy-md-0{ + --bs-gutter-y: 0; + } + + .g-md-1, + .gx-md-1{ + --bs-gutter-x: 0.25rem; + } + + .g-md-1, + .gy-md-1{ + --bs-gutter-y: 0.25rem; + } + + .g-md-2, + .gx-md-2{ + --bs-gutter-x: 0.5rem; + } + + .g-md-2, + .gy-md-2{ + --bs-gutter-y: 0.5rem; + } + + .g-md-3, + .gx-md-3{ + --bs-gutter-x: 1rem; + } + + .g-md-3, + .gy-md-3{ + --bs-gutter-y: 1rem; + } + + .g-md-4, + .gx-md-4{ + --bs-gutter-x: 1.5rem; + } + + .g-md-4, + .gy-md-4{ + --bs-gutter-y: 1.5rem; + } + + .g-md-5, + .gx-md-5{ + --bs-gutter-x: 3rem; + } + + .g-md-5, + .gy-md-5{ + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 992px){ + .col-lg{ + flex: 1 0 0%; + } + + .row-cols-lg-auto > *{ + flex: 0 0 auto; + width: auto; + } + + .row-cols-lg-1 > *{ + flex: 0 0 auto; + width: 100%; + } + + .row-cols-lg-2 > *{ + flex: 0 0 auto; + width: 50%; + } + + .row-cols-lg-3 > *{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-lg-4 > *{ + flex: 0 0 auto; + width: 25%; + } + + .row-cols-lg-5 > *{ + flex: 0 0 auto; + width: 20%; + } + + .row-cols-lg-6 > *{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-lg-auto{ + flex: 0 0 auto; + width: auto; + } + + .col-lg-1{ + flex: 0 0 auto; + width: 8.3333333333%; + } + + .col-lg-2{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-lg-3{ + flex: 0 0 auto; + width: 25%; + } + + .col-lg-4{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .col-lg-5{ + flex: 0 0 auto; + width: 41.6666666667%; + } + + .col-lg-6{ + flex: 0 0 auto; + width: 50%; + } + + .col-lg-7{ + flex: 0 0 auto; + width: 58.3333333333%; + } + + .col-lg-8{ + flex: 0 0 auto; + width: 66.6666666667%; + } + + .col-lg-9{ + flex: 0 0 auto; + width: 75%; + } + + .col-lg-10{ + flex: 0 0 auto; + width: 83.3333333333%; + } + + .col-lg-11{ + flex: 0 0 auto; + width: 91.6666666667%; + } + + .col-lg-12{ + flex: 0 0 auto; + width: 100%; + } + + .offset-lg-0{ + margin-left: 0; + } + + .offset-lg-1{ + margin-left: 8.3333333333%; + } + + .offset-lg-2{ + margin-left: 16.6666666667%; + } + + .offset-lg-3{ + margin-left: 25%; + } + + .offset-lg-4{ + margin-left: 33.3333333333%; + } + + .offset-lg-5{ + margin-left: 41.6666666667%; + } + + .offset-lg-6{ + margin-left: 50%; + } + + .offset-lg-7{ + margin-left: 58.3333333333%; + } + + .offset-lg-8{ + margin-left: 66.6666666667%; + } + + .offset-lg-9{ + margin-left: 75%; + } + + .offset-lg-10{ + margin-left: 83.3333333333%; + } + + .offset-lg-11{ + margin-left: 91.6666666667%; + } + + .g-lg-0, + .gx-lg-0{ + --bs-gutter-x: 0; + } + + .g-lg-0, + .gy-lg-0{ + --bs-gutter-y: 0; + } + + .g-lg-1, + .gx-lg-1{ + --bs-gutter-x: 0.25rem; + } + + .g-lg-1, + .gy-lg-1{ + --bs-gutter-y: 0.25rem; + } + + .g-lg-2, + .gx-lg-2{ + --bs-gutter-x: 0.5rem; + } + + .g-lg-2, + .gy-lg-2{ + --bs-gutter-y: 0.5rem; + } + + .g-lg-3, + .gx-lg-3{ + --bs-gutter-x: 1rem; + } + + .g-lg-3, + .gy-lg-3{ + --bs-gutter-y: 1rem; + } + + .g-lg-4, + .gx-lg-4{ + --bs-gutter-x: 1.5rem; + } + + .g-lg-4, + .gy-lg-4{ + --bs-gutter-y: 1.5rem; + } + + .g-lg-5, + .gx-lg-5{ + --bs-gutter-x: 3rem; + } + + .g-lg-5, + .gy-lg-5{ + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 1200px){ + .col-xl{ + flex: 1 0 0%; + } + + .row-cols-xl-auto > *{ + flex: 0 0 auto; + width: auto; + } + + .row-cols-xl-1 > *{ + flex: 0 0 auto; + width: 100%; + } + + .row-cols-xl-2 > *{ + flex: 0 0 auto; + width: 50%; + } + + .row-cols-xl-3 > *{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-xl-4 > *{ + flex: 0 0 auto; + width: 25%; + } + + .row-cols-xl-5 > *{ + flex: 0 0 auto; + width: 20%; + } + + .row-cols-xl-6 > *{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-xl-auto{ + flex: 0 0 auto; + width: auto; + } + + .col-xl-1{ + flex: 0 0 auto; + width: 8.3333333333%; + } + + .col-xl-2{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-xl-3{ + flex: 0 0 auto; + width: 25%; + } + + .col-xl-4{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .col-xl-5{ + flex: 0 0 auto; + width: 41.6666666667%; + } + + .col-xl-6{ + flex: 0 0 auto; + width: 50%; + } + + .col-xl-7{ + flex: 0 0 auto; + width: 58.3333333333%; + } + + .col-xl-8{ + flex: 0 0 auto; + width: 66.6666666667%; + } + + .col-xl-9{ + flex: 0 0 auto; + width: 75%; + } + + .col-xl-10{ + flex: 0 0 auto; + width: 83.3333333333%; + } + + .col-xl-11{ + flex: 0 0 auto; + width: 91.6666666667%; + } + + .col-xl-12{ + flex: 0 0 auto; + width: 100%; + } + + .offset-xl-0{ + margin-left: 0; + } + + .offset-xl-1{ + margin-left: 8.3333333333%; + } + + .offset-xl-2{ + margin-left: 16.6666666667%; + } + + .offset-xl-3{ + margin-left: 25%; + } + + .offset-xl-4{ + margin-left: 33.3333333333%; + } + + .offset-xl-5{ + margin-left: 41.6666666667%; + } + + .offset-xl-6{ + margin-left: 50%; + } + + .offset-xl-7{ + margin-left: 58.3333333333%; + } + + .offset-xl-8{ + margin-left: 66.6666666667%; + } + + .offset-xl-9{ + margin-left: 75%; + } + + .offset-xl-10{ + margin-left: 83.3333333333%; + } + + .offset-xl-11{ + margin-left: 91.6666666667%; + } + + .g-xl-0, + .gx-xl-0{ + --bs-gutter-x: 0; + } + + .g-xl-0, + .gy-xl-0{ + --bs-gutter-y: 0; + } + + .g-xl-1, + .gx-xl-1{ + --bs-gutter-x: 0.25rem; + } + + .g-xl-1, + .gy-xl-1{ + --bs-gutter-y: 0.25rem; + } + + .g-xl-2, + .gx-xl-2{ + --bs-gutter-x: 0.5rem; + } + + .g-xl-2, + .gy-xl-2{ + --bs-gutter-y: 0.5rem; + } + + .g-xl-3, + .gx-xl-3{ + --bs-gutter-x: 1rem; + } + + .g-xl-3, + .gy-xl-3{ + --bs-gutter-y: 1rem; + } + + .g-xl-4, + .gx-xl-4{ + --bs-gutter-x: 1.5rem; + } + + .g-xl-4, + .gy-xl-4{ + --bs-gutter-y: 1.5rem; + } + + .g-xl-5, + .gx-xl-5{ + --bs-gutter-x: 3rem; + } + + .g-xl-5, + .gy-xl-5{ + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 1400px){ + .col-xxl{ + flex: 1 0 0%; + } + + .row-cols-xxl-auto > *{ + flex: 0 0 auto; + width: auto; + } + + .row-cols-xxl-1 > *{ + flex: 0 0 auto; + width: 100%; + } + + .row-cols-xxl-2 > *{ + flex: 0 0 auto; + width: 50%; + } + + .row-cols-xxl-3 > *{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-xxl-4 > *{ + flex: 0 0 auto; + width: 25%; + } + + .row-cols-xxl-5 > *{ + flex: 0 0 auto; + width: 20%; + } + + .row-cols-xxl-6 > *{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-xxl-auto{ + flex: 0 0 auto; + width: auto; + } + + .col-xxl-1{ + flex: 0 0 auto; + width: 8.3333333333%; + } + + .col-xxl-2{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-xxl-3{ + flex: 0 0 auto; + width: 25%; + } + + .col-xxl-4{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .col-xxl-5{ + flex: 0 0 auto; + width: 41.6666666667%; + } + + .col-xxl-6{ + flex: 0 0 auto; + width: 50%; + } + + .col-xxl-7{ + flex: 0 0 auto; + width: 58.3333333333%; + } + + .col-xxl-8{ + flex: 0 0 auto; + width: 66.6666666667%; + } + + .col-xxl-9{ + flex: 0 0 auto; + width: 75%; + } + + .col-xxl-10{ + flex: 0 0 auto; + width: 83.3333333333%; + } + + .col-xxl-11{ + flex: 0 0 auto; + width: 91.6666666667%; + } + + .col-xxl-12{ + flex: 0 0 auto; + width: 100%; + } + + .offset-xxl-0{ + margin-left: 0; + } + + .offset-xxl-1{ + margin-left: 8.3333333333%; + } + + .offset-xxl-2{ + margin-left: 16.6666666667%; + } + + .offset-xxl-3{ + margin-left: 25%; + } + + .offset-xxl-4{ + margin-left: 33.3333333333%; + } + + .offset-xxl-5{ + margin-left: 41.6666666667%; + } + + .offset-xxl-6{ + margin-left: 50%; + } + + .offset-xxl-7{ + margin-left: 58.3333333333%; + } + + .offset-xxl-8{ + margin-left: 66.6666666667%; + } + + .offset-xxl-9{ + margin-left: 75%; + } + + .offset-xxl-10{ + margin-left: 83.3333333333%; + } + + .offset-xxl-11{ + margin-left: 91.6666666667%; + } + + .g-xxl-0, + .gx-xxl-0{ + --bs-gutter-x: 0; + } + + .g-xxl-0, + .gy-xxl-0{ + --bs-gutter-y: 0; + } + + .g-xxl-1, + .gx-xxl-1{ + --bs-gutter-x: 0.25rem; + } + + .g-xxl-1, + .gy-xxl-1{ + --bs-gutter-y: 0.25rem; + } + + .g-xxl-2, + .gx-xxl-2{ + --bs-gutter-x: 0.5rem; + } + + .g-xxl-2, + .gy-xxl-2{ + --bs-gutter-y: 0.5rem; + } + + .g-xxl-3, + .gx-xxl-3{ + --bs-gutter-x: 1rem; + } + + .g-xxl-3, + .gy-xxl-3{ + --bs-gutter-y: 1rem; + } + + .g-xxl-4, + .gx-xxl-4{ + --bs-gutter-x: 1.5rem; + } + + .g-xxl-4, + .gy-xxl-4{ + --bs-gutter-y: 1.5rem; + } + + .g-xxl-5, + .gx-xxl-5{ + --bs-gutter-x: 3rem; + } + + .g-xxl-5, + .gy-xxl-5{ + --bs-gutter-y: 3rem; + } +} + +.d-inline{ + display: inline !important; +} + +.d-inline-block{ + display: inline-block !important; +} + +.d-block{ + display: block !important; +} + +.d-grid{ + display: grid !important; +} + +.d-table{ + display: table !important; +} + +.d-table-row{ + display: table-row !important; +} + +.d-table-cell{ + display: table-cell !important; +} + +.d-flex{ + display: flex !important; +} + +.d-inline-flex{ + display: inline-flex !important; +} + +.d-none{ + display: none !important; +} + +.flex-fill{ + flex: 1 1 auto !important; +} + +.flex-row{ + flex-direction: row !important; +} + +.flex-column{ + flex-direction: column !important; +} + +.flex-row-reverse{ + flex-direction: row-reverse !important; +} + +.flex-column-reverse{ + flex-direction: column-reverse !important; +} + +.flex-grow-0{ + flex-grow: 0 !important; +} + +.flex-grow-1{ + flex-grow: 1 !important; +} + +.flex-shrink-0{ + flex-shrink: 0 !important; +} + +.flex-shrink-1{ + flex-shrink: 1 !important; +} + +.flex-wrap{ + flex-wrap: wrap !important; +} + +.flex-nowrap{ + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse{ + flex-wrap: wrap-reverse !important; +} + +.justify-content-start{ + justify-content: flex-start !important; +} + +.justify-content-end{ + justify-content: flex-end !important; +} + +.justify-content-center{ + justify-content: center !important; +} + +.justify-content-between{ + justify-content: space-between !important; +} + +.justify-content-around{ + justify-content: space-around !important; +} + +.justify-content-evenly{ + justify-content: space-evenly !important; +} + +.align-items-start{ + align-items: flex-start !important; +} + +.align-items-end{ + align-items: flex-end !important; +} + +.align-items-center{ + align-items: center !important; +} + +.align-items-baseline{ + align-items: baseline !important; +} + +.align-items-stretch{ + align-items: stretch !important; +} + +.align-content-start{ + align-content: flex-start !important; +} + +.align-content-end{ + align-content: flex-end !important; +} + +.align-content-center{ + align-content: center !important; +} + +.align-content-between{ + align-content: space-between !important; +} + +.align-content-around{ + align-content: space-around !important; +} + +.align-content-stretch{ + align-content: stretch !important; +} + +.align-self-auto{ + align-self: auto !important; +} + +.align-self-start{ + align-self: flex-start !important; +} + +.align-self-end{ + align-self: flex-end !important; +} + +.align-self-center{ + align-self: center !important; +} + +.align-self-baseline{ + align-self: baseline !important; +} + +.align-self-stretch{ + align-self: stretch !important; +} + +.order-first{ + order: -1 !important; +} + +.order-0{ + order: 0 !important; +} + +.order-1{ + order: 1 !important; +} + +.order-2{ + order: 2 !important; +} + +.order-3{ + order: 3 !important; +} + +.order-4{ + order: 4 !important; +} + +.order-5{ + order: 5 !important; +} + +.order-last{ + order: 6 !important; +} + +.m-0{ + margin: 0 !important; +} + +.m-1{ + margin: 0.25rem !important; +} + +.m-2{ + margin: 0.5rem !important; +} + +.m-3{ + margin: 1rem !important; +} + +.m-4{ + margin: 1.5rem !important; +} + +.m-5{ + margin: 3rem !important; +} + +.m-auto{ + margin: auto !important; +} + +.mx-0{ + margin-right: 0 !important; + margin-left: 0 !important; +} + +.mx-1{ + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} + +.mx-2{ + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} + +.mx-3{ + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.mx-4{ + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.mx-5{ + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.mx-auto{ + margin-right: auto !important; + margin-left: auto !important; +} + +.my-0{ + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.my-1{ + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.my-2{ + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.my-3{ + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.my-4{ + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.my-5{ + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.my-auto{ + margin-top: auto !important; + margin-bottom: auto !important; +} + +.mt-0{ + margin-top: 0 !important; +} + +.mt-1{ + margin-top: 0.25rem !important; +} + +.mt-2{ + margin-top: 0.5rem !important; +} + +.mt-3{ + margin-top: 1rem !important; +} + +.mt-4{ + margin-top: 1.5rem !important; +} + +.mt-5{ + margin-top: 3rem !important; +} + +.mt-auto{ + margin-top: auto !important; +} + +.me-0{ + margin-right: 0 !important; +} + +.me-1{ + margin-right: 0.25rem !important; +} + +.me-2{ + margin-right: 0.5rem !important; +} + +.me-3{ + margin-right: 1rem !important; +} + +.me-4{ + margin-right: 1.5rem !important; +} + +.me-5{ + margin-right: 3rem !important; +} + +.me-auto{ + margin-right: auto !important; +} + +.mb-0{ + margin-bottom: 0 !important; +} + +.mb-1{ + margin-bottom: 0.25rem !important; +} + +.mb-2{ + margin-bottom: 0.5rem !important; +} + +.mb-3{ + margin-bottom: 1rem !important; +} + +.mb-4{ + margin-bottom: 1.5rem !important; +} + +.mb-5{ + margin-bottom: 3rem !important; +} + +.mb-auto{ + margin-bottom: auto !important; +} + +.ms-0{ + margin-left: 0 !important; +} + +.ms-1{ + margin-left: 0.25rem !important; +} + +.ms-2{ + margin-left: 0.5rem !important; +} + +.ms-3{ + margin-left: 1rem !important; +} + +.ms-4{ + margin-left: 1.5rem !important; +} + +.ms-5{ + margin-left: 3rem !important; +} + +.ms-auto{ + margin-left: auto !important; +} + +.p-0{ + padding: 0 !important; +} + +.p-1{ + padding: 0.25rem !important; +} + +.p-2{ + padding: 0.5rem !important; +} + +.p-3{ + padding: 1rem !important; +} + +.p-4{ + padding: 1.5rem !important; +} + +.p-5{ + padding: 3rem !important; +} + +.px-0{ + padding-right: 0 !important; + padding-left: 0 !important; +} + +.px-1{ + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} + +.px-2{ + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} + +.px-3{ + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.px-4{ + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.px-5{ + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.py-0{ + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.py-1{ + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.py-2{ + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.py-3{ + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.py-4{ + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.py-5{ + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.pt-0{ + padding-top: 0 !important; +} + +.pt-1{ + padding-top: 0.25rem !important; +} + +.pt-2{ + padding-top: 0.5rem !important; +} + +.pt-3{ + padding-top: 1rem !important; +} + +.pt-4{ + padding-top: 1.5rem !important; +} + +.pt-5{ + padding-top: 3rem !important; +} + +.pe-0{ + padding-right: 0 !important; +} + +.pe-1{ + padding-right: 0.25rem !important; +} + +.pe-2{ + padding-right: 0.5rem !important; +} + +.pe-3{ + padding-right: 1rem !important; +} + +.pe-4{ + padding-right: 1.5rem !important; +} + +.pe-5{ + padding-right: 3rem !important; +} + +.pb-0{ + padding-bottom: 0 !important; +} + +.pb-1{ + padding-bottom: 0.25rem !important; +} + +.pb-2{ + padding-bottom: 0.5rem !important; +} + +.pb-3{ + padding-bottom: 1rem !important; +} + +.pb-4{ + padding-bottom: 1.5rem !important; +} + +.pb-5{ + padding-bottom: 3rem !important; +} + +.ps-0{ + padding-left: 0 !important; +} + +.ps-1{ + padding-left: 0.25rem !important; +} + +.ps-2{ + padding-left: 0.5rem !important; +} + +.ps-3{ + padding-left: 1rem !important; +} + +.ps-4{ + padding-left: 1.5rem !important; +} + +.ps-5{ + padding-left: 3rem !important; +} + +@media (min-width: 576px){ + .d-sm-inline{ + display: inline !important; + } + + .d-sm-inline-block{ + display: inline-block !important; + } + + .d-sm-block{ + display: block !important; + } + + .d-sm-grid{ + display: grid !important; + } + + .d-sm-table{ + display: table !important; + } + + .d-sm-table-row{ + display: table-row !important; + } + + .d-sm-table-cell{ + display: table-cell !important; + } + + .d-sm-flex{ + display: flex !important; + } + + .d-sm-inline-flex{ + display: inline-flex !important; + } + + .d-sm-none{ + display: none !important; + } + + .flex-sm-fill{ + flex: 1 1 auto !important; + } + + .flex-sm-row{ + flex-direction: row !important; + } + + .flex-sm-column{ + flex-direction: column !important; + } + + .flex-sm-row-reverse{ + flex-direction: row-reverse !important; + } + + .flex-sm-column-reverse{ + flex-direction: column-reverse !important; + } + + .flex-sm-grow-0{ + flex-grow: 0 !important; + } + + .flex-sm-grow-1{ + flex-grow: 1 !important; + } + + .flex-sm-shrink-0{ + flex-shrink: 0 !important; + } + + .flex-sm-shrink-1{ + flex-shrink: 1 !important; + } + + .flex-sm-wrap{ + flex-wrap: wrap !important; + } + + .flex-sm-nowrap{ + flex-wrap: nowrap !important; + } + + .flex-sm-wrap-reverse{ + flex-wrap: wrap-reverse !important; + } + + .justify-content-sm-start{ + justify-content: flex-start !important; + } + + .justify-content-sm-end{ + justify-content: flex-end !important; + } + + .justify-content-sm-center{ + justify-content: center !important; + } + + .justify-content-sm-between{ + justify-content: space-between !important; + } + + .justify-content-sm-around{ + justify-content: space-around !important; + } + + .justify-content-sm-evenly{ + justify-content: space-evenly !important; + } + + .align-items-sm-start{ + align-items: flex-start !important; + } + + .align-items-sm-end{ + align-items: flex-end !important; + } + + .align-items-sm-center{ + align-items: center !important; + } + + .align-items-sm-baseline{ + align-items: baseline !important; + } + + .align-items-sm-stretch{ + align-items: stretch !important; + } + + .align-content-sm-start{ + align-content: flex-start !important; + } + + .align-content-sm-end{ + align-content: flex-end !important; + } + + .align-content-sm-center{ + align-content: center !important; + } + + .align-content-sm-between{ + align-content: space-between !important; + } + + .align-content-sm-around{ + align-content: space-around !important; + } + + .align-content-sm-stretch{ + align-content: stretch !important; + } + + .align-self-sm-auto{ + align-self: auto !important; + } + + .align-self-sm-start{ + align-self: flex-start !important; + } + + .align-self-sm-end{ + align-self: flex-end !important; + } + + .align-self-sm-center{ + align-self: center !important; + } + + .align-self-sm-baseline{ + align-self: baseline !important; + } + + .align-self-sm-stretch{ + align-self: stretch !important; + } + + .order-sm-first{ + order: -1 !important; + } + + .order-sm-0{ + order: 0 !important; + } + + .order-sm-1{ + order: 1 !important; + } + + .order-sm-2{ + order: 2 !important; + } + + .order-sm-3{ + order: 3 !important; + } + + .order-sm-4{ + order: 4 !important; + } + + .order-sm-5{ + order: 5 !important; + } + + .order-sm-last{ + order: 6 !important; + } + + .m-sm-0{ + margin: 0 !important; + } + + .m-sm-1{ + margin: 0.25rem !important; + } + + .m-sm-2{ + margin: 0.5rem !important; + } + + .m-sm-3{ + margin: 1rem !important; + } + + .m-sm-4{ + margin: 1.5rem !important; + } + + .m-sm-5{ + margin: 3rem !important; + } + + .m-sm-auto{ + margin: auto !important; + } + + .mx-sm-0{ + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-sm-1{ + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-sm-2{ + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-sm-3{ + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-sm-4{ + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-sm-5{ + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-sm-auto{ + margin-right: auto !important; + margin-left: auto !important; + } + + .my-sm-0{ + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-sm-1{ + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-sm-2{ + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-sm-3{ + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-sm-4{ + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-sm-5{ + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-sm-auto{ + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-sm-0{ + margin-top: 0 !important; + } + + .mt-sm-1{ + margin-top: 0.25rem !important; + } + + .mt-sm-2{ + margin-top: 0.5rem !important; + } + + .mt-sm-3{ + margin-top: 1rem !important; + } + + .mt-sm-4{ + margin-top: 1.5rem !important; + } + + .mt-sm-5{ + margin-top: 3rem !important; + } + + .mt-sm-auto{ + margin-top: auto !important; + } + + .me-sm-0{ + margin-right: 0 !important; + } + + .me-sm-1{ + margin-right: 0.25rem !important; + } + + .me-sm-2{ + margin-right: 0.5rem !important; + } + + .me-sm-3{ + margin-right: 1rem !important; + } + + .me-sm-4{ + margin-right: 1.5rem !important; + } + + .me-sm-5{ + margin-right: 3rem !important; + } + + .me-sm-auto{ + margin-right: auto !important; + } + + .mb-sm-0{ + margin-bottom: 0 !important; + } + + .mb-sm-1{ + margin-bottom: 0.25rem !important; + } + + .mb-sm-2{ + margin-bottom: 0.5rem !important; + } + + .mb-sm-3{ + margin-bottom: 1rem !important; + } + + .mb-sm-4{ + margin-bottom: 1.5rem !important; + } + + .mb-sm-5{ + margin-bottom: 3rem !important; + } + + .mb-sm-auto{ + margin-bottom: auto !important; + } + + .ms-sm-0{ + margin-left: 0 !important; + } + + .ms-sm-1{ + margin-left: 0.25rem !important; + } + + .ms-sm-2{ + margin-left: 0.5rem !important; + } + + .ms-sm-3{ + margin-left: 1rem !important; + } + + .ms-sm-4{ + margin-left: 1.5rem !important; + } + + .ms-sm-5{ + margin-left: 3rem !important; + } + + .ms-sm-auto{ + margin-left: auto !important; + } + + .p-sm-0{ + padding: 0 !important; + } + + .p-sm-1{ + padding: 0.25rem !important; + } + + .p-sm-2{ + padding: 0.5rem !important; + } + + .p-sm-3{ + padding: 1rem !important; + } + + .p-sm-4{ + padding: 1.5rem !important; + } + + .p-sm-5{ + padding: 3rem !important; + } + + .px-sm-0{ + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-sm-1{ + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-sm-2{ + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-sm-3{ + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-sm-4{ + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-sm-5{ + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-sm-0{ + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-sm-1{ + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-sm-2{ + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-sm-3{ + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-sm-4{ + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-sm-5{ + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-sm-0{ + padding-top: 0 !important; + } + + .pt-sm-1{ + padding-top: 0.25rem !important; + } + + .pt-sm-2{ + padding-top: 0.5rem !important; + } + + .pt-sm-3{ + padding-top: 1rem !important; + } + + .pt-sm-4{ + padding-top: 1.5rem !important; + } + + .pt-sm-5{ + padding-top: 3rem !important; + } + + .pe-sm-0{ + padding-right: 0 !important; + } + + .pe-sm-1{ + padding-right: 0.25rem !important; + } + + .pe-sm-2{ + padding-right: 0.5rem !important; + } + + .pe-sm-3{ + padding-right: 1rem !important; + } + + .pe-sm-4{ + padding-right: 1.5rem !important; + } + + .pe-sm-5{ + padding-right: 3rem !important; + } + + .pb-sm-0{ + padding-bottom: 0 !important; + } + + .pb-sm-1{ + padding-bottom: 0.25rem !important; + } + + .pb-sm-2{ + padding-bottom: 0.5rem !important; + } + + .pb-sm-3{ + padding-bottom: 1rem !important; + } + + .pb-sm-4{ + padding-bottom: 1.5rem !important; + } + + .pb-sm-5{ + padding-bottom: 3rem !important; + } + + .ps-sm-0{ + padding-left: 0 !important; + } + + .ps-sm-1{ + padding-left: 0.25rem !important; + } + + .ps-sm-2{ + padding-left: 0.5rem !important; + } + + .ps-sm-3{ + padding-left: 1rem !important; + } + + .ps-sm-4{ + padding-left: 1.5rem !important; + } + + .ps-sm-5{ + padding-left: 3rem !important; + } +} + +@media (min-width: 768px){ + .d-md-inline{ + display: inline !important; + } + + .d-md-inline-block{ + display: inline-block !important; + } + + .d-md-block{ + display: block !important; + } + + .d-md-grid{ + display: grid !important; + } + + .d-md-table{ + display: table !important; + } + + .d-md-table-row{ + display: table-row !important; + } + + .d-md-table-cell{ + display: table-cell !important; + } + + .d-md-flex{ + display: flex !important; + } + + .d-md-inline-flex{ + display: inline-flex !important; + } + + .d-md-none{ + display: none !important; + } + + .flex-md-fill{ + flex: 1 1 auto !important; + } + + .flex-md-row{ + flex-direction: row !important; + } + + .flex-md-column{ + flex-direction: column !important; + } + + .flex-md-row-reverse{ + flex-direction: row-reverse !important; + } + + .flex-md-column-reverse{ + flex-direction: column-reverse !important; + } + + .flex-md-grow-0{ + flex-grow: 0 !important; + } + + .flex-md-grow-1{ + flex-grow: 1 !important; + } + + .flex-md-shrink-0{ + flex-shrink: 0 !important; + } + + .flex-md-shrink-1{ + flex-shrink: 1 !important; + } + + .flex-md-wrap{ + flex-wrap: wrap !important; + } + + .flex-md-nowrap{ + flex-wrap: nowrap !important; + } + + .flex-md-wrap-reverse{ + flex-wrap: wrap-reverse !important; + } + + .justify-content-md-start{ + justify-content: flex-start !important; + } + + .justify-content-md-end{ + justify-content: flex-end !important; + } + + .justify-content-md-center{ + justify-content: center !important; + } + + .justify-content-md-between{ + justify-content: space-between !important; + } + + .justify-content-md-around{ + justify-content: space-around !important; + } + + .justify-content-md-evenly{ + justify-content: space-evenly !important; + } + + .align-items-md-start{ + align-items: flex-start !important; + } + + .align-items-md-end{ + align-items: flex-end !important; + } + + .align-items-md-center{ + align-items: center !important; + } + + .align-items-md-baseline{ + align-items: baseline !important; + } + + .align-items-md-stretch{ + align-items: stretch !important; + } + + .align-content-md-start{ + align-content: flex-start !important; + } + + .align-content-md-end{ + align-content: flex-end !important; + } + + .align-content-md-center{ + align-content: center !important; + } + + .align-content-md-between{ + align-content: space-between !important; + } + + .align-content-md-around{ + align-content: space-around !important; + } + + .align-content-md-stretch{ + align-content: stretch !important; + } + + .align-self-md-auto{ + align-self: auto !important; + } + + .align-self-md-start{ + align-self: flex-start !important; + } + + .align-self-md-end{ + align-self: flex-end !important; + } + + .align-self-md-center{ + align-self: center !important; + } + + .align-self-md-baseline{ + align-self: baseline !important; + } + + .align-self-md-stretch{ + align-self: stretch !important; + } + + .order-md-first{ + order: -1 !important; + } + + .order-md-0{ + order: 0 !important; + } + + .order-md-1{ + order: 1 !important; + } + + .order-md-2{ + order: 2 !important; + } + + .order-md-3{ + order: 3 !important; + } + + .order-md-4{ + order: 4 !important; + } + + .order-md-5{ + order: 5 !important; + } + + .order-md-last{ + order: 6 !important; + } + + .m-md-0{ + margin: 0 !important; + } + + .m-md-1{ + margin: 0.25rem !important; + } + + .m-md-2{ + margin: 0.5rem !important; + } + + .m-md-3{ + margin: 1rem !important; + } + + .m-md-4{ + margin: 1.5rem !important; + } + + .m-md-5{ + margin: 3rem !important; + } + + .m-md-auto{ + margin: auto !important; + } + + .mx-md-0{ + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-md-1{ + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-md-2{ + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-md-3{ + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-md-4{ + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-md-5{ + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-md-auto{ + margin-right: auto !important; + margin-left: auto !important; + } + + .my-md-0{ + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-md-1{ + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-md-2{ + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-md-3{ + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-md-4{ + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-md-5{ + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-md-auto{ + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-md-0{ + margin-top: 0 !important; + } + + .mt-md-1{ + margin-top: 0.25rem !important; + } + + .mt-md-2{ + margin-top: 0.5rem !important; + } + + .mt-md-3{ + margin-top: 1rem !important; + } + + .mt-md-4{ + margin-top: 1.5rem !important; + } + + .mt-md-5{ + margin-top: 3rem !important; + } + + .mt-md-auto{ + margin-top: auto !important; + } + + .me-md-0{ + margin-right: 0 !important; + } + + .me-md-1{ + margin-right: 0.25rem !important; + } + + .me-md-2{ + margin-right: 0.5rem !important; + } + + .me-md-3{ + margin-right: 1rem !important; + } + + .me-md-4{ + margin-right: 1.5rem !important; + } + + .me-md-5{ + margin-right: 3rem !important; + } + + .me-md-auto{ + margin-right: auto !important; + } + + .mb-md-0{ + margin-bottom: 0 !important; + } + + .mb-md-1{ + margin-bottom: 0.25rem !important; + } + + .mb-md-2{ + margin-bottom: 0.5rem !important; + } + + .mb-md-3{ + margin-bottom: 1rem !important; + } + + .mb-md-4{ + margin-bottom: 1.5rem !important; + } + + .mb-md-5{ + margin-bottom: 3rem !important; + } + + .mb-md-auto{ + margin-bottom: auto !important; + } + + .ms-md-0{ + margin-left: 0 !important; + } + + .ms-md-1{ + margin-left: 0.25rem !important; + } + + .ms-md-2{ + margin-left: 0.5rem !important; + } + + .ms-md-3{ + margin-left: 1rem !important; + } + + .ms-md-4{ + margin-left: 1.5rem !important; + } + + .ms-md-5{ + margin-left: 3rem !important; + } + + .ms-md-auto{ + margin-left: auto !important; + } + + .p-md-0{ + padding: 0 !important; + } + + .p-md-1{ + padding: 0.25rem !important; + } + + .p-md-2{ + padding: 0.5rem !important; + } + + .p-md-3{ + padding: 1rem !important; + } + + .p-md-4{ + padding: 1.5rem !important; + } + + .p-md-5{ + padding: 3rem !important; + } + + .px-md-0{ + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-md-1{ + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-md-2{ + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-md-3{ + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-md-4{ + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-md-5{ + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-md-0{ + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-md-1{ + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-md-2{ + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-md-3{ + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-md-4{ + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-md-5{ + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-md-0{ + padding-top: 0 !important; + } + + .pt-md-1{ + padding-top: 0.25rem !important; + } + + .pt-md-2{ + padding-top: 0.5rem !important; + } + + .pt-md-3{ + padding-top: 1rem !important; + } + + .pt-md-4{ + padding-top: 1.5rem !important; + } + + .pt-md-5{ + padding-top: 3rem !important; + } + + .pe-md-0{ + padding-right: 0 !important; + } + + .pe-md-1{ + padding-right: 0.25rem !important; + } + + .pe-md-2{ + padding-right: 0.5rem !important; + } + + .pe-md-3{ + padding-right: 1rem !important; + } + + .pe-md-4{ + padding-right: 1.5rem !important; + } + + .pe-md-5{ + padding-right: 3rem !important; + } + + .pb-md-0{ + padding-bottom: 0 !important; + } + + .pb-md-1{ + padding-bottom: 0.25rem !important; + } + + .pb-md-2{ + padding-bottom: 0.5rem !important; + } + + .pb-md-3{ + padding-bottom: 1rem !important; + } + + .pb-md-4{ + padding-bottom: 1.5rem !important; + } + + .pb-md-5{ + padding-bottom: 3rem !important; + } + + .ps-md-0{ + padding-left: 0 !important; + } + + .ps-md-1{ + padding-left: 0.25rem !important; + } + + .ps-md-2{ + padding-left: 0.5rem !important; + } + + .ps-md-3{ + padding-left: 1rem !important; + } + + .ps-md-4{ + padding-left: 1.5rem !important; + } + + .ps-md-5{ + padding-left: 3rem !important; + } +} + +@media (min-width: 992px){ + .d-lg-inline{ + display: inline !important; + } + + .d-lg-inline-block{ + display: inline-block !important; + } + + .d-lg-block{ + display: block !important; + } + + .d-lg-grid{ + display: grid !important; + } + + .d-lg-table{ + display: table !important; + } + + .d-lg-table-row{ + display: table-row !important; + } + + .d-lg-table-cell{ + display: table-cell !important; + } + + .d-lg-flex{ + display: flex !important; + } + + .d-lg-inline-flex{ + display: inline-flex !important; + } + + .d-lg-none{ + display: none !important; + } + + .flex-lg-fill{ + flex: 1 1 auto !important; + } + + .flex-lg-row{ + flex-direction: row !important; + } + + .flex-lg-column{ + flex-direction: column !important; + } + + .flex-lg-row-reverse{ + flex-direction: row-reverse !important; + } + + .flex-lg-column-reverse{ + flex-direction: column-reverse !important; + } + + .flex-lg-grow-0{ + flex-grow: 0 !important; + } + + .flex-lg-grow-1{ + flex-grow: 1 !important; + } + + .flex-lg-shrink-0{ + flex-shrink: 0 !important; + } + + .flex-lg-shrink-1{ + flex-shrink: 1 !important; + } + + .flex-lg-wrap{ + flex-wrap: wrap !important; + } + + .flex-lg-nowrap{ + flex-wrap: nowrap !important; + } + + .flex-lg-wrap-reverse{ + flex-wrap: wrap-reverse !important; + } + + .justify-content-lg-start{ + justify-content: flex-start !important; + } + + .justify-content-lg-end{ + justify-content: flex-end !important; + } + + .justify-content-lg-center{ + justify-content: center !important; + } + + .justify-content-lg-between{ + justify-content: space-between !important; + } + + .justify-content-lg-around{ + justify-content: space-around !important; + } + + .justify-content-lg-evenly{ + justify-content: space-evenly !important; + } + + .align-items-lg-start{ + align-items: flex-start !important; + } + + .align-items-lg-end{ + align-items: flex-end !important; + } + + .align-items-lg-center{ + align-items: center !important; + } + + .align-items-lg-baseline{ + align-items: baseline !important; + } + + .align-items-lg-stretch{ + align-items: stretch !important; + } + + .align-content-lg-start{ + align-content: flex-start !important; + } + + .align-content-lg-end{ + align-content: flex-end !important; + } + + .align-content-lg-center{ + align-content: center !important; + } + + .align-content-lg-between{ + align-content: space-between !important; + } + + .align-content-lg-around{ + align-content: space-around !important; + } + + .align-content-lg-stretch{ + align-content: stretch !important; + } + + .align-self-lg-auto{ + align-self: auto !important; + } + + .align-self-lg-start{ + align-self: flex-start !important; + } + + .align-self-lg-end{ + align-self: flex-end !important; + } + + .align-self-lg-center{ + align-self: center !important; + } + + .align-self-lg-baseline{ + align-self: baseline !important; + } + + .align-self-lg-stretch{ + align-self: stretch !important; + } + + .order-lg-first{ + order: -1 !important; + } + + .order-lg-0{ + order: 0 !important; + } + + .order-lg-1{ + order: 1 !important; + } + + .order-lg-2{ + order: 2 !important; + } + + .order-lg-3{ + order: 3 !important; + } + + .order-lg-4{ + order: 4 !important; + } + + .order-lg-5{ + order: 5 !important; + } + + .order-lg-last{ + order: 6 !important; + } + + .m-lg-0{ + margin: 0 !important; + } + + .m-lg-1{ + margin: 0.25rem !important; + } + + .m-lg-2{ + margin: 0.5rem !important; + } + + .m-lg-3{ + margin: 1rem !important; + } + + .m-lg-4{ + margin: 1.5rem !important; + } + + .m-lg-5{ + margin: 3rem !important; + } + + .m-lg-auto{ + margin: auto !important; + } + + .mx-lg-0{ + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-lg-1{ + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-lg-2{ + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-lg-3{ + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-lg-4{ + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-lg-5{ + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-lg-auto{ + margin-right: auto !important; + margin-left: auto !important; + } + + .my-lg-0{ + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-lg-1{ + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-lg-2{ + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-lg-3{ + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-lg-4{ + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-lg-5{ + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-lg-auto{ + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-lg-0{ + margin-top: 0 !important; + } + + .mt-lg-1{ + margin-top: 0.25rem !important; + } + + .mt-lg-2{ + margin-top: 0.5rem !important; + } + + .mt-lg-3{ + margin-top: 1rem !important; + } + + .mt-lg-4{ + margin-top: 1.5rem !important; + } + + .mt-lg-5{ + margin-top: 3rem !important; + } + + .mt-lg-auto{ + margin-top: auto !important; + } + + .me-lg-0{ + margin-right: 0 !important; + } + + .me-lg-1{ + margin-right: 0.25rem !important; + } + + .me-lg-2{ + margin-right: 0.5rem !important; + } + + .me-lg-3{ + margin-right: 1rem !important; + } + + .me-lg-4{ + margin-right: 1.5rem !important; + } + + .me-lg-5{ + margin-right: 3rem !important; + } + + .me-lg-auto{ + margin-right: auto !important; + } + + .mb-lg-0{ + margin-bottom: 0 !important; + } + + .mb-lg-1{ + margin-bottom: 0.25rem !important; + } + + .mb-lg-2{ + margin-bottom: 0.5rem !important; + } + + .mb-lg-3{ + margin-bottom: 1rem !important; + } + + .mb-lg-4{ + margin-bottom: 1.5rem !important; + } + + .mb-lg-5{ + margin-bottom: 3rem !important; + } + + .mb-lg-auto{ + margin-bottom: auto !important; + } + + .ms-lg-0{ + margin-left: 0 !important; + } + + .ms-lg-1{ + margin-left: 0.25rem !important; + } + + .ms-lg-2{ + margin-left: 0.5rem !important; + } + + .ms-lg-3{ + margin-left: 1rem !important; + } + + .ms-lg-4{ + margin-left: 1.5rem !important; + } + + .ms-lg-5{ + margin-left: 3rem !important; + } + + .ms-lg-auto{ + margin-left: auto !important; + } + + .p-lg-0{ + padding: 0 !important; + } + + .p-lg-1{ + padding: 0.25rem !important; + } + + .p-lg-2{ + padding: 0.5rem !important; + } + + .p-lg-3{ + padding: 1rem !important; + } + + .p-lg-4{ + padding: 1.5rem !important; + } + + .p-lg-5{ + padding: 3rem !important; + } + + .px-lg-0{ + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-lg-1{ + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-lg-2{ + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-lg-3{ + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-lg-4{ + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-lg-5{ + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-lg-0{ + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-lg-1{ + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-lg-2{ + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-lg-3{ + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-lg-4{ + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-lg-5{ + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-lg-0{ + padding-top: 0 !important; + } + + .pt-lg-1{ + padding-top: 0.25rem !important; + } + + .pt-lg-2{ + padding-top: 0.5rem !important; + } + + .pt-lg-3{ + padding-top: 1rem !important; + } + + .pt-lg-4{ + padding-top: 1.5rem !important; + } + + .pt-lg-5{ + padding-top: 3rem !important; + } + + .pe-lg-0{ + padding-right: 0 !important; + } + + .pe-lg-1{ + padding-right: 0.25rem !important; + } + + .pe-lg-2{ + padding-right: 0.5rem !important; + } + + .pe-lg-3{ + padding-right: 1rem !important; + } + + .pe-lg-4{ + padding-right: 1.5rem !important; + } + + .pe-lg-5{ + padding-right: 3rem !important; + } + + .pb-lg-0{ + padding-bottom: 0 !important; + } + + .pb-lg-1{ + padding-bottom: 0.25rem !important; + } + + .pb-lg-2{ + padding-bottom: 0.5rem !important; + } + + .pb-lg-3{ + padding-bottom: 1rem !important; + } + + .pb-lg-4{ + padding-bottom: 1.5rem !important; + } + + .pb-lg-5{ + padding-bottom: 3rem !important; + } + + .ps-lg-0{ + padding-left: 0 !important; + } + + .ps-lg-1{ + padding-left: 0.25rem !important; + } + + .ps-lg-2{ + padding-left: 0.5rem !important; + } + + .ps-lg-3{ + padding-left: 1rem !important; + } + + .ps-lg-4{ + padding-left: 1.5rem !important; + } + + .ps-lg-5{ + padding-left: 3rem !important; + } +} + +@media (min-width: 1200px){ + .d-xl-inline{ + display: inline !important; + } + + .d-xl-inline-block{ + display: inline-block !important; + } + + .d-xl-block{ + display: block !important; + } + + .d-xl-grid{ + display: grid !important; + } + + .d-xl-table{ + display: table !important; + } + + .d-xl-table-row{ + display: table-row !important; + } + + .d-xl-table-cell{ + display: table-cell !important; + } + + .d-xl-flex{ + display: flex !important; + } + + .d-xl-inline-flex{ + display: inline-flex !important; + } + + .d-xl-none{ + display: none !important; + } + + .flex-xl-fill{ + flex: 1 1 auto !important; + } + + .flex-xl-row{ + flex-direction: row !important; + } + + .flex-xl-column{ + flex-direction: column !important; + } + + .flex-xl-row-reverse{ + flex-direction: row-reverse !important; + } + + .flex-xl-column-reverse{ + flex-direction: column-reverse !important; + } + + .flex-xl-grow-0{ + flex-grow: 0 !important; + } + + .flex-xl-grow-1{ + flex-grow: 1 !important; + } + + .flex-xl-shrink-0{ + flex-shrink: 0 !important; + } + + .flex-xl-shrink-1{ + flex-shrink: 1 !important; + } + + .flex-xl-wrap{ + flex-wrap: wrap !important; + } + + .flex-xl-nowrap{ + flex-wrap: nowrap !important; + } + + .flex-xl-wrap-reverse{ + flex-wrap: wrap-reverse !important; + } + + .justify-content-xl-start{ + justify-content: flex-start !important; + } + + .justify-content-xl-end{ + justify-content: flex-end !important; + } + + .justify-content-xl-center{ + justify-content: center !important; + } + + .justify-content-xl-between{ + justify-content: space-between !important; + } + + .justify-content-xl-around{ + justify-content: space-around !important; + } + + .justify-content-xl-evenly{ + justify-content: space-evenly !important; + } + + .align-items-xl-start{ + align-items: flex-start !important; + } + + .align-items-xl-end{ + align-items: flex-end !important; + } + + .align-items-xl-center{ + align-items: center !important; + } + + .align-items-xl-baseline{ + align-items: baseline !important; + } + + .align-items-xl-stretch{ + align-items: stretch !important; + } + + .align-content-xl-start{ + align-content: flex-start !important; + } + + .align-content-xl-end{ + align-content: flex-end !important; + } + + .align-content-xl-center{ + align-content: center !important; + } + + .align-content-xl-between{ + align-content: space-between !important; + } + + .align-content-xl-around{ + align-content: space-around !important; + } + + .align-content-xl-stretch{ + align-content: stretch !important; + } + + .align-self-xl-auto{ + align-self: auto !important; + } + + .align-self-xl-start{ + align-self: flex-start !important; + } + + .align-self-xl-end{ + align-self: flex-end !important; + } + + .align-self-xl-center{ + align-self: center !important; + } + + .align-self-xl-baseline{ + align-self: baseline !important; + } + + .align-self-xl-stretch{ + align-self: stretch !important; + } + + .order-xl-first{ + order: -1 !important; + } + + .order-xl-0{ + order: 0 !important; + } + + .order-xl-1{ + order: 1 !important; + } + + .order-xl-2{ + order: 2 !important; + } + + .order-xl-3{ + order: 3 !important; + } + + .order-xl-4{ + order: 4 !important; + } + + .order-xl-5{ + order: 5 !important; + } + + .order-xl-last{ + order: 6 !important; + } + + .m-xl-0{ + margin: 0 !important; + } + + .m-xl-1{ + margin: 0.25rem !important; + } + + .m-xl-2{ + margin: 0.5rem !important; + } + + .m-xl-3{ + margin: 1rem !important; + } + + .m-xl-4{ + margin: 1.5rem !important; + } + + .m-xl-5{ + margin: 3rem !important; + } + + .m-xl-auto{ + margin: auto !important; + } + + .mx-xl-0{ + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-xl-1{ + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-xl-2{ + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-xl-3{ + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-xl-4{ + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-xl-5{ + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-xl-auto{ + margin-right: auto !important; + margin-left: auto !important; + } + + .my-xl-0{ + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-xl-1{ + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-xl-2{ + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-xl-3{ + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-xl-4{ + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-xl-5{ + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-xl-auto{ + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-xl-0{ + margin-top: 0 !important; + } + + .mt-xl-1{ + margin-top: 0.25rem !important; + } + + .mt-xl-2{ + margin-top: 0.5rem !important; + } + + .mt-xl-3{ + margin-top: 1rem !important; + } + + .mt-xl-4{ + margin-top: 1.5rem !important; + } + + .mt-xl-5{ + margin-top: 3rem !important; + } + + .mt-xl-auto{ + margin-top: auto !important; + } + + .me-xl-0{ + margin-right: 0 !important; + } + + .me-xl-1{ + margin-right: 0.25rem !important; + } + + .me-xl-2{ + margin-right: 0.5rem !important; + } + + .me-xl-3{ + margin-right: 1rem !important; + } + + .me-xl-4{ + margin-right: 1.5rem !important; + } + + .me-xl-5{ + margin-right: 3rem !important; + } + + .me-xl-auto{ + margin-right: auto !important; + } + + .mb-xl-0{ + margin-bottom: 0 !important; + } + + .mb-xl-1{ + margin-bottom: 0.25rem !important; + } + + .mb-xl-2{ + margin-bottom: 0.5rem !important; + } + + .mb-xl-3{ + margin-bottom: 1rem !important; + } + + .mb-xl-4{ + margin-bottom: 1.5rem !important; + } + + .mb-xl-5{ + margin-bottom: 3rem !important; + } + + .mb-xl-auto{ + margin-bottom: auto !important; + } + + .ms-xl-0{ + margin-left: 0 !important; + } + + .ms-xl-1{ + margin-left: 0.25rem !important; + } + + .ms-xl-2{ + margin-left: 0.5rem !important; + } + + .ms-xl-3{ + margin-left: 1rem !important; + } + + .ms-xl-4{ + margin-left: 1.5rem !important; + } + + .ms-xl-5{ + margin-left: 3rem !important; + } + + .ms-xl-auto{ + margin-left: auto !important; + } + + .p-xl-0{ + padding: 0 !important; + } + + .p-xl-1{ + padding: 0.25rem !important; + } + + .p-xl-2{ + padding: 0.5rem !important; + } + + .p-xl-3{ + padding: 1rem !important; + } + + .p-xl-4{ + padding: 1.5rem !important; + } + + .p-xl-5{ + padding: 3rem !important; + } + + .px-xl-0{ + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-xl-1{ + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-xl-2{ + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-xl-3{ + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-xl-4{ + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-xl-5{ + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-xl-0{ + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-xl-1{ + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-xl-2{ + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-xl-3{ + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-xl-4{ + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-xl-5{ + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-xl-0{ + padding-top: 0 !important; + } + + .pt-xl-1{ + padding-top: 0.25rem !important; + } + + .pt-xl-2{ + padding-top: 0.5rem !important; + } + + .pt-xl-3{ + padding-top: 1rem !important; + } + + .pt-xl-4{ + padding-top: 1.5rem !important; + } + + .pt-xl-5{ + padding-top: 3rem !important; + } + + .pe-xl-0{ + padding-right: 0 !important; + } + + .pe-xl-1{ + padding-right: 0.25rem !important; + } + + .pe-xl-2{ + padding-right: 0.5rem !important; + } + + .pe-xl-3{ + padding-right: 1rem !important; + } + + .pe-xl-4{ + padding-right: 1.5rem !important; + } + + .pe-xl-5{ + padding-right: 3rem !important; + } + + .pb-xl-0{ + padding-bottom: 0 !important; + } + + .pb-xl-1{ + padding-bottom: 0.25rem !important; + } + + .pb-xl-2{ + padding-bottom: 0.5rem !important; + } + + .pb-xl-3{ + padding-bottom: 1rem !important; + } + + .pb-xl-4{ + padding-bottom: 1.5rem !important; + } + + .pb-xl-5{ + padding-bottom: 3rem !important; + } + + .ps-xl-0{ + padding-left: 0 !important; + } + + .ps-xl-1{ + padding-left: 0.25rem !important; + } + + .ps-xl-2{ + padding-left: 0.5rem !important; + } + + .ps-xl-3{ + padding-left: 1rem !important; + } + + .ps-xl-4{ + padding-left: 1.5rem !important; + } + + .ps-xl-5{ + padding-left: 3rem !important; + } +} + +@media (min-width: 1400px){ + .d-xxl-inline{ + display: inline !important; + } + + .d-xxl-inline-block{ + display: inline-block !important; + } + + .d-xxl-block{ + display: block !important; + } + + .d-xxl-grid{ + display: grid !important; + } + + .d-xxl-table{ + display: table !important; + } + + .d-xxl-table-row{ + display: table-row !important; + } + + .d-xxl-table-cell{ + display: table-cell !important; + } + + .d-xxl-flex{ + display: flex !important; + } + + .d-xxl-inline-flex{ + display: inline-flex !important; + } + + .d-xxl-none{ + display: none !important; + } + + .flex-xxl-fill{ + flex: 1 1 auto !important; + } + + .flex-xxl-row{ + flex-direction: row !important; + } + + .flex-xxl-column{ + flex-direction: column !important; + } + + .flex-xxl-row-reverse{ + flex-direction: row-reverse !important; + } + + .flex-xxl-column-reverse{ + flex-direction: column-reverse !important; + } + + .flex-xxl-grow-0{ + flex-grow: 0 !important; + } + + .flex-xxl-grow-1{ + flex-grow: 1 !important; + } + + .flex-xxl-shrink-0{ + flex-shrink: 0 !important; + } + + .flex-xxl-shrink-1{ + flex-shrink: 1 !important; + } + + .flex-xxl-wrap{ + flex-wrap: wrap !important; + } + + .flex-xxl-nowrap{ + flex-wrap: nowrap !important; + } + + .flex-xxl-wrap-reverse{ + flex-wrap: wrap-reverse !important; + } + + .justify-content-xxl-start{ + justify-content: flex-start !important; + } + + .justify-content-xxl-end{ + justify-content: flex-end !important; + } + + .justify-content-xxl-center{ + justify-content: center !important; + } + + .justify-content-xxl-between{ + justify-content: space-between !important; + } + + .justify-content-xxl-around{ + justify-content: space-around !important; + } + + .justify-content-xxl-evenly{ + justify-content: space-evenly !important; + } + + .align-items-xxl-start{ + align-items: flex-start !important; + } + + .align-items-xxl-end{ + align-items: flex-end !important; + } + + .align-items-xxl-center{ + align-items: center !important; + } + + .align-items-xxl-baseline{ + align-items: baseline !important; + } + + .align-items-xxl-stretch{ + align-items: stretch !important; + } + + .align-content-xxl-start{ + align-content: flex-start !important; + } + + .align-content-xxl-end{ + align-content: flex-end !important; + } + + .align-content-xxl-center{ + align-content: center !important; + } + + .align-content-xxl-between{ + align-content: space-between !important; + } + + .align-content-xxl-around{ + align-content: space-around !important; + } + + .align-content-xxl-stretch{ + align-content: stretch !important; + } + + .align-self-xxl-auto{ + align-self: auto !important; + } + + .align-self-xxl-start{ + align-self: flex-start !important; + } + + .align-self-xxl-end{ + align-self: flex-end !important; + } + + .align-self-xxl-center{ + align-self: center !important; + } + + .align-self-xxl-baseline{ + align-self: baseline !important; + } + + .align-self-xxl-stretch{ + align-self: stretch !important; + } + + .order-xxl-first{ + order: -1 !important; + } + + .order-xxl-0{ + order: 0 !important; + } + + .order-xxl-1{ + order: 1 !important; + } + + .order-xxl-2{ + order: 2 !important; + } + + .order-xxl-3{ + order: 3 !important; + } + + .order-xxl-4{ + order: 4 !important; + } + + .order-xxl-5{ + order: 5 !important; + } + + .order-xxl-last{ + order: 6 !important; + } + + .m-xxl-0{ + margin: 0 !important; + } + + .m-xxl-1{ + margin: 0.25rem !important; + } + + .m-xxl-2{ + margin: 0.5rem !important; + } + + .m-xxl-3{ + margin: 1rem !important; + } + + .m-xxl-4{ + margin: 1.5rem !important; + } + + .m-xxl-5{ + margin: 3rem !important; + } + + .m-xxl-auto{ + margin: auto !important; + } + + .mx-xxl-0{ + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-xxl-1{ + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-xxl-2{ + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-xxl-3{ + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-xxl-4{ + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-xxl-5{ + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-xxl-auto{ + margin-right: auto !important; + margin-left: auto !important; + } + + .my-xxl-0{ + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-xxl-1{ + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-xxl-2{ + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-xxl-3{ + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-xxl-4{ + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-xxl-5{ + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-xxl-auto{ + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-xxl-0{ + margin-top: 0 !important; + } + + .mt-xxl-1{ + margin-top: 0.25rem !important; + } + + .mt-xxl-2{ + margin-top: 0.5rem !important; + } + + .mt-xxl-3{ + margin-top: 1rem !important; + } + + .mt-xxl-4{ + margin-top: 1.5rem !important; + } + + .mt-xxl-5{ + margin-top: 3rem !important; + } + + .mt-xxl-auto{ + margin-top: auto !important; + } + + .me-xxl-0{ + margin-right: 0 !important; + } + + .me-xxl-1{ + margin-right: 0.25rem !important; + } + + .me-xxl-2{ + margin-right: 0.5rem !important; + } + + .me-xxl-3{ + margin-right: 1rem !important; + } + + .me-xxl-4{ + margin-right: 1.5rem !important; + } + + .me-xxl-5{ + margin-right: 3rem !important; + } + + .me-xxl-auto{ + margin-right: auto !important; + } + + .mb-xxl-0{ + margin-bottom: 0 !important; + } + + .mb-xxl-1{ + margin-bottom: 0.25rem !important; + } + + .mb-xxl-2{ + margin-bottom: 0.5rem !important; + } + + .mb-xxl-3{ + margin-bottom: 1rem !important; + } + + .mb-xxl-4{ + margin-bottom: 1.5rem !important; + } + + .mb-xxl-5{ + margin-bottom: 3rem !important; + } + + .mb-xxl-auto{ + margin-bottom: auto !important; + } + + .ms-xxl-0{ + margin-left: 0 !important; + } + + .ms-xxl-1{ + margin-left: 0.25rem !important; + } + + .ms-xxl-2{ + margin-left: 0.5rem !important; + } + + .ms-xxl-3{ + margin-left: 1rem !important; + } + + .ms-xxl-4{ + margin-left: 1.5rem !important; + } + + .ms-xxl-5{ + margin-left: 3rem !important; + } + + .ms-xxl-auto{ + margin-left: auto !important; + } + + .p-xxl-0{ + padding: 0 !important; + } + + .p-xxl-1{ + padding: 0.25rem !important; + } + + .p-xxl-2{ + padding: 0.5rem !important; + } + + .p-xxl-3{ + padding: 1rem !important; + } + + .p-xxl-4{ + padding: 1.5rem !important; + } + + .p-xxl-5{ + padding: 3rem !important; + } + + .px-xxl-0{ + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-xxl-1{ + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-xxl-2{ + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-xxl-3{ + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-xxl-4{ + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-xxl-5{ + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-xxl-0{ + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-xxl-1{ + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-xxl-2{ + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-xxl-3{ + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-xxl-4{ + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-xxl-5{ + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-xxl-0{ + padding-top: 0 !important; + } + + .pt-xxl-1{ + padding-top: 0.25rem !important; + } + + .pt-xxl-2{ + padding-top: 0.5rem !important; + } + + .pt-xxl-3{ + padding-top: 1rem !important; + } + + .pt-xxl-4{ + padding-top: 1.5rem !important; + } + + .pt-xxl-5{ + padding-top: 3rem !important; + } + + .pe-xxl-0{ + padding-right: 0 !important; + } + + .pe-xxl-1{ + padding-right: 0.25rem !important; + } + + .pe-xxl-2{ + padding-right: 0.5rem !important; + } + + .pe-xxl-3{ + padding-right: 1rem !important; + } + + .pe-xxl-4{ + padding-right: 1.5rem !important; + } + + .pe-xxl-5{ + padding-right: 3rem !important; + } + + .pb-xxl-0{ + padding-bottom: 0 !important; + } + + .pb-xxl-1{ + padding-bottom: 0.25rem !important; + } + + .pb-xxl-2{ + padding-bottom: 0.5rem !important; + } + + .pb-xxl-3{ + padding-bottom: 1rem !important; + } + + .pb-xxl-4{ + padding-bottom: 1.5rem !important; + } + + .pb-xxl-5{ + padding-bottom: 3rem !important; + } + + .ps-xxl-0{ + padding-left: 0 !important; + } + + .ps-xxl-1{ + padding-left: 0.25rem !important; + } + + .ps-xxl-2{ + padding-left: 0.5rem !important; + } + + .ps-xxl-3{ + padding-left: 1rem !important; + } + + .ps-xxl-4{ + padding-left: 1.5rem !important; + } + + .ps-xxl-5{ + padding-left: 3rem !important; + } +} + +@media print{ + .d-print-inline{ + display: inline !important; + } + + .d-print-inline-block{ + display: inline-block !important; + } + + .d-print-block{ + display: block !important; + } + + .d-print-grid{ + display: grid !important; + } + + .d-print-table{ + display: table !important; + } + + .d-print-table-row{ + display: table-row !important; + } + + .d-print-table-cell{ + display: table-cell !important; + } + + .d-print-flex{ + display: flex !important; + } + + .d-print-inline-flex{ + display: inline-flex !important; + } + + .d-print-none{ + display: none !important; + } +} + +/*# sourceMappingURL=bootstrap-grid.css.map */ diff --git a/assets/css/fontawesome/css/all.min.css b/assets/css/fontawesome/css/all.min.css new file mode 100644 index 0000000..0998088 --- /dev/null +++ b/assets/css/fontawesome/css/all.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Pro 5.12.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Commercial License) + * www.Ulabs.ir + */ +.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-abacus:before{content:"\f640"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acorn:before{content:"\f6ae"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-conditioner:before{content:"\f8f4"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-alarm-clock:before{content:"\f34e"}.fa-alarm-exclamation:before{content:"\f843"}.fa-alarm-plus:before{content:"\f844"}.fa-alarm-snooze:before{content:"\f845"}.fa-album:before{content:"\f89f"}.fa-album-collection:before{content:"\f8a0"}.fa-algolia:before{content:"\f36c"}.fa-alicorn:before{content:"\f6b0"}.fa-alien:before{content:"\f8f5"}.fa-alien-monster:before{content:"\f8f6"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-align-slash:before{content:"\f846"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-amp-guitar:before{content:"\f8a1"}.fa-analytics:before{content:"\f643"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angel:before{content:"\f779"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-crate:before{content:"\f6b1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-alt-down:before{content:"\f354"}.fa-arrow-alt-from-bottom:before{content:"\f346"}.fa-arrow-alt-from-left:before{content:"\f347"}.fa-arrow-alt-from-right:before{content:"\f348"}.fa-arrow-alt-from-top:before{content:"\f349"}.fa-arrow-alt-left:before{content:"\f355"}.fa-arrow-alt-right:before{content:"\f356"}.fa-arrow-alt-square-down:before{content:"\f350"}.fa-arrow-alt-square-left:before{content:"\f351"}.fa-arrow-alt-square-right:before{content:"\f352"}.fa-arrow-alt-square-up:before{content:"\f353"}.fa-arrow-alt-to-bottom:before{content:"\f34a"}.fa-arrow-alt-to-left:before{content:"\f34b"}.fa-arrow-alt-to-right:before{content:"\f34c"}.fa-arrow-alt-to-top:before{content:"\f34d"}.fa-arrow-alt-up:before{content:"\f357"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-from-bottom:before{content:"\f342"}.fa-arrow-from-left:before{content:"\f343"}.fa-arrow-from-right:before{content:"\f344"}.fa-arrow-from-top:before{content:"\f345"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-square-down:before{content:"\f339"}.fa-arrow-square-left:before{content:"\f33a"}.fa-arrow-square-right:before{content:"\f33b"}.fa-arrow-square-up:before{content:"\f33c"}.fa-arrow-to-bottom:before{content:"\f33d"}.fa-arrow-to-left:before{content:"\f33e"}.fa-arrow-to-right:before{content:"\f340"}.fa-arrow-to-top:before{content:"\f341"}.fa-arrow-up:before{content:"\f062"}.fa-arrows:before{content:"\f047"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-arrows-h:before{content:"\f07e"}.fa-arrows-v:before{content:"\f07d"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-atom-alt:before{content:"\f5d3"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-axe:before{content:"\f6b2"}.fa-axe-battle:before{content:"\f6b3"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backpack:before{content:"\f5d4"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-badge:before{content:"\f335"}.fa-badge-check:before{content:"\f336"}.fa-badge-dollar:before{content:"\f645"}.fa-badge-percent:before{content:"\f646"}.fa-badge-sheriff:before{content:"\f8a2"}.fa-badger-honey:before{content:"\f6b4"}.fa-bags-shopping:before{content:"\f847"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ball-pile:before{content:"\f77e"}.fa-ballot:before{content:"\f732"}.fa-ballot-check:before{content:"\f733"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-banjo:before{content:"\f8a3"}.fa-barcode:before{content:"\f02a"}.fa-barcode-alt:before{content:"\f463"}.fa-barcode-read:before{content:"\f464"}.fa-barcode-scan:before{content:"\f465"}.fa-bars:before{content:"\f0c9"}.fa-baseball:before{content:"\f432"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-basketball-hoop:before{content:"\f435"}.fa-bat:before{content:"\f6b5"}.fa-bath:before{content:"\f2cd"}.fa-battery-bolt:before{content:"\f376"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-slash:before{content:"\f377"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-bed-alt:before{content:"\f8f7"}.fa-bed-bunk:before{content:"\f8f8"}.fa-bed-empty:before{content:"\f8f9"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-exclamation:before{content:"\f848"}.fa-bell-on:before{content:"\f8fa"}.fa-bell-plus:before{content:"\f849"}.fa-bell-school:before{content:"\f5d5"}.fa-bell-school-slash:before{content:"\f5d6"}.fa-bell-slash:before{content:"\f1f6"}.fa-bells:before{content:"\f77f"}.fa-betamax:before{content:"\f8a4"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-biking-mountain:before{content:"\f84b"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blanket:before{content:"\f498"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blinds:before{content:"\f8fb"}.fa-blinds-open:before{content:"\f8fc"}.fa-blinds-raised:before{content:"\f8fd"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bone-break:before{content:"\f5d8"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-alt:before{content:"\f5d9"}.fa-book-dead:before{content:"\f6b7"}.fa-book-heart:before{content:"\f499"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-book-spells:before{content:"\f6b8"}.fa-book-user:before{content:"\f7e7"}.fa-bookmark:before{content:"\f02e"}.fa-books:before{content:"\f5db"}.fa-books-medical:before{content:"\f7e8"}.fa-boombox:before{content:"\f8a5"}.fa-boot:before{content:"\f782"}.fa-booth-curtain:before{content:"\f734"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-bottom:before{content:"\f84d"}.fa-border-center-h:before{content:"\f89c"}.fa-border-center-v:before{content:"\f89d"}.fa-border-inner:before{content:"\f84e"}.fa-border-left:before{content:"\f84f"}.fa-border-none:before{content:"\f850"}.fa-border-outer:before{content:"\f851"}.fa-border-right:before{content:"\f852"}.fa-border-style:before{content:"\f853"}.fa-border-style-alt:before{content:"\f854"}.fa-border-top:before{content:"\f855"}.fa-bow-arrow:before{content:"\f6b9"}.fa-bowling-ball:before{content:"\f436"}.fa-bowling-pins:before{content:"\f437"}.fa-box:before{content:"\f466"}.fa-box-alt:before{content:"\f49a"}.fa-box-ballot:before{content:"\f735"}.fa-box-check:before{content:"\f467"}.fa-box-fragile:before{content:"\f49b"}.fa-box-full:before{content:"\f49c"}.fa-box-heart:before{content:"\f49d"}.fa-box-open:before{content:"\f49e"}.fa-box-up:before{content:"\f49f"}.fa-box-usd:before{content:"\f4a0"}.fa-boxes:before{content:"\f468"}.fa-boxes-alt:before{content:"\f4a1"}.fa-boxing-glove:before{content:"\f438"}.fa-brackets:before{content:"\f7e9"}.fa-brackets-curly:before{content:"\f7ea"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-loaf:before{content:"\f7eb"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-bring-forward:before{content:"\f856"}.fa-bring-front:before{content:"\f857"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-browser:before{content:"\f37e"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-bullseye-arrow:before{content:"\f648"}.fa-bullseye-pointer:before{content:"\f649"}.fa-burger-soda:before{content:"\f858"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-burrito:before{content:"\f7ed"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-bus-school:before{content:"\f5dd"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-cabinet-filing:before{content:"\f64b"}.fa-cactus:before{content:"\f8a7"}.fa-calculator:before{content:"\f1ec"}.fa-calculator-alt:before{content:"\f64c"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-edit:before{content:"\f333"}.fa-calendar-exclamation:before{content:"\f334"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-star:before{content:"\f736"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camcorder:before{content:"\f8a8"}.fa-camera:before{content:"\f030"}.fa-camera-alt:before{content:"\f332"}.fa-camera-home:before{content:"\f8fe"}.fa-camera-movie:before{content:"\f8a9"}.fa-camera-polaroid:before{content:"\f8aa"}.fa-camera-retro:before{content:"\f083"}.fa-campfire:before{content:"\f6ba"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candle-holder:before{content:"\f6bc"}.fa-candy-cane:before{content:"\f786"}.fa-candy-corn:before{content:"\f6bd"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-building:before{content:"\f859"}.fa-car-bump:before{content:"\f5e0"}.fa-car-bus:before{content:"\f85a"}.fa-car-crash:before{content:"\f5e1"}.fa-car-garage:before{content:"\f5e2"}.fa-car-mechanic:before{content:"\f5e3"}.fa-car-side:before{content:"\f5e4"}.fa-car-tilt:before{content:"\f5e5"}.fa-car-wash:before{content:"\f5e6"}.fa-caravan:before{content:"\f8ff"}.fa-caravan-alt:before{content:"\f900"}.fa-caret-circle-down:before{content:"\f32d"}.fa-caret-circle-left:before{content:"\f32e"}.fa-caret-circle-right:before{content:"\f330"}.fa-caret-circle-up:before{content:"\f331"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cars:before{content:"\f85b"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cassette-tape:before{content:"\f8ab"}.fa-cat:before{content:"\f6be"}.fa-cat-space:before{content:"\f901"}.fa-cauldron:before{content:"\f6bf"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-cctv:before{content:"\f8ac"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chair-office:before{content:"\f6c1"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-line-down:before{content:"\f64d"}.fa-chart-network:before{content:"\f78a"}.fa-chart-pie:before{content:"\f200"}.fa-chart-pie-alt:before{content:"\f64e"}.fa-chart-scatter:before{content:"\f7ee"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-cheese-swiss:before{content:"\f7f0"}.fa-cheeseburger:before{content:"\f7f1"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-bishop-alt:before{content:"\f43b"}.fa-chess-board:before{content:"\f43c"}.fa-chess-clock:before{content:"\f43d"}.fa-chess-clock-alt:before{content:"\f43e"}.fa-chess-king:before{content:"\f43f"}.fa-chess-king-alt:before{content:"\f440"}.fa-chess-knight:before{content:"\f441"}.fa-chess-knight-alt:before{content:"\f442"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-pawn-alt:before{content:"\f444"}.fa-chess-queen:before{content:"\f445"}.fa-chess-queen-alt:before{content:"\f446"}.fa-chess-rook:before{content:"\f447"}.fa-chess-rook-alt:before{content:"\f448"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-double-down:before{content:"\f322"}.fa-chevron-double-left:before{content:"\f323"}.fa-chevron-double-right:before{content:"\f324"}.fa-chevron-double-up:before{content:"\f325"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-square-down:before{content:"\f329"}.fa-chevron-square-left:before{content:"\f32a"}.fa-chevron-square-right:before{content:"\f32b"}.fa-chevron-square-up:before{content:"\f32c"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chimney:before{content:"\f78b"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clarinet:before{content:"\f8ad"}.fa-claw-marks:before{content:"\f6c2"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clipboard-list-check:before{content:"\f737"}.fa-clipboard-prescription:before{content:"\f5e8"}.fa-clipboard-user:before{content:"\f7f3"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-drizzle:before{content:"\f738"}.fa-cloud-hail:before{content:"\f739"}.fa-cloud-hail-mixed:before{content:"\f73a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-music:before{content:"\f8ae"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-rainbow:before{content:"\f73e"}.fa-cloud-showers:before{content:"\f73f"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sleet:before{content:"\f741"}.fa-cloud-snow:before{content:"\f742"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload:before{content:"\f0ee"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-clouds:before{content:"\f744"}.fa-clouds-moon:before{content:"\f745"}.fa-clouds-sun:before{content:"\f746"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-club:before{content:"\f327"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-code-commit:before{content:"\f386"}.fa-code-merge:before{content:"\f387"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-coffee-pot:before{content:"\f902"}.fa-coffee-togo:before{content:"\f6c5"}.fa-coffin:before{content:"\f6c6"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coin:before{content:"\f85c"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comet:before{content:"\f903"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-alt-check:before{content:"\f4a2"}.fa-comment-alt-dollar:before{content:"\f650"}.fa-comment-alt-dots:before{content:"\f4a3"}.fa-comment-alt-edit:before{content:"\f4a4"}.fa-comment-alt-exclamation:before{content:"\f4a5"}.fa-comment-alt-lines:before{content:"\f4a6"}.fa-comment-alt-medical:before{content:"\f7f4"}.fa-comment-alt-minus:before{content:"\f4a7"}.fa-comment-alt-music:before{content:"\f8af"}.fa-comment-alt-plus:before{content:"\f4a8"}.fa-comment-alt-slash:before{content:"\f4a9"}.fa-comment-alt-smile:before{content:"\f4aa"}.fa-comment-alt-times:before{content:"\f4ab"}.fa-comment-check:before{content:"\f4ac"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-edit:before{content:"\f4ae"}.fa-comment-exclamation:before{content:"\f4af"}.fa-comment-lines:before{content:"\f4b0"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-minus:before{content:"\f4b1"}.fa-comment-music:before{content:"\f8b0"}.fa-comment-plus:before{content:"\f4b2"}.fa-comment-slash:before{content:"\f4b3"}.fa-comment-smile:before{content:"\f4b4"}.fa-comment-times:before{content:"\f4b5"}.fa-comments:before{content:"\f086"}.fa-comments-alt:before{content:"\f4b6"}.fa-comments-alt-dollar:before{content:"\f652"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compass-slash:before{content:"\f5e9"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-compress-wide:before{content:"\f326"}.fa-computer-classic:before{content:"\f8b1"}.fa-computer-speaker:before{content:"\f8b2"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-construction:before{content:"\f85d"}.fa-container-storage:before{content:"\f4b7"}.fa-contao:before{content:"\f26d"}.fa-conveyor-belt:before{content:"\f46e"}.fa-conveyor-belt-alt:before{content:"\f46f"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-corn:before{content:"\f6c7"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cow:before{content:"\f6c8"}.fa-cowbell:before{content:"\f8b3"}.fa-cowbell-more:before{content:"\f8b4"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-credit-card-blank:before{content:"\f389"}.fa-credit-card-front:before{content:"\f38a"}.fa-cricket:before{content:"\f449"}.fa-critical-role:before{content:"\f6c9"}.fa-croissant:before{content:"\f7f6"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-crutches:before{content:"\f7f8"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-curling:before{content:"\f44a"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dagger:before{content:"\f6cb"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-debug:before{content:"\f7f9"}.fa-deer:before{content:"\f78e"}.fa-deer-rudolph:before{content:"\f78f"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-desktop-alt:before{content:"\f390"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dewpoint:before{content:"\f748"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diamond:before{content:"\f219"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d10:before{content:"\f6cd"}.fa-dice-d12:before{content:"\f6ce"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d4:before{content:"\f6d0"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-d8:before{content:"\f6d2"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digging:before{content:"\f85e"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-diploma:before{content:"\f5ea"}.fa-directions:before{content:"\f5eb"}.fa-disc-drive:before{content:"\f8b5"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-do-not-enter:before{content:"\f5ec"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dog-leashed:before{content:"\f6d4"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-empty:before{content:"\f473"}.fa-dolly-flatbed:before{content:"\f474"}.fa-dolly-flatbed-alt:before{content:"\f475"}.fa-dolly-flatbed-empty:before{content:"\f476"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-circle:before{content:"\f5ed"}.fa-draw-polygon:before{content:"\f5ee"}.fa-draw-square:before{content:"\f5ef"}.fa-dreidel:before{content:"\f792"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-drone:before{content:"\f85f"}.fa-drone-alt:before{content:"\f860"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick:before{content:"\f6d6"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dryer:before{content:"\f861"}.fa-dryer-alt:before{content:"\f862"}.fa-duck:before{content:"\f6d8"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-ear:before{content:"\f5f0"}.fa-ear-muffs:before{content:"\f795"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-eclipse:before{content:"\f749"}.fa-eclipse-alt:before{content:"\f74a"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-egg-fried:before{content:"\f7fc"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-elephant:before{content:"\f6da"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-h-alt:before{content:"\f39b"}.fa-ellipsis-v:before{content:"\f142"}.fa-ellipsis-v-alt:before{content:"\f39c"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-empty-set:before{content:"\f656"}.fa-engine-warning:before{content:"\f5f2"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-dollar:before{content:"\f657"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange:before{content:"\f0ec"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-square:before{content:"\f321"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows:before{content:"\f31d"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expand-wide:before{content:"\f320"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link:before{content:"\f08e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square:before{content:"\f14c"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-evil:before{content:"\f6db"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fan-table:before{content:"\f904"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-farm:before{content:"\f864"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\f905"}.fa-faucet-drip:before{content:"\f906"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-field-hockey:before{content:"\f44c"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-certificate:before{content:"\f5f3"}.fa-file-chart-line:before{content:"\f659"}.fa-file-chart-pie:before{content:"\f65a"}.fa-file-check:before{content:"\f316"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-edit:before{content:"\f31c"}.fa-file-excel:before{content:"\f1c3"}.fa-file-exclamation:before{content:"\f31a"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-minus:before{content:"\f318"}.fa-file-music:before{content:"\f8b6"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-plus:before{content:"\f319"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-search:before{content:"\f865"}.fa-file-signature:before{content:"\f573"}.fa-file-spreadsheet:before{content:"\f65b"}.fa-file-times:before{content:"\f317"}.fa-file-upload:before{content:"\f574"}.fa-file-user:before{content:"\f65c"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-files-medical:before{content:"\f7fd"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-film-alt:before{content:"\f3a0"}.fa-film-canister:before{content:"\f8b7"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-fire-smoke:before{content:"\f74b"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\f907"}.fa-fireplace:before{content:"\f79a"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fish-cooked:before{content:"\f7fe"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-alt:before{content:"\f74c"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flame:before{content:"\f6df"}.fa-flashlight:before{content:"\f8b8"}.fa-flask:before{content:"\f0c3"}.fa-flask-poison:before{content:"\f6e0"}.fa-flask-potion:before{content:"\f6e1"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flower:before{content:"\f7ff"}.fa-flower-daffodil:before{content:"\f800"}.fa-flower-tulip:before{content:"\f801"}.fa-flushed:before{content:"\f579"}.fa-flute:before{content:"\f8b9"}.fa-flux-capacitor:before{content:"\f8ba"}.fa-fly:before{content:"\f417"}.fa-fog:before{content:"\f74e"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-folder-times:before{content:"\f65f"}.fa-folder-tree:before{content:"\f802"}.fa-folders:before{content:"\f660"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-font-case:before{content:"\f866"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-football-helmet:before{content:"\f44f"}.fa-forklift:before{content:"\f47a"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-fragile:before{content:"\f4bb"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-french-fries:before{content:"\f803"}.fa-frog:before{content:"\f52e"}.fa-frosty-head:before{content:"\f79b"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-function:before{content:"\f661"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-galaxy:before{content:"\f908"}.fa-game-board:before{content:"\f867"}.fa-game-board-alt:before{content:"\f868"}.fa-game-console-handheld:before{content:"\f8bb"}.fa-gamepad:before{content:"\f11b"}.fa-gamepad-alt:before{content:"\f8bc"}.fa-garage:before{content:"\f909"}.fa-garage-car:before{content:"\f90a"}.fa-garage-open:before{content:"\f90b"}.fa-gas-pump:before{content:"\f52f"}.fa-gas-pump-slash:before{content:"\f5f4"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gift-card:before{content:"\f663"}.fa-gifts:before{content:"\f79c"}.fa-gingerbread-man:before{content:"\f79d"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass:before{content:"\f804"}.fa-glass-champagne:before{content:"\f79e"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-citrus:before{content:"\f869"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glass-whiskey-rocks:before{content:"\f7a1"}.fa-glasses:before{content:"\f530"}.fa-glasses-alt:before{content:"\f5f5"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-globe-snow:before{content:"\f7a3"}.fa-globe-stand:before{content:"\f5f6"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-golf-club:before{content:"\f451"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gramophone:before{content:"\f8bd"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-guitar-electric:before{content:"\f8be"}.fa-guitars:before{content:"\f8bf"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-h1:before{content:"\f313"}.fa-h2:before{content:"\f314"}.fa-h3:before{content:"\f315"}.fa-h4:before{content:"\f86a"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hammer-war:before{content:"\f6e4"}.fa-hamsa:before{content:"\f665"}.fa-hand-heart:before{content:"\f4bc"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-box:before{content:"\f47b"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-magic:before{content:"\f6e5"}.fa-hand-holding-seedling:before{content:"\f4bf"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-receiving:before{content:"\f47c"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-heart:before{content:"\f4c3"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-usd:before{content:"\f4c5"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt:before{content:"\f4c6"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-chef:before{content:"\f86b"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-santa:before{content:"\f7a7"}.fa-hat-winter:before{content:"\f7a8"}.fa-hat-witch:before{content:"\f6e7"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side:before{content:"\f6e9"}.fa-head-side-brain:before{content:"\f808"}.fa-head-side-headphones:before{content:"\f8c2"}.fa-head-side-medical:before{content:"\f809"}.fa-head-vr:before{content:"\f6ea"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heart-circle:before{content:"\f4c7"}.fa-heart-rate:before{content:"\f5f8"}.fa-heart-square:before{content:"\f4c8"}.fa-heartbeat:before{content:"\f21e"}.fa-heat:before{content:"\f90c"}.fa-helicopter:before{content:"\f533"}.fa-helmet-battle:before{content:"\f6eb"}.fa-hexagon:before{content:"\f312"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-mask:before{content:"\f6ee"}.fa-hockey-puck:before{content:"\f453"}.fa-hockey-sticks:before{content:"\f454"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-home-alt:before{content:"\f80a"}.fa-home-heart:before{content:"\f4c9"}.fa-home-lg:before{content:"\f80b"}.fa-home-lg-alt:before{content:"\f80c"}.fa-hood-cloak:before{content:"\f6ef"}.fa-hooli:before{content:"\f427"}.fa-horizontal-rule:before{content:"\f86c"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-horse-saddle:before{content:"\f8c3"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hospitals:before{content:"\f80e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house:before{content:"\f90d"}.fa-house-damage:before{content:"\f6f1"}.fa-house-day:before{content:"\f90e"}.fa-house-flood:before{content:"\f74f"}.fa-house-leave:before{content:"\f90f"}.fa-house-night:before{content:"\f910"}.fa-house-return:before{content:"\f911"}.fa-house-signal:before{content:"\f912"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-humidity:before{content:"\f750"}.fa-hurricane:before{content:"\f751"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-ice-skate:before{content:"\f7ac"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-icons-alt:before{content:"\f86e"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\f913"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-image-polaroid:before{content:"\f8c4"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-inbox-in:before{content:"\f310"}.fa-inbox-out:before{content:"\f311"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-industry-alt:before{content:"\f3b3"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-info-square:before{content:"\f30f"}.fa-inhaler:before{content:"\f5f9"}.fa-instagram:before{content:"\f16d"}.fa-integral:before{content:"\f667"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-intersection:before{content:"\f668"}.fa-inventory:before{content:"\f480"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-island-tropical:before{content:"\f811"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-jack-o-lantern:before{content:"\f30e"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-joystick:before{content:"\f8c5"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-jug:before{content:"\f8c6"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-kazoo:before{content:"\f8c7"}.fa-kerning:before{content:"\f86f"}.fa-key:before{content:"\f084"}.fa-key-skeleton:before{content:"\f6f3"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-keynote:before{content:"\f66c"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kidneys:before{content:"\f5fb"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kite:before{content:"\f6f4"}.fa-kiwi-bird:before{content:"\f535"}.fa-knife-kitchen:before{content:"\f6f5"}.fa-korvue:before{content:"\f42f"}.fa-lambda:before{content:"\f66e"}.fa-lamp:before{content:"\f4ca"}.fa-lamp-desk:before{content:"\f914"}.fa-lamp-floor:before{content:"\f915"}.fa-landmark:before{content:"\f66f"}.fa-landmark-alt:before{content:"\f752"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lasso:before{content:"\f8c8"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-layer-minus:before{content:"\f5fe"}.fa-layer-plus:before{content:"\f5ff"}.fa-leaf:before{content:"\f06c"}.fa-leaf-heart:before{content:"\f4cb"}.fa-leaf-maple:before{content:"\f6f6"}.fa-leaf-oak:before{content:"\f6f7"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down:before{content:"\f149"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up:before{content:"\f148"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-light-ceiling:before{content:"\f916"}.fa-light-switch:before{content:"\f917"}.fa-light-switch-off:before{content:"\f918"}.fa-light-switch-on:before{content:"\f919"}.fa-lightbulb:before{content:"\f0eb"}.fa-lightbulb-dollar:before{content:"\f670"}.fa-lightbulb-exclamation:before{content:"\f671"}.fa-lightbulb-on:before{content:"\f672"}.fa-lightbulb-slash:before{content:"\f673"}.fa-lights-holiday:before{content:"\f7b2"}.fa-line:before{content:"\f3c0"}.fa-line-columns:before{content:"\f870"}.fa-line-height:before{content:"\f871"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lips:before{content:"\f600"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-music:before{content:"\f8c9"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location:before{content:"\f601"}.fa-location-arrow:before{content:"\f124"}.fa-location-circle:before{content:"\f602"}.fa-location-slash:before{content:"\f603"}.fa-lock:before{content:"\f023"}.fa-lock-alt:before{content:"\f30d"}.fa-lock-open:before{content:"\f3c1"}.fa-lock-open-alt:before{content:"\f3c2"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-long-arrow-up:before{content:"\f176"}.fa-loveseat:before{content:"\f4cc"}.fa-low-vision:before{content:"\f2a8"}.fa-luchador:before{content:"\f455"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lyft:before{content:"\f3c3"}.fa-mace:before{content:"\f6f8"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailbox:before{content:"\f813"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-mandolin:before{content:"\f6f9"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-marker-alt-slash:before{content:"\f605"}.fa-map-marker-check:before{content:"\f606"}.fa-map-marker-edit:before{content:"\f607"}.fa-map-marker-exclamation:before{content:"\f608"}.fa-map-marker-minus:before{content:"\f609"}.fa-map-marker-plus:before{content:"\f60a"}.fa-map-marker-question:before{content:"\f60b"}.fa-map-marker-slash:before{content:"\f60c"}.fa-map-marker-smile:before{content:"\f60d"}.fa-map-marker-times:before{content:"\f60e"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-meat:before{content:"\f814"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaphone:before{content:"\f675"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\f91a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microphone-stand:before{content:"\f8cb"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-microwave:before{content:"\f91b"}.fa-mind-share:before{content:"\f677"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-hexagon:before{content:"\f307"}.fa-minus-octagon:before{content:"\f308"}.fa-minus-square:before{content:"\f146"}.fa-mistletoe:before{content:"\f7b4"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-mobile-android:before{content:"\f3ce"}.fa-mobile-android-alt:before{content:"\f3cf"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-money-check-edit:before{content:"\f872"}.fa-money-check-edit-alt:before{content:"\f873"}.fa-monitor-heart-rate:before{content:"\f611"}.fa-monkey:before{content:"\f6fb"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-moon-cloud:before{content:"\f754"}.fa-moon-stars:before{content:"\f755"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mountains:before{content:"\f6fd"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-alt:before{content:"\f8cd"}.fa-mouse-pointer:before{content:"\f245"}.fa-mp3-player:before{content:"\f8ce"}.fa-mug:before{content:"\f874"}.fa-mug-hot:before{content:"\f7b6"}.fa-mug-marshmallows:before{content:"\f7b7"}.fa-mug-tea:before{content:"\f875"}.fa-music:before{content:"\f001"}.fa-music-alt:before{content:"\f8cf"}.fa-music-alt-slash:before{content:"\f8d0"}.fa-music-slash:before{content:"\f8d1"}.fa-napster:before{content:"\f3d2"}.fa-narwhal:before{content:"\f6fe"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octagon:before{content:"\f306"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-oil-temp:before{content:"\f614"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-omega:before{content:"\f67a"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-ornament:before{content:"\f7b8"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-outlet:before{content:"\f91c"}.fa-oven:before{content:"\f91d"}.fa-overline:before{content:"\f876"}.fa-page-break:before{content:"\f877"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-brush-alt:before{content:"\f5a9"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-pallet-alt:before{content:"\f483"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-paragraph-rtl:before{content:"\f878"}.fa-parking:before{content:"\f540"}.fa-parking-circle:before{content:"\f615"}.fa-parking-circle-slash:before{content:"\f616"}.fa-parking-slash:before{content:"\f617"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paw-alt:before{content:"\f701"}.fa-paw-claws:before{content:"\f702"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pegasus:before{content:"\f703"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil:before{content:"\f040"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-paintbrush:before{content:"\f618"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-pennant:before{content:"\f456"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-person-carry:before{content:"\f4cf"}.fa-person-dolly:before{content:"\f4d0"}.fa-person-dolly-empty:before{content:"\f4d1"}.fa-person-sign:before{content:"\f757"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-laptop:before{content:"\f87a"}.fa-phone-office:before{content:"\f67d"}.fa-phone-plus:before{content:"\f4d2"}.fa-phone-rotary:before{content:"\f8d3"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pi:before{content:"\f67e"}.fa-piano:before{content:"\f8d4"}.fa-piano-keyboard:before{content:"\f8d5"}.fa-pie:before{content:"\f705"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\f91e"}.fa-pig:before{content:"\f706"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza:before{content:"\f817"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-alt:before{content:"\f3de"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-planet-moon:before{content:"\f91f"}.fa-planet-ringed:before{content:"\f920"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-hexagon:before{content:"\f300"}.fa-plus-octagon:before{content:"\f301"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-podium:before{content:"\f680"}.fa-podium-star:before{content:"\f758"}.fa-police-box:before{content:"\f921"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poll-people:before{content:"\f759"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-popcorn:before{content:"\f819"}.fa-portal-enter:before{content:"\f922"}.fa-portal-exit:before{content:"\f923"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-presentation:before{content:"\f685"}.fa-print:before{content:"\f02f"}.fa-print-search:before{content:"\f81a"}.fa-print-slash:before{content:"\f686"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-projector:before{content:"\f8d6"}.fa-pumpkin:before{content:"\f707"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-question-square:before{content:"\f2fd"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-rabbit:before{content:"\f708"}.fa-rabbit-fast:before{content:"\f709"}.fa-racquet:before{content:"\f45a"}.fa-radar:before{content:"\f924"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-radio:before{content:"\f8d7"}.fa-radio-alt:before{content:"\f8d8"}.fa-rainbow:before{content:"\f75b"}.fa-raindrops:before{content:"\f75c"}.fa-ram:before{content:"\f70a"}.fa-ramp-loading:before{content:"\f4d4"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-raygun:before{content:"\f925"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-rectangle-landscape:before{content:"\f2fa"}.fa-rectangle-portrait:before{content:"\f2fb"}.fa-rectangle-wide:before{content:"\f2fc"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-refrigerator:before{content:"\f926"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-repeat:before{content:"\f363"}.fa-repeat-1:before{content:"\f365"}.fa-repeat-1-alt:before{content:"\f366"}.fa-repeat-alt:before{content:"\f364"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-retweet-alt:before{content:"\f361"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-rings-wedding:before{content:"\f81b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocket-launch:before{content:"\f927"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-route-highway:before{content:"\f61a"}.fa-route-interstate:before{content:"\f61b"}.fa-router:before{content:"\f8da"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-triangle:before{content:"\f61c"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rv:before{content:"\f7be"}.fa-sack:before{content:"\f81c"}.fa-sack-dollar:before{content:"\f81d"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salad:before{content:"\f81e"}.fa-salesforce:before{content:"\f83b"}.fa-sandwich:before{content:"\f81f"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-sausage:before{content:"\f820"}.fa-save:before{content:"\f0c7"}.fa-sax-hot:before{content:"\f8db"}.fa-saxophone:before{content:"\f8dc"}.fa-scalpel:before{content:"\f61d"}.fa-scalpel-path:before{content:"\f61e"}.fa-scanner:before{content:"\f488"}.fa-scanner-image:before{content:"\f8f3"}.fa-scanner-keyboard:before{content:"\f489"}.fa-scanner-touchscreen:before{content:"\f48a"}.fa-scarecrow:before{content:"\f70d"}.fa-scarf:before{content:"\f7c1"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-scroll-old:before{content:"\f70f"}.fa-scrubber:before{content:"\f2f8"}.fa-scythe:before{content:"\f710"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-send-back:before{content:"\f87e"}.fa-send-backward:before{content:"\f87f"}.fa-sensor:before{content:"\f928"}.fa-sensor-alert:before{content:"\f929"}.fa-sensor-fire:before{content:"\f92a"}.fa-sensor-on:before{content:"\f92b"}.fa-sensor-smoke:before{content:"\f92c"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-all:before{content:"\f367"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-sheep:before{content:"\f711"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield:before{content:"\f132"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-check:before{content:"\f2f7"}.fa-shield-cross:before{content:"\f712"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shipping-timed:before{content:"\f48c"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shish-kebab:before{content:"\f821"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shovel:before{content:"\f713"}.fa-shovel-snow:before{content:"\f7c3"}.fa-shower:before{content:"\f2cc"}.fa-shredder:before{content:"\f68a"}.fa-shuttle-van:before{content:"\f5b6"}.fa-shuttlecock:before{content:"\f45b"}.fa-sickle:before{content:"\f822"}.fa-sigma:before{content:"\f68b"}.fa-sign:before{content:"\f4d9"}.fa-sign-in:before{content:"\f090"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out:before{content:"\f08b"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signal-1:before{content:"\f68c"}.fa-signal-2:before{content:"\f68d"}.fa-signal-3:before{content:"\f68e"}.fa-signal-4:before{content:"\f68f"}.fa-signal-alt:before{content:"\f690"}.fa-signal-alt-1:before{content:"\f691"}.fa-signal-alt-2:before{content:"\f692"}.fa-signal-alt-3:before{content:"\f693"}.fa-signal-alt-slash:before{content:"\f694"}.fa-signal-slash:before{content:"\f695"}.fa-signal-stream:before{content:"\f8dd"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-siren:before{content:"\f92d"}.fa-siren-on:before{content:"\f92e"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-skeleton:before{content:"\f620"}.fa-sketch:before{content:"\f7c6"}.fa-ski-jump:before{content:"\f7c7"}.fa-ski-lift:before{content:"\f7c8"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-cow:before{content:"\f8de"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sledding:before{content:"\f7cb"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-sliders-h-square:before{content:"\f3f0"}.fa-sliders-v:before{content:"\f3f1"}.fa-sliders-v-square:before{content:"\f3f2"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-plus:before{content:"\f5b9"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoke:before{content:"\f760"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snake:before{content:"\f716"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snooze:before{content:"\f880"}.fa-snow-blowing:before{content:"\f761"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowflakes:before{content:"\f7cf"}.fa-snowman:before{content:"\f7d0"}.fa-snowmobile:before{content:"\f7d1"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-solar-system:before{content:"\f92f"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-alt:before{content:"\f883"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-circle:before{content:"\f930"}.fa-sort-circle-down:before{content:"\f931"}.fa-sort-circle-up:before{content:"\f932"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-shapes-down:before{content:"\f888"}.fa-sort-shapes-down-alt:before{content:"\f889"}.fa-sort-shapes-up:before{content:"\f88a"}.fa-sort-shapes-up-alt:before{content:"\f88b"}.fa-sort-size-down:before{content:"\f88c"}.fa-sort-size-down-alt:before{content:"\f88d"}.fa-sort-size-up:before{content:"\f88e"}.fa-sort-size-up-alt:before{content:"\f88f"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-soup:before{content:"\f823"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-space-station-moon:before{content:"\f933"}.fa-space-station-moon-alt:before{content:"\f934"}.fa-spade:before{content:"\f2f4"}.fa-sparkles:before{content:"\f890"}.fa-speakap:before{content:"\f3f3"}.fa-speaker:before{content:"\f8df"}.fa-speaker-deck:before{content:"\f83c"}.fa-speakers:before{content:"\f8e0"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spider-black-widow:before{content:"\f718"}.fa-spider-web:before{content:"\f719"}.fa-spinner:before{content:"\f110"}.fa-spinner-third:before{content:"\f3f4"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-sprinkler:before{content:"\f935"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root:before{content:"\f697"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-squirrel:before{content:"\f71a"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-staff:before{content:"\f71b"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-christmas:before{content:"\f7d4"}.fa-star-exclamation:before{content:"\f2f3"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-star-shooting:before{content:"\f936"}.fa-starfighter:before{content:"\f937"}.fa-starfighter-alt:before{content:"\f938"}.fa-stars:before{content:"\f762"}.fa-starship:before{content:"\f939"}.fa-starship-freighter:before{content:"\f93a"}.fa-staylinked:before{content:"\f3f5"}.fa-steak:before{content:"\f824"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-steering-wheel:before{content:"\f622"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stocking:before{content:"\f7d5"}.fa-stomach:before{content:"\f623"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-stretcher:before{content:"\f825"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-sun-cloud:before{content:"\f763"}.fa-sun-dust:before{content:"\f764"}.fa-sun-haze:before{content:"\f765"}.fa-sunglasses:before{content:"\f892"}.fa-sunrise:before{content:"\f766"}.fa-sunset:before{content:"\f767"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-sword:before{content:"\f71c"}.fa-sword-laser:before{content:"\f93b"}.fa-sword-laser-alt:before{content:"\f93c"}.fa-swords:before{content:"\f71d"}.fa-swords-laser:before{content:"\f93d"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablet-android:before{content:"\f3fb"}.fa-tablet-android-alt:before{content:"\f3fc"}.fa-tablet-rugged:before{content:"\f48f"}.fa-tablets:before{content:"\f490"}.fa-tachometer:before{content:"\f0e4"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tachometer-alt-average:before{content:"\f624"}.fa-tachometer-alt-fast:before{content:"\f625"}.fa-tachometer-alt-fastest:before{content:"\f626"}.fa-tachometer-alt-slow:before{content:"\f627"}.fa-tachometer-alt-slowest:before{content:"\f628"}.fa-tachometer-average:before{content:"\f629"}.fa-tachometer-fast:before{content:"\f62a"}.fa-tachometer-fastest:before{content:"\f62b"}.fa-tachometer-slow:before{content:"\f62c"}.fa-tachometer-slowest:before{content:"\f62d"}.fa-taco:before{content:"\f826"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tally:before{content:"\f69c"}.fa-tanakh:before{content:"\f827"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-tasks-alt:before{content:"\f828"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-telescope:before{content:"\f93e"}.fa-temperature-down:before{content:"\f93f"}.fa-temperature-frigid:before{content:"\f768"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-hot:before{content:"\f76a"}.fa-temperature-low:before{content:"\f76b"}.fa-temperature-up:before{content:"\f940"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-tennis-ball:before{content:"\f45e"}.fa-terminal:before{content:"\f120"}.fa-text:before{content:"\f893"}.fa-text-height:before{content:"\f034"}.fa-text-size:before{content:"\f894"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-theta:before{content:"\f69e"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-thunderstorm:before{content:"\f76c"}.fa-thunderstorm-moon:before{content:"\f76d"}.fa-thunderstorm-sun:before{content:"\f76e"}.fa-ticket:before{content:"\f145"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tilde:before{content:"\f69f"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-times-hexagon:before{content:"\f2ee"}.fa-times-octagon:before{content:"\f2f0"}.fa-times-square:before{content:"\f2d3"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tire:before{content:"\f631"}.fa-tire-flat:before{content:"\f632"}.fa-tire-pressure-warning:before{content:"\f633"}.fa-tire-rugged:before{content:"\f634"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-alt:before{content:"\f71f"}.fa-tombstone:before{content:"\f720"}.fa-tombstone-alt:before{content:"\f721"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-toothbrush:before{content:"\f635"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tornado:before{content:"\f76f"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-cone:before{content:"\f636"}.fa-traffic-light:before{content:"\f637"}.fa-traffic-light-go:before{content:"\f638"}.fa-traffic-light-slow:before{content:"\f639"}.fa-traffic-light-stop:before{content:"\f63a"}.fa-trailer:before{content:"\f941"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-transporter:before{content:"\f942"}.fa-transporter-1:before{content:"\f943"}.fa-transporter-2:before{content:"\f944"}.fa-transporter-3:before{content:"\f945"}.fa-transporter-empty:before{content:"\f946"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-trash-undo:before{content:"\f895"}.fa-trash-undo-alt:before{content:"\f896"}.fa-treasure-chest:before{content:"\f723"}.fa-tree:before{content:"\f1bb"}.fa-tree-alt:before{content:"\f400"}.fa-tree-christmas:before{content:"\f7db"}.fa-tree-decorated:before{content:"\f7dc"}.fa-tree-large:before{content:"\f7dd"}.fa-tree-palm:before{content:"\f82b"}.fa-trees:before{content:"\f724"}.fa-trello:before{content:"\f181"}.fa-triangle:before{content:"\f2ec"}.fa-triangle-music:before{content:"\f8e2"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-trophy-alt:before{content:"\f2eb"}.fa-truck:before{content:"\f0d1"}.fa-truck-container:before{content:"\f4dc"}.fa-truck-couch:before{content:"\f4dd"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-truck-plow:before{content:"\f7de"}.fa-truck-ramp:before{content:"\f4e0"}.fa-trumpet:before{content:"\f8e3"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-turkey:before{content:"\f725"}.fa-turntable:before{content:"\f8e4"}.fa-turtle:before{content:"\f726"}.fa-tv:before{content:"\f26c"}.fa-tv-alt:before{content:"\f8e5"}.fa-tv-music:before{content:"\f8e6"}.fa-tv-retro:before{content:"\f401"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typewriter:before{content:"\f8e7"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-ufo:before{content:"\f947"}.fa-ufo-beam:before{content:"\f948"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-unicorn:before{content:"\f727"}.fa-union:before{content:"\f6a2"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\f949"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-usb-drive:before{content:"\f8e9"}.fa-usd-circle:before{content:"\f2e8"}.fa-usd-square:before{content:"\f2e9"}.fa-user:before{content:"\f007"}.fa-user-alien:before{content:"\f94a"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-chart:before{content:"\f6a3"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-cowboy:before{content:"\f8ea"}.fa-user-crown:before{content:"\f6a4"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-hard-hat:before{content:"\f82c"}.fa-user-headset:before{content:"\f82d"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-md-chat:before{content:"\f82e"}.fa-user-minus:before{content:"\f503"}.fa-user-music:before{content:"\f8eb"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-robot:before{content:"\f94b"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-user-visor:before{content:"\f94c"}.fa-users:before{content:"\f0c0"}.fa-users-class:before{content:"\f63d"}.fa-users-cog:before{content:"\f509"}.fa-users-crown:before{content:"\f6a5"}.fa-users-medical:before{content:"\f830"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-fork:before{content:"\f2e3"}.fa-utensil-knife:before{content:"\f2e4"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-utensils-alt:before{content:"\f2e6"}.fa-vaadin:before{content:"\f408"}.fa-vacuum:before{content:"\f94d"}.fa-vacuum-robot:before{content:"\f94e"}.fa-value-absolute:before{content:"\f6a6"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vhs:before{content:"\f8ec"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-plus:before{content:"\f4e1"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-violin:before{content:"\f8ed"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volcano:before{content:"\f770"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume:before{content:"\f6a8"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-slash:before{content:"\f2e2"}.fa-volume-up:before{content:"\f028"}.fa-vote-nay:before{content:"\f771"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-wagon-covered:before{content:"\f8ee"}.fa-walker:before{content:"\f831"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-wand:before{content:"\f72a"}.fa-wand-magic:before{content:"\f72b"}.fa-warehouse:before{content:"\f494"}.fa-warehouse-alt:before{content:"\f495"}.fa-washer:before{content:"\f898"}.fa-watch:before{content:"\f2e1"}.fa-watch-calculator:before{content:"\f8f0"}.fa-watch-fitness:before{content:"\f63e"}.fa-water:before{content:"\f773"}.fa-water-lower:before{content:"\f774"}.fa-water-rise:before{content:"\f775"}.fa-wave-sine:before{content:"\f899"}.fa-wave-square:before{content:"\f83e"}.fa-wave-triangle:before{content:"\f89a"}.fa-waveform:before{content:"\f8f1"}.fa-waveform-path:before{content:"\f8f2"}.fa-waze:before{content:"\f83f"}.fa-webcam:before{content:"\f832"}.fa-webcam-slash:before{content:"\f833"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whale:before{content:"\f72c"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheat:before{content:"\f72d"}.fa-wheelchair:before{content:"\f193"}.fa-whistle:before{content:"\f460"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wifi-1:before{content:"\f6aa"}.fa-wifi-2:before{content:"\f6ab"}.fa-wifi-slash:before{content:"\f6ac"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-wind-turbine:before{content:"\f89b"}.fa-wind-warning:before{content:"\f776"}.fa-window:before{content:"\f40e"}.fa-window-alt:before{content:"\f40f"}.fa-window-close:before{content:"\f410"}.fa-window-frame:before{content:"\f94f"}.fa-window-frame-open:before{content:"\f950"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-windsock:before{content:"\f777"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wreath:before{content:"\f7e2"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Duotone";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-duotone-900.eot);src:url(../webfonts/fa-duotone-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-duotone-900.woff2) format("woff2"),url(../webfonts/fa-duotone-900.woff) format("woff"),url(../webfonts/fa-duotone-900.ttf) format("truetype"),url(../webfonts/fa-duotone-900.svg#fontawesome) format("svg")}.fad{position:relative;font-family:"Font Awesome 5 Duotone";font-weight:900}.fad:before{position:absolute;color:var(--fa-primary-color,inherit);opacity:1;opacity:var(--fa-primary-opacity,1)}.fad:after{color:var(--fa-secondary-color,inherit)}.fa-swap-opacity .fad:before,.fad.fa-swap-opacity:before,.fad:after{opacity:.4;opacity:var(--fa-secondary-opacity,.4)}.fa-swap-opacity .fad:after,.fad.fa-swap-opacity:after{opacity:1;opacity:var(--fa-primary-opacity,1)}.fad.fa-inverse{color:#fff}.fad.fa-stack-1x,.fad.fa-stack-2x{position:absolute}.fad.fa-fw:before,.fad.fa-stack-1x:before,.fad.fa-stack-2x:before{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.fad.fa-abacus:after{content:"\10f640"}.fad.fa-acorn:after{content:"\10f6ae"}.fad.fa-ad:after{content:"\10f641"}.fad.fa-address-book:after{content:"\10f2b9"}.fad.fa-address-card:after{content:"\10f2bb"}.fad.fa-adjust:after{content:"\10f042"}.fad.fa-air-conditioner:after{content:"\10f8f4"}.fad.fa-air-freshener:after{content:"\10f5d0"}.fad.fa-alarm-clock:after{content:"\10f34e"}.fad.fa-alarm-exclamation:after{content:"\10f843"}.fad.fa-alarm-plus:after{content:"\10f844"}.fad.fa-alarm-snooze:after{content:"\10f845"}.fad.fa-album:after{content:"\10f89f"}.fad.fa-album-collection:after{content:"\10f8a0"}.fad.fa-alicorn:after{content:"\10f6b0"}.fad.fa-alien:after{content:"\10f8f5"}.fad.fa-alien-monster:after{content:"\10f8f6"}.fad.fa-align-center:after{content:"\10f037"}.fad.fa-align-justify:after{content:"\10f039"}.fad.fa-align-left:after{content:"\10f036"}.fad.fa-align-right:after{content:"\10f038"}.fad.fa-align-slash:after{content:"\10f846"}.fad.fa-allergies:after{content:"\10f461"}.fad.fa-ambulance:after{content:"\10f0f9"}.fad.fa-american-sign-language-interpreting:after{content:"\10f2a3"}.fad.fa-amp-guitar:after{content:"\10f8a1"}.fad.fa-analytics:after{content:"\10f643"}.fad.fa-anchor:after{content:"\10f13d"}.fad.fa-angel:after{content:"\10f779"}.fad.fa-angle-double-down:after{content:"\10f103"}.fad.fa-angle-double-left:after{content:"\10f100"}.fad.fa-angle-double-right:after{content:"\10f101"}.fad.fa-angle-double-up:after{content:"\10f102"}.fad.fa-angle-down:after{content:"\10f107"}.fad.fa-angle-left:after{content:"\10f104"}.fad.fa-angle-right:after{content:"\10f105"}.fad.fa-angle-up:after{content:"\10f106"}.fad.fa-angry:after{content:"\10f556"}.fad.fa-ankh:after{content:"\10f644"}.fad.fa-apple-alt:after{content:"\10f5d1"}.fad.fa-apple-crate:after{content:"\10f6b1"}.fad.fa-archive:after{content:"\10f187"}.fad.fa-archway:after{content:"\10f557"}.fad.fa-arrow-alt-circle-down:after{content:"\10f358"}.fad.fa-arrow-alt-circle-left:after{content:"\10f359"}.fad.fa-arrow-alt-circle-right:after{content:"\10f35a"}.fad.fa-arrow-alt-circle-up:after{content:"\10f35b"}.fad.fa-arrow-alt-down:after{content:"\10f354"}.fad.fa-arrow-alt-from-bottom:after{content:"\10f346"}.fad.fa-arrow-alt-from-left:after{content:"\10f347"}.fad.fa-arrow-alt-from-right:after{content:"\10f348"}.fad.fa-arrow-alt-from-top:after{content:"\10f349"}.fad.fa-arrow-alt-left:after{content:"\10f355"}.fad.fa-arrow-alt-right:after{content:"\10f356"}.fad.fa-arrow-alt-square-down:after{content:"\10f350"}.fad.fa-arrow-alt-square-left:after{content:"\10f351"}.fad.fa-arrow-alt-square-right:after{content:"\10f352"}.fad.fa-arrow-alt-square-up:after{content:"\10f353"}.fad.fa-arrow-alt-to-bottom:after{content:"\10f34a"}.fad.fa-arrow-alt-to-left:after{content:"\10f34b"}.fad.fa-arrow-alt-to-right:after{content:"\10f34c"}.fad.fa-arrow-alt-to-top:after{content:"\10f34d"}.fad.fa-arrow-alt-up:after{content:"\10f357"}.fad.fa-arrow-circle-down:after{content:"\10f0ab"}.fad.fa-arrow-circle-left:after{content:"\10f0a8"}.fad.fa-arrow-circle-right:after{content:"\10f0a9"}.fad.fa-arrow-circle-up:after{content:"\10f0aa"}.fad.fa-arrow-down:after{content:"\10f063"}.fad.fa-arrow-from-bottom:after{content:"\10f342"}.fad.fa-arrow-from-left:after{content:"\10f343"}.fad.fa-arrow-from-right:after{content:"\10f344"}.fad.fa-arrow-from-top:after{content:"\10f345"}.fad.fa-arrow-left:after{content:"\10f060"}.fad.fa-arrow-right:after{content:"\10f061"}.fad.fa-arrow-square-down:after{content:"\10f339"}.fad.fa-arrow-square-left:after{content:"\10f33a"}.fad.fa-arrow-square-right:after{content:"\10f33b"}.fad.fa-arrow-square-up:after{content:"\10f33c"}.fad.fa-arrow-to-bottom:after{content:"\10f33d"}.fad.fa-arrow-to-left:after{content:"\10f33e"}.fad.fa-arrow-to-right:after{content:"\10f340"}.fad.fa-arrow-to-top:after{content:"\10f341"}.fad.fa-arrow-up:after{content:"\10f062"}.fad.fa-arrows:after{content:"\10f047"}.fad.fa-arrows-alt:after{content:"\10f0b2"}.fad.fa-arrows-alt-h:after{content:"\10f337"}.fad.fa-arrows-alt-v:after{content:"\10f338"}.fad.fa-arrows-h:after{content:"\10f07e"}.fad.fa-arrows-v:after{content:"\10f07d"}.fad.fa-assistive-listening-systems:after{content:"\10f2a2"}.fad.fa-asterisk:after{content:"\10f069"}.fad.fa-at:after{content:"\10f1fa"}.fad.fa-atlas:after{content:"\10f558"}.fad.fa-atom:after{content:"\10f5d2"}.fad.fa-atom-alt:after{content:"\10f5d3"}.fad.fa-audio-description:after{content:"\10f29e"}.fad.fa-award:after{content:"\10f559"}.fad.fa-axe:after{content:"\10f6b2"}.fad.fa-axe-battle:after{content:"\10f6b3"}.fad.fa-baby:after{content:"\10f77c"}.fad.fa-baby-carriage:after{content:"\10f77d"}.fad.fa-backpack:after{content:"\10f5d4"}.fad.fa-backspace:after{content:"\10f55a"}.fad.fa-backward:after{content:"\10f04a"}.fad.fa-bacon:after{content:"\10f7e5"}.fad.fa-badge:after{content:"\10f335"}.fad.fa-badge-check:after{content:"\10f336"}.fad.fa-badge-dollar:after{content:"\10f645"}.fad.fa-badge-percent:after{content:"\10f646"}.fad.fa-badge-sheriff:after{content:"\10f8a2"}.fad.fa-badger-honey:after{content:"\10f6b4"}.fad.fa-bags-shopping:after{content:"\10f847"}.fad.fa-bahai:after{content:"\10f666"}.fad.fa-balance-scale:after{content:"\10f24e"}.fad.fa-balance-scale-left:after{content:"\10f515"}.fad.fa-balance-scale-right:after{content:"\10f516"}.fad.fa-ball-pile:after{content:"\10f77e"}.fad.fa-ballot:after{content:"\10f732"}.fad.fa-ballot-check:after{content:"\10f733"}.fad.fa-ban:after{content:"\10f05e"}.fad.fa-band-aid:after{content:"\10f462"}.fad.fa-banjo:after{content:"\10f8a3"}.fad.fa-barcode:after{content:"\10f02a"}.fad.fa-barcode-alt:after{content:"\10f463"}.fad.fa-barcode-read:after{content:"\10f464"}.fad.fa-barcode-scan:after{content:"\10f465"}.fad.fa-bars:after{content:"\10f0c9"}.fad.fa-baseball:after{content:"\10f432"}.fad.fa-baseball-ball:after{content:"\10f433"}.fad.fa-basketball-ball:after{content:"\10f434"}.fad.fa-basketball-hoop:after{content:"\10f435"}.fad.fa-bat:after{content:"\10f6b5"}.fad.fa-bath:after{content:"\10f2cd"}.fad.fa-battery-bolt:after{content:"\10f376"}.fad.fa-battery-empty:after{content:"\10f244"}.fad.fa-battery-full:after{content:"\10f240"}.fad.fa-battery-half:after{content:"\10f242"}.fad.fa-battery-quarter:after{content:"\10f243"}.fad.fa-battery-slash:after{content:"\10f377"}.fad.fa-battery-three-quarters:after{content:"\10f241"}.fad.fa-bed:after{content:"\10f236"}.fad.fa-bed-alt:after{content:"\10f8f7"}.fad.fa-bed-bunk:after{content:"\10f8f8"}.fad.fa-bed-empty:after{content:"\10f8f9"}.fad.fa-beer:after{content:"\10f0fc"}.fad.fa-bell:after{content:"\10f0f3"}.fad.fa-bell-exclamation:after{content:"\10f848"}.fad.fa-bell-on:after{content:"\10f8fa"}.fad.fa-bell-plus:after{content:"\10f849"}.fad.fa-bell-school:after{content:"\10f5d5"}.fad.fa-bell-school-slash:after{content:"\10f5d6"}.fad.fa-bell-slash:after{content:"\10f1f6"}.fad.fa-bells:after{content:"\10f77f"}.fad.fa-betamax:after{content:"\10f8a4"}.fad.fa-bezier-curve:after{content:"\10f55b"}.fad.fa-bible:after{content:"\10f647"}.fad.fa-bicycle:after{content:"\10f206"}.fad.fa-biking:after{content:"\10f84a"}.fad.fa-biking-mountain:after{content:"\10f84b"}.fad.fa-binoculars:after{content:"\10f1e5"}.fad.fa-biohazard:after{content:"\10f780"}.fad.fa-birthday-cake:after{content:"\10f1fd"}.fad.fa-blanket:after{content:"\10f498"}.fad.fa-blender:after{content:"\10f517"}.fad.fa-blender-phone:after{content:"\10f6b6"}.fad.fa-blind:after{content:"\10f29d"}.fad.fa-blinds:after{content:"\10f8fb"}.fad.fa-blinds-open:after{content:"\10f8fc"}.fad.fa-blinds-raised:after{content:"\10f8fd"}.fad.fa-blog:after{content:"\10f781"}.fad.fa-bold:after{content:"\10f032"}.fad.fa-bolt:after{content:"\10f0e7"}.fad.fa-bomb:after{content:"\10f1e2"}.fad.fa-bone:after{content:"\10f5d7"}.fad.fa-bone-break:after{content:"\10f5d8"}.fad.fa-bong:after{content:"\10f55c"}.fad.fa-book:after{content:"\10f02d"}.fad.fa-book-alt:after{content:"\10f5d9"}.fad.fa-book-dead:after{content:"\10f6b7"}.fad.fa-book-heart:after{content:"\10f499"}.fad.fa-book-medical:after{content:"\10f7e6"}.fad.fa-book-open:after{content:"\10f518"}.fad.fa-book-reader:after{content:"\10f5da"}.fad.fa-book-spells:after{content:"\10f6b8"}.fad.fa-book-user:after{content:"\10f7e7"}.fad.fa-bookmark:after{content:"\10f02e"}.fad.fa-books:after{content:"\10f5db"}.fad.fa-books-medical:after{content:"\10f7e8"}.fad.fa-boombox:after{content:"\10f8a5"}.fad.fa-boot:after{content:"\10f782"}.fad.fa-booth-curtain:after{content:"\10f734"}.fad.fa-border-all:after{content:"\10f84c"}.fad.fa-border-bottom:after{content:"\10f84d"}.fad.fa-border-center-h:after{content:"\10f89c"}.fad.fa-border-center-v:after{content:"\10f89d"}.fad.fa-border-inner:after{content:"\10f84e"}.fad.fa-border-left:after{content:"\10f84f"}.fad.fa-border-none:after{content:"\10f850"}.fad.fa-border-outer:after{content:"\10f851"}.fad.fa-border-right:after{content:"\10f852"}.fad.fa-border-style:after{content:"\10f853"}.fad.fa-border-style-alt:after{content:"\10f854"}.fad.fa-border-top:after{content:"\10f855"}.fad.fa-bow-arrow:after{content:"\10f6b9"}.fad.fa-bowling-ball:after{content:"\10f436"}.fad.fa-bowling-pins:after{content:"\10f437"}.fad.fa-box:after{content:"\10f466"}.fad.fa-box-alt:after{content:"\10f49a"}.fad.fa-box-ballot:after{content:"\10f735"}.fad.fa-box-check:after{content:"\10f467"}.fad.fa-box-fragile:after{content:"\10f49b"}.fad.fa-box-full:after{content:"\10f49c"}.fad.fa-box-heart:after{content:"\10f49d"}.fad.fa-box-open:after{content:"\10f49e"}.fad.fa-box-up:after{content:"\10f49f"}.fad.fa-box-usd:after{content:"\10f4a0"}.fad.fa-boxes:after{content:"\10f468"}.fad.fa-boxes-alt:after{content:"\10f4a1"}.fad.fa-boxing-glove:after{content:"\10f438"}.fad.fa-brackets:after{content:"\10f7e9"}.fad.fa-brackets-curly:after{content:"\10f7ea"}.fad.fa-braille:after{content:"\10f2a1"}.fad.fa-brain:after{content:"\10f5dc"}.fad.fa-bread-loaf:after{content:"\10f7eb"}.fad.fa-bread-slice:after{content:"\10f7ec"}.fad.fa-briefcase:after{content:"\10f0b1"}.fad.fa-briefcase-medical:after{content:"\10f469"}.fad.fa-bring-forward:after{content:"\10f856"}.fad.fa-bring-front:after{content:"\10f857"}.fad.fa-broadcast-tower:after{content:"\10f519"}.fad.fa-broom:after{content:"\10f51a"}.fad.fa-browser:after{content:"\10f37e"}.fad.fa-brush:after{content:"\10f55d"}.fad.fa-bug:after{content:"\10f188"}.fad.fa-building:after{content:"\10f1ad"}.fad.fa-bullhorn:after{content:"\10f0a1"}.fad.fa-bullseye:after{content:"\10f140"}.fad.fa-bullseye-arrow:after{content:"\10f648"}.fad.fa-bullseye-pointer:after{content:"\10f649"}.fad.fa-burger-soda:after{content:"\10f858"}.fad.fa-burn:after{content:"\10f46a"}.fad.fa-burrito:after{content:"\10f7ed"}.fad.fa-bus:after{content:"\10f207"}.fad.fa-bus-alt:after{content:"\10f55e"}.fad.fa-bus-school:after{content:"\10f5dd"}.fad.fa-business-time:after{content:"\10f64a"}.fad.fa-cabinet-filing:after{content:"\10f64b"}.fad.fa-cactus:after{content:"\10f8a7"}.fad.fa-calculator:after{content:"\10f1ec"}.fad.fa-calculator-alt:after{content:"\10f64c"}.fad.fa-calendar:after{content:"\10f133"}.fad.fa-calendar-alt:after{content:"\10f073"}.fad.fa-calendar-check:after{content:"\10f274"}.fad.fa-calendar-day:after{content:"\10f783"}.fad.fa-calendar-edit:after{content:"\10f333"}.fad.fa-calendar-exclamation:after{content:"\10f334"}.fad.fa-calendar-minus:after{content:"\10f272"}.fad.fa-calendar-plus:after{content:"\10f271"}.fad.fa-calendar-star:after{content:"\10f736"}.fad.fa-calendar-times:after{content:"\10f273"}.fad.fa-calendar-week:after{content:"\10f784"}.fad.fa-camcorder:after{content:"\10f8a8"}.fad.fa-camera:after{content:"\10f030"}.fad.fa-camera-alt:after{content:"\10f332"}.fad.fa-camera-home:after{content:"\10f8fe"}.fad.fa-camera-movie:after{content:"\10f8a9"}.fad.fa-camera-polaroid:after{content:"\10f8aa"}.fad.fa-camera-retro:after{content:"\10f083"}.fad.fa-campfire:after{content:"\10f6ba"}.fad.fa-campground:after{content:"\10f6bb"}.fad.fa-candle-holder:after{content:"\10f6bc"}.fad.fa-candy-cane:after{content:"\10f786"}.fad.fa-candy-corn:after{content:"\10f6bd"}.fad.fa-cannabis:after{content:"\10f55f"}.fad.fa-capsules:after{content:"\10f46b"}.fad.fa-car:after{content:"\10f1b9"}.fad.fa-car-alt:after{content:"\10f5de"}.fad.fa-car-battery:after{content:"\10f5df"}.fad.fa-car-building:after{content:"\10f859"}.fad.fa-car-bump:after{content:"\10f5e0"}.fad.fa-car-bus:after{content:"\10f85a"}.fad.fa-car-crash:after{content:"\10f5e1"}.fad.fa-car-garage:after{content:"\10f5e2"}.fad.fa-car-mechanic:after{content:"\10f5e3"}.fad.fa-car-side:after{content:"\10f5e4"}.fad.fa-car-tilt:after{content:"\10f5e5"}.fad.fa-car-wash:after{content:"\10f5e6"}.fad.fa-caravan:after{content:"\10f8ff"}.fad.fa-caravan-alt:after{content:"\10f900"}.fad.fa-caret-circle-down:after{content:"\10f32d"}.fad.fa-caret-circle-left:after{content:"\10f32e"}.fad.fa-caret-circle-right:after{content:"\10f330"}.fad.fa-caret-circle-up:after{content:"\10f331"}.fad.fa-caret-down:after{content:"\10f0d7"}.fad.fa-caret-left:after{content:"\10f0d9"}.fad.fa-caret-right:after{content:"\10f0da"}.fad.fa-caret-square-down:after{content:"\10f150"}.fad.fa-caret-square-left:after{content:"\10f191"}.fad.fa-caret-square-right:after{content:"\10f152"}.fad.fa-caret-square-up:after{content:"\10f151"}.fad.fa-caret-up:after{content:"\10f0d8"}.fad.fa-carrot:after{content:"\10f787"}.fad.fa-cars:after{content:"\10f85b"}.fad.fa-cart-arrow-down:after{content:"\10f218"}.fad.fa-cart-plus:after{content:"\10f217"}.fad.fa-cash-register:after{content:"\10f788"}.fad.fa-cassette-tape:after{content:"\10f8ab"}.fad.fa-cat:after{content:"\10f6be"}.fad.fa-cat-space:after{content:"\10f901"}.fad.fa-cauldron:after{content:"\10f6bf"}.fad.fa-cctv:after{content:"\10f8ac"}.fad.fa-certificate:after{content:"\10f0a3"}.fad.fa-chair:after{content:"\10f6c0"}.fad.fa-chair-office:after{content:"\10f6c1"}.fad.fa-chalkboard:after{content:"\10f51b"}.fad.fa-chalkboard-teacher:after{content:"\10f51c"}.fad.fa-charging-station:after{content:"\10f5e7"}.fad.fa-chart-area:after{content:"\10f1fe"}.fad.fa-chart-bar:after{content:"\10f080"}.fad.fa-chart-line:after{content:"\10f201"}.fad.fa-chart-line-down:after{content:"\10f64d"}.fad.fa-chart-network:after{content:"\10f78a"}.fad.fa-chart-pie:after{content:"\10f200"}.fad.fa-chart-pie-alt:after{content:"\10f64e"}.fad.fa-chart-scatter:after{content:"\10f7ee"}.fad.fa-check:after{content:"\10f00c"}.fad.fa-check-circle:after{content:"\10f058"}.fad.fa-check-double:after{content:"\10f560"}.fad.fa-check-square:after{content:"\10f14a"}.fad.fa-cheese:after{content:"\10f7ef"}.fad.fa-cheese-swiss:after{content:"\10f7f0"}.fad.fa-cheeseburger:after{content:"\10f7f1"}.fad.fa-chess:after{content:"\10f439"}.fad.fa-chess-bishop:after{content:"\10f43a"}.fad.fa-chess-bishop-alt:after{content:"\10f43b"}.fad.fa-chess-board:after{content:"\10f43c"}.fad.fa-chess-clock:after{content:"\10f43d"}.fad.fa-chess-clock-alt:after{content:"\10f43e"}.fad.fa-chess-king:after{content:"\10f43f"}.fad.fa-chess-king-alt:after{content:"\10f440"}.fad.fa-chess-knight:after{content:"\10f441"}.fad.fa-chess-knight-alt:after{content:"\10f442"}.fad.fa-chess-pawn:after{content:"\10f443"}.fad.fa-chess-pawn-alt:after{content:"\10f444"}.fad.fa-chess-queen:after{content:"\10f445"}.fad.fa-chess-queen-alt:after{content:"\10f446"}.fad.fa-chess-rook:after{content:"\10f447"}.fad.fa-chess-rook-alt:after{content:"\10f448"}.fad.fa-chevron-circle-down:after{content:"\10f13a"}.fad.fa-chevron-circle-left:after{content:"\10f137"}.fad.fa-chevron-circle-right:after{content:"\10f138"}.fad.fa-chevron-circle-up:after{content:"\10f139"}.fad.fa-chevron-double-down:after{content:"\10f322"}.fad.fa-chevron-double-left:after{content:"\10f323"}.fad.fa-chevron-double-right:after{content:"\10f324"}.fad.fa-chevron-double-up:after{content:"\10f325"}.fad.fa-chevron-down:after{content:"\10f078"}.fad.fa-chevron-left:after{content:"\10f053"}.fad.fa-chevron-right:after{content:"\10f054"}.fad.fa-chevron-square-down:after{content:"\10f329"}.fad.fa-chevron-square-left:after{content:"\10f32a"}.fad.fa-chevron-square-right:after{content:"\10f32b"}.fad.fa-chevron-square-up:after{content:"\10f32c"}.fad.fa-chevron-up:after{content:"\10f077"}.fad.fa-child:after{content:"\10f1ae"}.fad.fa-chimney:after{content:"\10f78b"}.fad.fa-church:after{content:"\10f51d"}.fad.fa-circle:after{content:"\10f111"}.fad.fa-circle-notch:after{content:"\10f1ce"}.fad.fa-city:after{content:"\10f64f"}.fad.fa-clarinet:after{content:"\10f8ad"}.fad.fa-claw-marks:after{content:"\10f6c2"}.fad.fa-clinic-medical:after{content:"\10f7f2"}.fad.fa-clipboard:after{content:"\10f328"}.fad.fa-clipboard-check:after{content:"\10f46c"}.fad.fa-clipboard-list:after{content:"\10f46d"}.fad.fa-clipboard-list-check:after{content:"\10f737"}.fad.fa-clipboard-prescription:after{content:"\10f5e8"}.fad.fa-clipboard-user:after{content:"\10f7f3"}.fad.fa-clock:after{content:"\10f017"}.fad.fa-clone:after{content:"\10f24d"}.fad.fa-closed-captioning:after{content:"\10f20a"}.fad.fa-cloud:after{content:"\10f0c2"}.fad.fa-cloud-download:after{content:"\10f0ed"}.fad.fa-cloud-download-alt:after{content:"\10f381"}.fad.fa-cloud-drizzle:after{content:"\10f738"}.fad.fa-cloud-hail:after{content:"\10f739"}.fad.fa-cloud-hail-mixed:after{content:"\10f73a"}.fad.fa-cloud-meatball:after{content:"\10f73b"}.fad.fa-cloud-moon:after{content:"\10f6c3"}.fad.fa-cloud-moon-rain:after{content:"\10f73c"}.fad.fa-cloud-music:after{content:"\10f8ae"}.fad.fa-cloud-rain:after{content:"\10f73d"}.fad.fa-cloud-rainbow:after{content:"\10f73e"}.fad.fa-cloud-showers:after{content:"\10f73f"}.fad.fa-cloud-showers-heavy:after{content:"\10f740"}.fad.fa-cloud-sleet:after{content:"\10f741"}.fad.fa-cloud-snow:after{content:"\10f742"}.fad.fa-cloud-sun:after{content:"\10f6c4"}.fad.fa-cloud-sun-rain:after{content:"\10f743"}.fad.fa-cloud-upload:after{content:"\10f0ee"}.fad.fa-cloud-upload-alt:after{content:"\10f382"}.fad.fa-clouds:after{content:"\10f744"}.fad.fa-clouds-moon:after{content:"\10f745"}.fad.fa-clouds-sun:after{content:"\10f746"}.fad.fa-club:after{content:"\10f327"}.fad.fa-cocktail:after{content:"\10f561"}.fad.fa-code:after{content:"\10f121"}.fad.fa-code-branch:after{content:"\10f126"}.fad.fa-code-commit:after{content:"\10f386"}.fad.fa-code-merge:after{content:"\10f387"}.fad.fa-coffee:after{content:"\10f0f4"}.fad.fa-coffee-pot:after{content:"\10f902"}.fad.fa-coffee-togo:after{content:"\10f6c5"}.fad.fa-coffin:after{content:"\10f6c6"}.fad.fa-cog:after{content:"\10f013"}.fad.fa-cogs:after{content:"\10f085"}.fad.fa-coin:after{content:"\10f85c"}.fad.fa-coins:after{content:"\10f51e"}.fad.fa-columns:after{content:"\10f0db"}.fad.fa-comet:after{content:"\10f903"}.fad.fa-comment:after{content:"\10f075"}.fad.fa-comment-alt:after{content:"\10f27a"}.fad.fa-comment-alt-check:after{content:"\10f4a2"}.fad.fa-comment-alt-dollar:after{content:"\10f650"}.fad.fa-comment-alt-dots:after{content:"\10f4a3"}.fad.fa-comment-alt-edit:after{content:"\10f4a4"}.fad.fa-comment-alt-exclamation:after{content:"\10f4a5"}.fad.fa-comment-alt-lines:after{content:"\10f4a6"}.fad.fa-comment-alt-medical:after{content:"\10f7f4"}.fad.fa-comment-alt-minus:after{content:"\10f4a7"}.fad.fa-comment-alt-music:after{content:"\10f8af"}.fad.fa-comment-alt-plus:after{content:"\10f4a8"}.fad.fa-comment-alt-slash:after{content:"\10f4a9"}.fad.fa-comment-alt-smile:after{content:"\10f4aa"}.fad.fa-comment-alt-times:after{content:"\10f4ab"}.fad.fa-comment-check:after{content:"\10f4ac"}.fad.fa-comment-dollar:after{content:"\10f651"}.fad.fa-comment-dots:after{content:"\10f4ad"}.fad.fa-comment-edit:after{content:"\10f4ae"}.fad.fa-comment-exclamation:after{content:"\10f4af"}.fad.fa-comment-lines:after{content:"\10f4b0"}.fad.fa-comment-medical:after{content:"\10f7f5"}.fad.fa-comment-minus:after{content:"\10f4b1"}.fad.fa-comment-music:after{content:"\10f8b0"}.fad.fa-comment-plus:after{content:"\10f4b2"}.fad.fa-comment-slash:after{content:"\10f4b3"}.fad.fa-comment-smile:after{content:"\10f4b4"}.fad.fa-comment-times:after{content:"\10f4b5"}.fad.fa-comments:after{content:"\10f086"}.fad.fa-comments-alt:after{content:"\10f4b6"}.fad.fa-comments-alt-dollar:after{content:"\10f652"}.fad.fa-comments-dollar:after{content:"\10f653"}.fad.fa-compact-disc:after{content:"\10f51f"}.fad.fa-compass:after{content:"\10f14e"}.fad.fa-compass-slash:after{content:"\10f5e9"}.fad.fa-compress:after{content:"\10f066"}.fad.fa-compress-alt:after{content:"\10f422"}.fad.fa-compress-arrows-alt:after{content:"\10f78c"}.fad.fa-compress-wide:after{content:"\10f326"}.fad.fa-computer-classic:after{content:"\10f8b1"}.fad.fa-computer-speaker:after{content:"\10f8b2"}.fad.fa-concierge-bell:after{content:"\10f562"}.fad.fa-construction:after{content:"\10f85d"}.fad.fa-container-storage:after{content:"\10f4b7"}.fad.fa-conveyor-belt:after{content:"\10f46e"}.fad.fa-conveyor-belt-alt:after{content:"\10f46f"}.fad.fa-cookie:after{content:"\10f563"}.fad.fa-cookie-bite:after{content:"\10f564"}.fad.fa-copy:after{content:"\10f0c5"}.fad.fa-copyright:after{content:"\10f1f9"}.fad.fa-corn:after{content:"\10f6c7"}.fad.fa-couch:after{content:"\10f4b8"}.fad.fa-cow:after{content:"\10f6c8"}.fad.fa-cowbell:after{content:"\10f8b3"}.fad.fa-cowbell-more:after{content:"\10f8b4"}.fad.fa-credit-card:after{content:"\10f09d"}.fad.fa-credit-card-blank:after{content:"\10f389"}.fad.fa-credit-card-front:after{content:"\10f38a"}.fad.fa-cricket:after{content:"\10f449"}.fad.fa-croissant:after{content:"\10f7f6"}.fad.fa-crop:after{content:"\10f125"}.fad.fa-crop-alt:after{content:"\10f565"}.fad.fa-cross:after{content:"\10f654"}.fad.fa-crosshairs:after{content:"\10f05b"}.fad.fa-crow:after{content:"\10f520"}.fad.fa-crown:after{content:"\10f521"}.fad.fa-crutch:after{content:"\10f7f7"}.fad.fa-crutches:after{content:"\10f7f8"}.fad.fa-cube:after{content:"\10f1b2"}.fad.fa-cubes:after{content:"\10f1b3"}.fad.fa-curling:after{content:"\10f44a"}.fad.fa-cut:after{content:"\10f0c4"}.fad.fa-dagger:after{content:"\10f6cb"}.fad.fa-database:after{content:"\10f1c0"}.fad.fa-deaf:after{content:"\10f2a4"}.fad.fa-debug:after{content:"\10f7f9"}.fad.fa-deer:after{content:"\10f78e"}.fad.fa-deer-rudolph:after{content:"\10f78f"}.fad.fa-democrat:after{content:"\10f747"}.fad.fa-desktop:after{content:"\10f108"}.fad.fa-desktop-alt:after{content:"\10f390"}.fad.fa-dewpoint:after{content:"\10f748"}.fad.fa-dharmachakra:after{content:"\10f655"}.fad.fa-diagnoses:after{content:"\10f470"}.fad.fa-diamond:after{content:"\10f219"}.fad.fa-dice:after{content:"\10f522"}.fad.fa-dice-d10:after{content:"\10f6cd"}.fad.fa-dice-d12:after{content:"\10f6ce"}.fad.fa-dice-d20:after{content:"\10f6cf"}.fad.fa-dice-d4:after{content:"\10f6d0"}.fad.fa-dice-d6:after{content:"\10f6d1"}.fad.fa-dice-d8:after{content:"\10f6d2"}.fad.fa-dice-five:after{content:"\10f523"}.fad.fa-dice-four:after{content:"\10f524"}.fad.fa-dice-one:after{content:"\10f525"}.fad.fa-dice-six:after{content:"\10f526"}.fad.fa-dice-three:after{content:"\10f527"}.fad.fa-dice-two:after{content:"\10f528"}.fad.fa-digging:after{content:"\10f85e"}.fad.fa-digital-tachograph:after{content:"\10f566"}.fad.fa-diploma:after{content:"\10f5ea"}.fad.fa-directions:after{content:"\10f5eb"}.fad.fa-disc-drive:after{content:"\10f8b5"}.fad.fa-disease:after{content:"\10f7fa"}.fad.fa-divide:after{content:"\10f529"}.fad.fa-dizzy:after{content:"\10f567"}.fad.fa-dna:after{content:"\10f471"}.fad.fa-do-not-enter:after{content:"\10f5ec"}.fad.fa-dog:after{content:"\10f6d3"}.fad.fa-dog-leashed:after{content:"\10f6d4"}.fad.fa-dollar-sign:after{content:"\10f155"}.fad.fa-dolly:after{content:"\10f472"}.fad.fa-dolly-empty:after{content:"\10f473"}.fad.fa-dolly-flatbed:after{content:"\10f474"}.fad.fa-dolly-flatbed-alt:after{content:"\10f475"}.fad.fa-dolly-flatbed-empty:after{content:"\10f476"}.fad.fa-donate:after{content:"\10f4b9"}.fad.fa-door-closed:after{content:"\10f52a"}.fad.fa-door-open:after{content:"\10f52b"}.fad.fa-dot-circle:after{content:"\10f192"}.fad.fa-dove:after{content:"\10f4ba"}.fad.fa-download:after{content:"\10f019"}.fad.fa-drafting-compass:after{content:"\10f568"}.fad.fa-dragon:after{content:"\10f6d5"}.fad.fa-draw-circle:after{content:"\10f5ed"}.fad.fa-draw-polygon:after{content:"\10f5ee"}.fad.fa-draw-square:after{content:"\10f5ef"}.fad.fa-dreidel:after{content:"\10f792"}.fad.fa-drone:after{content:"\10f85f"}.fad.fa-drone-alt:after{content:"\10f860"}.fad.fa-drum:after{content:"\10f569"}.fad.fa-drum-steelpan:after{content:"\10f56a"}.fad.fa-drumstick:after{content:"\10f6d6"}.fad.fa-drumstick-bite:after{content:"\10f6d7"}.fad.fa-dryer:after{content:"\10f861"}.fad.fa-dryer-alt:after{content:"\10f862"}.fad.fa-duck:after{content:"\10f6d8"}.fad.fa-dumbbell:after{content:"\10f44b"}.fad.fa-dumpster:after{content:"\10f793"}.fad.fa-dumpster-fire:after{content:"\10f794"}.fad.fa-dungeon:after{content:"\10f6d9"}.fad.fa-ear:after{content:"\10f5f0"}.fad.fa-ear-muffs:after{content:"\10f795"}.fad.fa-eclipse:after{content:"\10f749"}.fad.fa-eclipse-alt:after{content:"\10f74a"}.fad.fa-edit:after{content:"\10f044"}.fad.fa-egg:after{content:"\10f7fb"}.fad.fa-egg-fried:after{content:"\10f7fc"}.fad.fa-eject:after{content:"\10f052"}.fad.fa-elephant:after{content:"\10f6da"}.fad.fa-ellipsis-h:after{content:"\10f141"}.fad.fa-ellipsis-h-alt:after{content:"\10f39b"}.fad.fa-ellipsis-v:after{content:"\10f142"}.fad.fa-ellipsis-v-alt:after{content:"\10f39c"}.fad.fa-empty-set:after{content:"\10f656"}.fad.fa-engine-warning:after{content:"\10f5f2"}.fad.fa-envelope:after{content:"\10f0e0"}.fad.fa-envelope-open:after{content:"\10f2b6"}.fad.fa-envelope-open-dollar:after{content:"\10f657"}.fad.fa-envelope-open-text:after{content:"\10f658"}.fad.fa-envelope-square:after{content:"\10f199"}.fad.fa-equals:after{content:"\10f52c"}.fad.fa-eraser:after{content:"\10f12d"}.fad.fa-ethernet:after{content:"\10f796"}.fad.fa-euro-sign:after{content:"\10f153"}.fad.fa-exchange:after{content:"\10f0ec"}.fad.fa-exchange-alt:after{content:"\10f362"}.fad.fa-exclamation:after{content:"\10f12a"}.fad.fa-exclamation-circle:after{content:"\10f06a"}.fad.fa-exclamation-square:after{content:"\10f321"}.fad.fa-exclamation-triangle:after{content:"\10f071"}.fad.fa-expand:after{content:"\10f065"}.fad.fa-expand-alt:after{content:"\10f424"}.fad.fa-expand-arrows:after{content:"\10f31d"}.fad.fa-expand-arrows-alt:after{content:"\10f31e"}.fad.fa-expand-wide:after{content:"\10f320"}.fad.fa-external-link:after{content:"\10f08e"}.fad.fa-external-link-alt:after{content:"\10f35d"}.fad.fa-external-link-square:after{content:"\10f14c"}.fad.fa-external-link-square-alt:after{content:"\10f360"}.fad.fa-eye:after{content:"\10f06e"}.fad.fa-eye-dropper:after{content:"\10f1fb"}.fad.fa-eye-evil:after{content:"\10f6db"}.fad.fa-eye-slash:after{content:"\10f070"}.fad.fa-fan:after{content:"\10f863"}.fad.fa-fan-table:after{content:"\10f904"}.fad.fa-farm:after{content:"\10f864"}.fad.fa-fast-backward:after{content:"\10f049"}.fad.fa-fast-forward:after{content:"\10f050"}.fad.fa-faucet:after{content:"\10f905"}.fad.fa-faucet-drip:after{content:"\10f906"}.fad.fa-fax:after{content:"\10f1ac"}.fad.fa-feather:after{content:"\10f52d"}.fad.fa-feather-alt:after{content:"\10f56b"}.fad.fa-female:after{content:"\10f182"}.fad.fa-field-hockey:after{content:"\10f44c"}.fad.fa-fighter-jet:after{content:"\10f0fb"}.fad.fa-file:after{content:"\10f15b"}.fad.fa-file-alt:after{content:"\10f15c"}.fad.fa-file-archive:after{content:"\10f1c6"}.fad.fa-file-audio:after{content:"\10f1c7"}.fad.fa-file-certificate:after{content:"\10f5f3"}.fad.fa-file-chart-line:after{content:"\10f659"}.fad.fa-file-chart-pie:after{content:"\10f65a"}.fad.fa-file-check:after{content:"\10f316"}.fad.fa-file-code:after{content:"\10f1c9"}.fad.fa-file-contract:after{content:"\10f56c"}.fad.fa-file-csv:after{content:"\10f6dd"}.fad.fa-file-download:after{content:"\10f56d"}.fad.fa-file-edit:after{content:"\10f31c"}.fad.fa-file-excel:after{content:"\10f1c3"}.fad.fa-file-exclamation:after{content:"\10f31a"}.fad.fa-file-export:after{content:"\10f56e"}.fad.fa-file-image:after{content:"\10f1c5"}.fad.fa-file-import:after{content:"\10f56f"}.fad.fa-file-invoice:after{content:"\10f570"}.fad.fa-file-invoice-dollar:after{content:"\10f571"}.fad.fa-file-medical:after{content:"\10f477"}.fad.fa-file-medical-alt:after{content:"\10f478"}.fad.fa-file-minus:after{content:"\10f318"}.fad.fa-file-music:after{content:"\10f8b6"}.fad.fa-file-pdf:after{content:"\10f1c1"}.fad.fa-file-plus:after{content:"\10f319"}.fad.fa-file-powerpoint:after{content:"\10f1c4"}.fad.fa-file-prescription:after{content:"\10f572"}.fad.fa-file-search:after{content:"\10f865"}.fad.fa-file-signature:after{content:"\10f573"}.fad.fa-file-spreadsheet:after{content:"\10f65b"}.fad.fa-file-times:after{content:"\10f317"}.fad.fa-file-upload:after{content:"\10f574"}.fad.fa-file-user:after{content:"\10f65c"}.fad.fa-file-video:after{content:"\10f1c8"}.fad.fa-file-word:after{content:"\10f1c2"}.fad.fa-files-medical:after{content:"\10f7fd"}.fad.fa-fill:after{content:"\10f575"}.fad.fa-fill-drip:after{content:"\10f576"}.fad.fa-film:after{content:"\10f008"}.fad.fa-film-alt:after{content:"\10f3a0"}.fad.fa-film-canister:after{content:"\10f8b7"}.fad.fa-filter:after{content:"\10f0b0"}.fad.fa-fingerprint:after{content:"\10f577"}.fad.fa-fire:after{content:"\10f06d"}.fad.fa-fire-alt:after{content:"\10f7e4"}.fad.fa-fire-extinguisher:after{content:"\10f134"}.fad.fa-fire-smoke:after{content:"\10f74b"}.fad.fa-fireplace:after{content:"\10f79a"}.fad.fa-first-aid:after{content:"\10f479"}.fad.fa-fish:after{content:"\10f578"}.fad.fa-fish-cooked:after{content:"\10f7fe"}.fad.fa-fist-raised:after{content:"\10f6de"}.fad.fa-flag:after{content:"\10f024"}.fad.fa-flag-alt:after{content:"\10f74c"}.fad.fa-flag-checkered:after{content:"\10f11e"}.fad.fa-flag-usa:after{content:"\10f74d"}.fad.fa-flame:after{content:"\10f6df"}.fad.fa-flashlight:after{content:"\10f8b8"}.fad.fa-flask:after{content:"\10f0c3"}.fad.fa-flask-poison:after{content:"\10f6e0"}.fad.fa-flask-potion:after{content:"\10f6e1"}.fad.fa-flower:after{content:"\10f7ff"}.fad.fa-flower-daffodil:after{content:"\10f800"}.fad.fa-flower-tulip:after{content:"\10f801"}.fad.fa-flushed:after{content:"\10f579"}.fad.fa-flute:after{content:"\10f8b9"}.fad.fa-flux-capacitor:after{content:"\10f8ba"}.fad.fa-fog:after{content:"\10f74e"}.fad.fa-folder:after{content:"\10f07b"}.fad.fa-folder-minus:after{content:"\10f65d"}.fad.fa-folder-open:after{content:"\10f07c"}.fad.fa-folder-plus:after{content:"\10f65e"}.fad.fa-folder-times:after{content:"\10f65f"}.fad.fa-folder-tree:after{content:"\10f802"}.fad.fa-folders:after{content:"\10f660"}.fad.fa-font:after{content:"\10f031"}.fad.fa-font-awesome-logo-full:after{content:"\10f4e6"}.fad.fa-font-case:after{content:"\10f866"}.fad.fa-football-ball:after{content:"\10f44e"}.fad.fa-football-helmet:after{content:"\10f44f"}.fad.fa-forklift:after{content:"\10f47a"}.fad.fa-forward:after{content:"\10f04e"}.fad.fa-fragile:after{content:"\10f4bb"}.fad.fa-french-fries:after{content:"\10f803"}.fad.fa-frog:after{content:"\10f52e"}.fad.fa-frosty-head:after{content:"\10f79b"}.fad.fa-frown:after{content:"\10f119"}.fad.fa-frown-open:after{content:"\10f57a"}.fad.fa-function:after{content:"\10f661"}.fad.fa-funnel-dollar:after{content:"\10f662"}.fad.fa-futbol:after{content:"\10f1e3"}.fad.fa-galaxy:after{content:"\10f908"}.fad.fa-game-board:after{content:"\10f867"}.fad.fa-game-board-alt:after{content:"\10f868"}.fad.fa-game-console-handheld:after{content:"\10f8bb"}.fad.fa-gamepad:after{content:"\10f11b"}.fad.fa-gamepad-alt:after{content:"\10f8bc"}.fad.fa-garage:after{content:"\10f909"}.fad.fa-garage-car:after{content:"\10f90a"}.fad.fa-garage-open:after{content:"\10f90b"}.fad.fa-gas-pump:after{content:"\10f52f"}.fad.fa-gas-pump-slash:after{content:"\10f5f4"}.fad.fa-gavel:after{content:"\10f0e3"}.fad.fa-gem:after{content:"\10f3a5"}.fad.fa-genderless:after{content:"\10f22d"}.fad.fa-ghost:after{content:"\10f6e2"}.fad.fa-gift:after{content:"\10f06b"}.fad.fa-gift-card:after{content:"\10f663"}.fad.fa-gifts:after{content:"\10f79c"}.fad.fa-gingerbread-man:after{content:"\10f79d"}.fad.fa-glass:after{content:"\10f804"}.fad.fa-glass-champagne:after{content:"\10f79e"}.fad.fa-glass-cheers:after{content:"\10f79f"}.fad.fa-glass-citrus:after{content:"\10f869"}.fad.fa-glass-martini:after{content:"\10f000"}.fad.fa-glass-martini-alt:after{content:"\10f57b"}.fad.fa-glass-whiskey:after{content:"\10f7a0"}.fad.fa-glass-whiskey-rocks:after{content:"\10f7a1"}.fad.fa-glasses:after{content:"\10f530"}.fad.fa-glasses-alt:after{content:"\10f5f5"}.fad.fa-globe:after{content:"\10f0ac"}.fad.fa-globe-africa:after{content:"\10f57c"}.fad.fa-globe-americas:after{content:"\10f57d"}.fad.fa-globe-asia:after{content:"\10f57e"}.fad.fa-globe-europe:after{content:"\10f7a2"}.fad.fa-globe-snow:after{content:"\10f7a3"}.fad.fa-globe-stand:after{content:"\10f5f6"}.fad.fa-golf-ball:after{content:"\10f450"}.fad.fa-golf-club:after{content:"\10f451"}.fad.fa-gopuram:after{content:"\10f664"}.fad.fa-graduation-cap:after{content:"\10f19d"}.fad.fa-gramophone:after{content:"\10f8bd"}.fad.fa-greater-than:after{content:"\10f531"}.fad.fa-greater-than-equal:after{content:"\10f532"}.fad.fa-grimace:after{content:"\10f57f"}.fad.fa-grin:after{content:"\10f580"}.fad.fa-grin-alt:after{content:"\10f581"}.fad.fa-grin-beam:after{content:"\10f582"}.fad.fa-grin-beam-sweat:after{content:"\10f583"}.fad.fa-grin-hearts:after{content:"\10f584"}.fad.fa-grin-squint:after{content:"\10f585"}.fad.fa-grin-squint-tears:after{content:"\10f586"}.fad.fa-grin-stars:after{content:"\10f587"}.fad.fa-grin-tears:after{content:"\10f588"}.fad.fa-grin-tongue:after{content:"\10f589"}.fad.fa-grin-tongue-squint:after{content:"\10f58a"}.fad.fa-grin-tongue-wink:after{content:"\10f58b"}.fad.fa-grin-wink:after{content:"\10f58c"}.fad.fa-grip-horizontal:after{content:"\10f58d"}.fad.fa-grip-lines:after{content:"\10f7a4"}.fad.fa-grip-lines-vertical:after{content:"\10f7a5"}.fad.fa-grip-vertical:after{content:"\10f58e"}.fad.fa-guitar:after{content:"\10f7a6"}.fad.fa-guitar-electric:after{content:"\10f8be"}.fad.fa-guitars:after{content:"\10f8bf"}.fad.fa-h-square:after{content:"\10f0fd"}.fad.fa-h1:after{content:"\10f313"}.fad.fa-h2:after{content:"\10f314"}.fad.fa-h3:after{content:"\10f315"}.fad.fa-h4:after{content:"\10f86a"}.fad.fa-hamburger:after{content:"\10f805"}.fad.fa-hammer:after{content:"\10f6e3"}.fad.fa-hammer-war:after{content:"\10f6e4"}.fad.fa-hamsa:after{content:"\10f665"}.fad.fa-hand-heart:after{content:"\10f4bc"}.fad.fa-hand-holding:after{content:"\10f4bd"}.fad.fa-hand-holding-box:after{content:"\10f47b"}.fad.fa-hand-holding-heart:after{content:"\10f4be"}.fad.fa-hand-holding-magic:after{content:"\10f6e5"}.fad.fa-hand-holding-seedling:after{content:"\10f4bf"}.fad.fa-hand-holding-usd:after{content:"\10f4c0"}.fad.fa-hand-holding-water:after{content:"\10f4c1"}.fad.fa-hand-lizard:after{content:"\10f258"}.fad.fa-hand-middle-finger:after{content:"\10f806"}.fad.fa-hand-paper:after{content:"\10f256"}.fad.fa-hand-peace:after{content:"\10f25b"}.fad.fa-hand-point-down:after{content:"\10f0a7"}.fad.fa-hand-point-left:after{content:"\10f0a5"}.fad.fa-hand-point-right:after{content:"\10f0a4"}.fad.fa-hand-point-up:after{content:"\10f0a6"}.fad.fa-hand-pointer:after{content:"\10f25a"}.fad.fa-hand-receiving:after{content:"\10f47c"}.fad.fa-hand-rock:after{content:"\10f255"}.fad.fa-hand-scissors:after{content:"\10f257"}.fad.fa-hand-spock:after{content:"\10f259"}.fad.fa-hands:after{content:"\10f4c2"}.fad.fa-hands-heart:after{content:"\10f4c3"}.fad.fa-hands-helping:after{content:"\10f4c4"}.fad.fa-hands-usd:after{content:"\10f4c5"}.fad.fa-handshake:after{content:"\10f2b5"}.fad.fa-handshake-alt:after{content:"\10f4c6"}.fad.fa-hanukiah:after{content:"\10f6e6"}.fad.fa-hard-hat:after{content:"\10f807"}.fad.fa-hashtag:after{content:"\10f292"}.fad.fa-hat-chef:after{content:"\10f86b"}.fad.fa-hat-cowboy:after{content:"\10f8c0"}.fad.fa-hat-cowboy-side:after{content:"\10f8c1"}.fad.fa-hat-santa:after{content:"\10f7a7"}.fad.fa-hat-winter:after{content:"\10f7a8"}.fad.fa-hat-witch:after{content:"\10f6e7"}.fad.fa-hat-wizard:after{content:"\10f6e8"}.fad.fa-hdd:after{content:"\10f0a0"}.fad.fa-head-side:after{content:"\10f6e9"}.fad.fa-head-side-brain:after{content:"\10f808"}.fad.fa-head-side-headphones:after{content:"\10f8c2"}.fad.fa-head-side-medical:after{content:"\10f809"}.fad.fa-head-vr:after{content:"\10f6ea"}.fad.fa-heading:after{content:"\10f1dc"}.fad.fa-headphones:after{content:"\10f025"}.fad.fa-headphones-alt:after{content:"\10f58f"}.fad.fa-headset:after{content:"\10f590"}.fad.fa-heart:after{content:"\10f004"}.fad.fa-heart-broken:after{content:"\10f7a9"}.fad.fa-heart-circle:after{content:"\10f4c7"}.fad.fa-heart-rate:after{content:"\10f5f8"}.fad.fa-heart-square:after{content:"\10f4c8"}.fad.fa-heartbeat:after{content:"\10f21e"}.fad.fa-heat:after{content:"\10f90c"}.fad.fa-helicopter:after{content:"\10f533"}.fad.fa-helmet-battle:after{content:"\10f6eb"}.fad.fa-hexagon:after{content:"\10f312"}.fad.fa-highlighter:after{content:"\10f591"}.fad.fa-hiking:after{content:"\10f6ec"}.fad.fa-hippo:after{content:"\10f6ed"}.fad.fa-history:after{content:"\10f1da"}.fad.fa-hockey-mask:after{content:"\10f6ee"}.fad.fa-hockey-puck:after{content:"\10f453"}.fad.fa-hockey-sticks:after{content:"\10f454"}.fad.fa-holly-berry:after{content:"\10f7aa"}.fad.fa-home:after{content:"\10f015"}.fad.fa-home-alt:after{content:"\10f80a"}.fad.fa-home-heart:after{content:"\10f4c9"}.fad.fa-home-lg:after{content:"\10f80b"}.fad.fa-home-lg-alt:after{content:"\10f80c"}.fad.fa-hood-cloak:after{content:"\10f6ef"}.fad.fa-horizontal-rule:after{content:"\10f86c"}.fad.fa-horse:after{content:"\10f6f0"}.fad.fa-horse-head:after{content:"\10f7ab"}.fad.fa-horse-saddle:after{content:"\10f8c3"}.fad.fa-hospital:after{content:"\10f0f8"}.fad.fa-hospital-alt:after{content:"\10f47d"}.fad.fa-hospital-symbol:after{content:"\10f47e"}.fad.fa-hospital-user:after{content:"\10f80d"}.fad.fa-hospitals:after{content:"\10f80e"}.fad.fa-hot-tub:after{content:"\10f593"}.fad.fa-hotdog:after{content:"\10f80f"}.fad.fa-hotel:after{content:"\10f594"}.fad.fa-hourglass:after{content:"\10f254"}.fad.fa-hourglass-end:after{content:"\10f253"}.fad.fa-hourglass-half:after{content:"\10f252"}.fad.fa-hourglass-start:after{content:"\10f251"}.fad.fa-house:after{content:"\10f90d"}.fad.fa-house-damage:after{content:"\10f6f1"}.fad.fa-house-day:after{content:"\10f90e"}.fad.fa-house-flood:after{content:"\10f74f"}.fad.fa-house-leave:after{content:"\10f90f"}.fad.fa-house-night:after{content:"\10f910"}.fad.fa-house-return:after{content:"\10f911"}.fad.fa-house-signal:after{content:"\10f912"}.fad.fa-hryvnia:after{content:"\10f6f2"}.fad.fa-humidity:after{content:"\10f750"}.fad.fa-hurricane:after{content:"\10f751"}.fad.fa-i-cursor:after{content:"\10f246"}.fad.fa-ice-cream:after{content:"\10f810"}.fad.fa-ice-skate:after{content:"\10f7ac"}.fad.fa-icicles:after{content:"\10f7ad"}.fad.fa-icons:after{content:"\10f86d"}.fad.fa-icons-alt:after{content:"\10f86e"}.fad.fa-id-badge:after{content:"\10f2c1"}.fad.fa-id-card:after{content:"\10f2c2"}.fad.fa-id-card-alt:after{content:"\10f47f"}.fad.fa-igloo:after{content:"\10f7ae"}.fad.fa-image:after{content:"\10f03e"}.fad.fa-image-polaroid:after{content:"\10f8c4"}.fad.fa-images:after{content:"\10f302"}.fad.fa-inbox:after{content:"\10f01c"}.fad.fa-inbox-in:after{content:"\10f310"}.fad.fa-inbox-out:after{content:"\10f311"}.fad.fa-indent:after{content:"\10f03c"}.fad.fa-industry:after{content:"\10f275"}.fad.fa-industry-alt:after{content:"\10f3b3"}.fad.fa-infinity:after{content:"\10f534"}.fad.fa-info:after{content:"\10f129"}.fad.fa-info-circle:after{content:"\10f05a"}.fad.fa-info-square:after{content:"\10f30f"}.fad.fa-inhaler:after{content:"\10f5f9"}.fad.fa-integral:after{content:"\10f667"}.fad.fa-intersection:after{content:"\10f668"}.fad.fa-inventory:after{content:"\10f480"}.fad.fa-island-tropical:after{content:"\10f811"}.fad.fa-italic:after{content:"\10f033"}.fad.fa-jack-o-lantern:after{content:"\10f30e"}.fad.fa-jedi:after{content:"\10f669"}.fad.fa-joint:after{content:"\10f595"}.fad.fa-journal-whills:after{content:"\10f66a"}.fad.fa-joystick:after{content:"\10f8c5"}.fad.fa-jug:after{content:"\10f8c6"}.fad.fa-kaaba:after{content:"\10f66b"}.fad.fa-kazoo:after{content:"\10f8c7"}.fad.fa-kerning:after{content:"\10f86f"}.fad.fa-key:after{content:"\10f084"}.fad.fa-key-skeleton:after{content:"\10f6f3"}.fad.fa-keyboard:after{content:"\10f11c"}.fad.fa-keynote:after{content:"\10f66c"}.fad.fa-khanda:after{content:"\10f66d"}.fad.fa-kidneys:after{content:"\10f5fb"}.fad.fa-kiss:after{content:"\10f596"}.fad.fa-kiss-beam:after{content:"\10f597"}.fad.fa-kiss-wink-heart:after{content:"\10f598"}.fad.fa-kite:after{content:"\10f6f4"}.fad.fa-kiwi-bird:after{content:"\10f535"}.fad.fa-knife-kitchen:after{content:"\10f6f5"}.fad.fa-lambda:after{content:"\10f66e"}.fad.fa-lamp:after{content:"\10f4ca"}.fad.fa-lamp-desk:after{content:"\10f914"}.fad.fa-lamp-floor:after{content:"\10f915"}.fad.fa-landmark:after{content:"\10f66f"}.fad.fa-landmark-alt:after{content:"\10f752"}.fad.fa-language:after{content:"\10f1ab"}.fad.fa-laptop:after{content:"\10f109"}.fad.fa-laptop-code:after{content:"\10f5fc"}.fad.fa-laptop-medical:after{content:"\10f812"}.fad.fa-lasso:after{content:"\10f8c8"}.fad.fa-laugh:after{content:"\10f599"}.fad.fa-laugh-beam:after{content:"\10f59a"}.fad.fa-laugh-squint:after{content:"\10f59b"}.fad.fa-laugh-wink:after{content:"\10f59c"}.fad.fa-layer-group:after{content:"\10f5fd"}.fad.fa-layer-minus:after{content:"\10f5fe"}.fad.fa-layer-plus:after{content:"\10f5ff"}.fad.fa-leaf:after{content:"\10f06c"}.fad.fa-leaf-heart:after{content:"\10f4cb"}.fad.fa-leaf-maple:after{content:"\10f6f6"}.fad.fa-leaf-oak:after{content:"\10f6f7"}.fad.fa-lemon:after{content:"\10f094"}.fad.fa-less-than:after{content:"\10f536"}.fad.fa-less-than-equal:after{content:"\10f537"}.fad.fa-level-down:after{content:"\10f149"}.fad.fa-level-down-alt:after{content:"\10f3be"}.fad.fa-level-up:after{content:"\10f148"}.fad.fa-level-up-alt:after{content:"\10f3bf"}.fad.fa-life-ring:after{content:"\10f1cd"}.fad.fa-light-ceiling:after{content:"\10f916"}.fad.fa-light-switch:after{content:"\10f917"}.fad.fa-light-switch-off:after{content:"\10f918"}.fad.fa-light-switch-on:after{content:"\10f919"}.fad.fa-lightbulb:after{content:"\10f0eb"}.fad.fa-lightbulb-dollar:after{content:"\10f670"}.fad.fa-lightbulb-exclamation:after{content:"\10f671"}.fad.fa-lightbulb-on:after{content:"\10f672"}.fad.fa-lightbulb-slash:after{content:"\10f673"}.fad.fa-lights-holiday:after{content:"\10f7b2"}.fad.fa-line-columns:after{content:"\10f870"}.fad.fa-line-height:after{content:"\10f871"}.fad.fa-link:after{content:"\10f0c1"}.fad.fa-lips:after{content:"\10f600"}.fad.fa-lira-sign:after{content:"\10f195"}.fad.fa-list:after{content:"\10f03a"}.fad.fa-list-alt:after{content:"\10f022"}.fad.fa-list-music:after{content:"\10f8c9"}.fad.fa-list-ol:after{content:"\10f0cb"}.fad.fa-list-ul:after{content:"\10f0ca"}.fad.fa-location:after{content:"\10f601"}.fad.fa-location-arrow:after{content:"\10f124"}.fad.fa-location-circle:after{content:"\10f602"}.fad.fa-location-slash:after{content:"\10f603"}.fad.fa-lock:after{content:"\10f023"}.fad.fa-lock-alt:after{content:"\10f30d"}.fad.fa-lock-open:after{content:"\10f3c1"}.fad.fa-lock-open-alt:after{content:"\10f3c2"}.fad.fa-long-arrow-alt-down:after{content:"\10f309"}.fad.fa-long-arrow-alt-left:after{content:"\10f30a"}.fad.fa-long-arrow-alt-right:after{content:"\10f30b"}.fad.fa-long-arrow-alt-up:after{content:"\10f30c"}.fad.fa-long-arrow-down:after{content:"\10f175"}.fad.fa-long-arrow-left:after{content:"\10f177"}.fad.fa-long-arrow-right:after{content:"\10f178"}.fad.fa-long-arrow-up:after{content:"\10f176"}.fad.fa-loveseat:after{content:"\10f4cc"}.fad.fa-low-vision:after{content:"\10f2a8"}.fad.fa-luchador:after{content:"\10f455"}.fad.fa-luggage-cart:after{content:"\10f59d"}.fad.fa-lungs:after{content:"\10f604"}.fad.fa-mace:after{content:"\10f6f8"}.fad.fa-magic:after{content:"\10f0d0"}.fad.fa-magnet:after{content:"\10f076"}.fad.fa-mail-bulk:after{content:"\10f674"}.fad.fa-mailbox:after{content:"\10f813"}.fad.fa-male:after{content:"\10f183"}.fad.fa-mandolin:after{content:"\10f6f9"}.fad.fa-map:after{content:"\10f279"}.fad.fa-map-marked:after{content:"\10f59f"}.fad.fa-map-marked-alt:after{content:"\10f5a0"}.fad.fa-map-marker:after{content:"\10f041"}.fad.fa-map-marker-alt:after{content:"\10f3c5"}.fad.fa-map-marker-alt-slash:after{content:"\10f605"}.fad.fa-map-marker-check:after{content:"\10f606"}.fad.fa-map-marker-edit:after{content:"\10f607"}.fad.fa-map-marker-exclamation:after{content:"\10f608"}.fad.fa-map-marker-minus:after{content:"\10f609"}.fad.fa-map-marker-plus:after{content:"\10f60a"}.fad.fa-map-marker-question:after{content:"\10f60b"}.fad.fa-map-marker-slash:after{content:"\10f60c"}.fad.fa-map-marker-smile:after{content:"\10f60d"}.fad.fa-map-marker-times:after{content:"\10f60e"}.fad.fa-map-pin:after{content:"\10f276"}.fad.fa-map-signs:after{content:"\10f277"}.fad.fa-marker:after{content:"\10f5a1"}.fad.fa-mars:after{content:"\10f222"}.fad.fa-mars-double:after{content:"\10f227"}.fad.fa-mars-stroke:after{content:"\10f229"}.fad.fa-mars-stroke-h:after{content:"\10f22b"}.fad.fa-mars-stroke-v:after{content:"\10f22a"}.fad.fa-mask:after{content:"\10f6fa"}.fad.fa-meat:after{content:"\10f814"}.fad.fa-medal:after{content:"\10f5a2"}.fad.fa-medkit:after{content:"\10f0fa"}.fad.fa-megaphone:after{content:"\10f675"}.fad.fa-meh:after{content:"\10f11a"}.fad.fa-meh-blank:after{content:"\10f5a4"}.fad.fa-meh-rolling-eyes:after{content:"\10f5a5"}.fad.fa-memory:after{content:"\10f538"}.fad.fa-menorah:after{content:"\10f676"}.fad.fa-mercury:after{content:"\10f223"}.fad.fa-meteor:after{content:"\10f753"}.fad.fa-microchip:after{content:"\10f2db"}.fad.fa-microphone:after{content:"\10f130"}.fad.fa-microphone-alt:after{content:"\10f3c9"}.fad.fa-microphone-alt-slash:after{content:"\10f539"}.fad.fa-microphone-slash:after{content:"\10f131"}.fad.fa-microphone-stand:after{content:"\10f8cb"}.fad.fa-microscope:after{content:"\10f610"}.fad.fa-microwave:after{content:"\10f91b"}.fad.fa-mind-share:after{content:"\10f677"}.fad.fa-minus:after{content:"\10f068"}.fad.fa-minus-circle:after{content:"\10f056"}.fad.fa-minus-hexagon:after{content:"\10f307"}.fad.fa-minus-octagon:after{content:"\10f308"}.fad.fa-minus-square:after{content:"\10f146"}.fad.fa-mistletoe:after{content:"\10f7b4"}.fad.fa-mitten:after{content:"\10f7b5"}.fad.fa-mobile:after{content:"\10f10b"}.fad.fa-mobile-alt:after{content:"\10f3cd"}.fad.fa-mobile-android:after{content:"\10f3ce"}.fad.fa-mobile-android-alt:after{content:"\10f3cf"}.fad.fa-money-bill:after{content:"\10f0d6"}.fad.fa-money-bill-alt:after{content:"\10f3d1"}.fad.fa-money-bill-wave:after{content:"\10f53a"}.fad.fa-money-bill-wave-alt:after{content:"\10f53b"}.fad.fa-money-check:after{content:"\10f53c"}.fad.fa-money-check-alt:after{content:"\10f53d"}.fad.fa-money-check-edit:after{content:"\10f872"}.fad.fa-money-check-edit-alt:after{content:"\10f873"}.fad.fa-monitor-heart-rate:after{content:"\10f611"}.fad.fa-monkey:after{content:"\10f6fb"}.fad.fa-monument:after{content:"\10f5a6"}.fad.fa-moon:after{content:"\10f186"}.fad.fa-moon-cloud:after{content:"\10f754"}.fad.fa-moon-stars:after{content:"\10f755"}.fad.fa-mortar-pestle:after{content:"\10f5a7"}.fad.fa-mosque:after{content:"\10f678"}.fad.fa-motorcycle:after{content:"\10f21c"}.fad.fa-mountain:after{content:"\10f6fc"}.fad.fa-mountains:after{content:"\10f6fd"}.fad.fa-mouse:after{content:"\10f8cc"}.fad.fa-mouse-alt:after{content:"\10f8cd"}.fad.fa-mouse-pointer:after{content:"\10f245"}.fad.fa-mp3-player:after{content:"\10f8ce"}.fad.fa-mug:after{content:"\10f874"}.fad.fa-mug-hot:after{content:"\10f7b6"}.fad.fa-mug-marshmallows:after{content:"\10f7b7"}.fad.fa-mug-tea:after{content:"\10f875"}.fad.fa-music:after{content:"\10f001"}.fad.fa-music-alt:after{content:"\10f8cf"}.fad.fa-music-alt-slash:after{content:"\10f8d0"}.fad.fa-music-slash:after{content:"\10f8d1"}.fad.fa-narwhal:after{content:"\10f6fe"}.fad.fa-network-wired:after{content:"\10f6ff"}.fad.fa-neuter:after{content:"\10f22c"}.fad.fa-newspaper:after{content:"\10f1ea"}.fad.fa-not-equal:after{content:"\10f53e"}.fad.fa-notes-medical:after{content:"\10f481"}.fad.fa-object-group:after{content:"\10f247"}.fad.fa-object-ungroup:after{content:"\10f248"}.fad.fa-octagon:after{content:"\10f306"}.fad.fa-oil-can:after{content:"\10f613"}.fad.fa-oil-temp:after{content:"\10f614"}.fad.fa-om:after{content:"\10f679"}.fad.fa-omega:after{content:"\10f67a"}.fad.fa-ornament:after{content:"\10f7b8"}.fad.fa-otter:after{content:"\10f700"}.fad.fa-outdent:after{content:"\10f03b"}.fad.fa-outlet:after{content:"\10f91c"}.fad.fa-oven:after{content:"\10f91d"}.fad.fa-overline:after{content:"\10f876"}.fad.fa-page-break:after{content:"\10f877"}.fad.fa-pager:after{content:"\10f815"}.fad.fa-paint-brush:after{content:"\10f1fc"}.fad.fa-paint-brush-alt:after{content:"\10f5a9"}.fad.fa-paint-roller:after{content:"\10f5aa"}.fad.fa-palette:after{content:"\10f53f"}.fad.fa-pallet:after{content:"\10f482"}.fad.fa-pallet-alt:after{content:"\10f483"}.fad.fa-paper-plane:after{content:"\10f1d8"}.fad.fa-paperclip:after{content:"\10f0c6"}.fad.fa-parachute-box:after{content:"\10f4cd"}.fad.fa-paragraph:after{content:"\10f1dd"}.fad.fa-paragraph-rtl:after{content:"\10f878"}.fad.fa-parking:after{content:"\10f540"}.fad.fa-parking-circle:after{content:"\10f615"}.fad.fa-parking-circle-slash:after{content:"\10f616"}.fad.fa-parking-slash:after{content:"\10f617"}.fad.fa-passport:after{content:"\10f5ab"}.fad.fa-pastafarianism:after{content:"\10f67b"}.fad.fa-paste:after{content:"\10f0ea"}.fad.fa-pause:after{content:"\10f04c"}.fad.fa-pause-circle:after{content:"\10f28b"}.fad.fa-paw:after{content:"\10f1b0"}.fad.fa-paw-alt:after{content:"\10f701"}.fad.fa-paw-claws:after{content:"\10f702"}.fad.fa-peace:after{content:"\10f67c"}.fad.fa-pegasus:after{content:"\10f703"}.fad.fa-pen:after{content:"\10f304"}.fad.fa-pen-alt:after{content:"\10f305"}.fad.fa-pen-fancy:after{content:"\10f5ac"}.fad.fa-pen-nib:after{content:"\10f5ad"}.fad.fa-pen-square:after{content:"\10f14b"}.fad.fa-pencil:after{content:"\10f040"}.fad.fa-pencil-alt:after{content:"\10f303"}.fad.fa-pencil-paintbrush:after{content:"\10f618"}.fad.fa-pencil-ruler:after{content:"\10f5ae"}.fad.fa-pennant:after{content:"\10f456"}.fad.fa-people-carry:after{content:"\10f4ce"}.fad.fa-pepper-hot:after{content:"\10f816"}.fad.fa-percent:after{content:"\10f295"}.fad.fa-percentage:after{content:"\10f541"}.fad.fa-person-booth:after{content:"\10f756"}.fad.fa-person-carry:after{content:"\10f4cf"}.fad.fa-person-dolly:after{content:"\10f4d0"}.fad.fa-person-dolly-empty:after{content:"\10f4d1"}.fad.fa-person-sign:after{content:"\10f757"}.fad.fa-phone:after{content:"\10f095"}.fad.fa-phone-alt:after{content:"\10f879"}.fad.fa-phone-laptop:after{content:"\10f87a"}.fad.fa-phone-office:after{content:"\10f67d"}.fad.fa-phone-plus:after{content:"\10f4d2"}.fad.fa-phone-rotary:after{content:"\10f8d3"}.fad.fa-phone-slash:after{content:"\10f3dd"}.fad.fa-phone-square:after{content:"\10f098"}.fad.fa-phone-square-alt:after{content:"\10f87b"}.fad.fa-phone-volume:after{content:"\10f2a0"}.fad.fa-photo-video:after{content:"\10f87c"}.fad.fa-pi:after{content:"\10f67e"}.fad.fa-piano:after{content:"\10f8d4"}.fad.fa-piano-keyboard:after{content:"\10f8d5"}.fad.fa-pie:after{content:"\10f705"}.fad.fa-pig:after{content:"\10f706"}.fad.fa-piggy-bank:after{content:"\10f4d3"}.fad.fa-pills:after{content:"\10f484"}.fad.fa-pizza:after{content:"\10f817"}.fad.fa-pizza-slice:after{content:"\10f818"}.fad.fa-place-of-worship:after{content:"\10f67f"}.fad.fa-plane:after{content:"\10f072"}.fad.fa-plane-alt:after{content:"\10f3de"}.fad.fa-plane-arrival:after{content:"\10f5af"}.fad.fa-plane-departure:after{content:"\10f5b0"}.fad.fa-planet-moon:after{content:"\10f91f"}.fad.fa-planet-ringed:after{content:"\10f920"}.fad.fa-play:after{content:"\10f04b"}.fad.fa-play-circle:after{content:"\10f144"}.fad.fa-plug:after{content:"\10f1e6"}.fad.fa-plus:after{content:"\10f067"}.fad.fa-plus-circle:after{content:"\10f055"}.fad.fa-plus-hexagon:after{content:"\10f300"}.fad.fa-plus-octagon:after{content:"\10f301"}.fad.fa-plus-square:after{content:"\10f0fe"}.fad.fa-podcast:after{content:"\10f2ce"}.fad.fa-podium:after{content:"\10f680"}.fad.fa-podium-star:after{content:"\10f758"}.fad.fa-police-box:after{content:"\10f921"}.fad.fa-poll:after{content:"\10f681"}.fad.fa-poll-h:after{content:"\10f682"}.fad.fa-poll-people:after{content:"\10f759"}.fad.fa-poo:after{content:"\10f2fe"}.fad.fa-poo-storm:after{content:"\10f75a"}.fad.fa-poop:after{content:"\10f619"}.fad.fa-popcorn:after{content:"\10f819"}.fad.fa-portal-enter:after{content:"\10f922"}.fad.fa-portal-exit:after{content:"\10f923"}.fad.fa-portrait:after{content:"\10f3e0"}.fad.fa-pound-sign:after{content:"\10f154"}.fad.fa-power-off:after{content:"\10f011"}.fad.fa-pray:after{content:"\10f683"}.fad.fa-praying-hands:after{content:"\10f684"}.fad.fa-prescription:after{content:"\10f5b1"}.fad.fa-prescription-bottle:after{content:"\10f485"}.fad.fa-prescription-bottle-alt:after{content:"\10f486"}.fad.fa-presentation:after{content:"\10f685"}.fad.fa-print:after{content:"\10f02f"}.fad.fa-print-search:after{content:"\10f81a"}.fad.fa-print-slash:after{content:"\10f686"}.fad.fa-procedures:after{content:"\10f487"}.fad.fa-project-diagram:after{content:"\10f542"}.fad.fa-projector:after{content:"\10f8d6"}.fad.fa-pumpkin:after{content:"\10f707"}.fad.fa-puzzle-piece:after{content:"\10f12e"}.fad.fa-qrcode:after{content:"\10f029"}.fad.fa-question:after{content:"\10f128"}.fad.fa-question-circle:after{content:"\10f059"}.fad.fa-question-square:after{content:"\10f2fd"}.fad.fa-quidditch:after{content:"\10f458"}.fad.fa-quote-left:after{content:"\10f10d"}.fad.fa-quote-right:after{content:"\10f10e"}.fad.fa-quran:after{content:"\10f687"}.fad.fa-rabbit:after{content:"\10f708"}.fad.fa-rabbit-fast:after{content:"\10f709"}.fad.fa-racquet:after{content:"\10f45a"}.fad.fa-radar:after{content:"\10f924"}.fad.fa-radiation:after{content:"\10f7b9"}.fad.fa-radiation-alt:after{content:"\10f7ba"}.fad.fa-radio:after{content:"\10f8d7"}.fad.fa-radio-alt:after{content:"\10f8d8"}.fad.fa-rainbow:after{content:"\10f75b"}.fad.fa-raindrops:after{content:"\10f75c"}.fad.fa-ram:after{content:"\10f70a"}.fad.fa-ramp-loading:after{content:"\10f4d4"}.fad.fa-random:after{content:"\10f074"}.fad.fa-raygun:after{content:"\10f925"}.fad.fa-receipt:after{content:"\10f543"}.fad.fa-record-vinyl:after{content:"\10f8d9"}.fad.fa-rectangle-landscape:after{content:"\10f2fa"}.fad.fa-rectangle-portrait:after{content:"\10f2fb"}.fad.fa-rectangle-wide:after{content:"\10f2fc"}.fad.fa-recycle:after{content:"\10f1b8"}.fad.fa-redo:after{content:"\10f01e"}.fad.fa-redo-alt:after{content:"\10f2f9"}.fad.fa-refrigerator:after{content:"\10f926"}.fad.fa-registered:after{content:"\10f25d"}.fad.fa-remove-format:after{content:"\10f87d"}.fad.fa-repeat:after{content:"\10f363"}.fad.fa-repeat-1:after{content:"\10f365"}.fad.fa-repeat-1-alt:after{content:"\10f366"}.fad.fa-repeat-alt:after{content:"\10f364"}.fad.fa-reply:after{content:"\10f3e5"}.fad.fa-reply-all:after{content:"\10f122"}.fad.fa-republican:after{content:"\10f75e"}.fad.fa-restroom:after{content:"\10f7bd"}.fad.fa-retweet:after{content:"\10f079"}.fad.fa-retweet-alt:after{content:"\10f361"}.fad.fa-ribbon:after{content:"\10f4d6"}.fad.fa-ring:after{content:"\10f70b"}.fad.fa-rings-wedding:after{content:"\10f81b"}.fad.fa-road:after{content:"\10f018"}.fad.fa-robot:after{content:"\10f544"}.fad.fa-rocket:after{content:"\10f135"}.fad.fa-rocket-launch:after{content:"\10f927"}.fad.fa-route:after{content:"\10f4d7"}.fad.fa-route-highway:after{content:"\10f61a"}.fad.fa-route-interstate:after{content:"\10f61b"}.fad.fa-router:after{content:"\10f8da"}.fad.fa-rss:after{content:"\10f09e"}.fad.fa-rss-square:after{content:"\10f143"}.fad.fa-ruble-sign:after{content:"\10f158"}.fad.fa-ruler:after{content:"\10f545"}.fad.fa-ruler-combined:after{content:"\10f546"}.fad.fa-ruler-horizontal:after{content:"\10f547"}.fad.fa-ruler-triangle:after{content:"\10f61c"}.fad.fa-ruler-vertical:after{content:"\10f548"}.fad.fa-running:after{content:"\10f70c"}.fad.fa-rupee-sign:after{content:"\10f156"}.fad.fa-rv:after{content:"\10f7be"}.fad.fa-sack:after{content:"\10f81c"}.fad.fa-sack-dollar:after{content:"\10f81d"}.fad.fa-sad-cry:after{content:"\10f5b3"}.fad.fa-sad-tear:after{content:"\10f5b4"}.fad.fa-salad:after{content:"\10f81e"}.fad.fa-sandwich:after{content:"\10f81f"}.fad.fa-satellite:after{content:"\10f7bf"}.fad.fa-satellite-dish:after{content:"\10f7c0"}.fad.fa-sausage:after{content:"\10f820"}.fad.fa-save:after{content:"\10f0c7"}.fad.fa-sax-hot:after{content:"\10f8db"}.fad.fa-saxophone:after{content:"\10f8dc"}.fad.fa-scalpel:after{content:"\10f61d"}.fad.fa-scalpel-path:after{content:"\10f61e"}.fad.fa-scanner:after{content:"\10f488"}.fad.fa-scanner-image:after{content:"\10f8f3"}.fad.fa-scanner-keyboard:after{content:"\10f489"}.fad.fa-scanner-touchscreen:after{content:"\10f48a"}.fad.fa-scarecrow:after{content:"\10f70d"}.fad.fa-scarf:after{content:"\10f7c1"}.fad.fa-school:after{content:"\10f549"}.fad.fa-screwdriver:after{content:"\10f54a"}.fad.fa-scroll:after{content:"\10f70e"}.fad.fa-scroll-old:after{content:"\10f70f"}.fad.fa-scrubber:after{content:"\10f2f8"}.fad.fa-scythe:after{content:"\10f710"}.fad.fa-sd-card:after{content:"\10f7c2"}.fad.fa-search:after{content:"\10f002"}.fad.fa-search-dollar:after{content:"\10f688"}.fad.fa-search-location:after{content:"\10f689"}.fad.fa-search-minus:after{content:"\10f010"}.fad.fa-search-plus:after{content:"\10f00e"}.fad.fa-seedling:after{content:"\10f4d8"}.fad.fa-send-back:after{content:"\10f87e"}.fad.fa-send-backward:after{content:"\10f87f"}.fad.fa-sensor:after{content:"\10f928"}.fad.fa-sensor-alert:after{content:"\10f929"}.fad.fa-sensor-fire:after{content:"\10f92a"}.fad.fa-sensor-on:after{content:"\10f92b"}.fad.fa-sensor-smoke:after{content:"\10f92c"}.fad.fa-server:after{content:"\10f233"}.fad.fa-shapes:after{content:"\10f61f"}.fad.fa-share:after{content:"\10f064"}.fad.fa-share-all:after{content:"\10f367"}.fad.fa-share-alt:after{content:"\10f1e0"}.fad.fa-share-alt-square:after{content:"\10f1e1"}.fad.fa-share-square:after{content:"\10f14d"}.fad.fa-sheep:after{content:"\10f711"}.fad.fa-shekel-sign:after{content:"\10f20b"}.fad.fa-shield:after{content:"\10f132"}.fad.fa-shield-alt:after{content:"\10f3ed"}.fad.fa-shield-check:after{content:"\10f2f7"}.fad.fa-shield-cross:after{content:"\10f712"}.fad.fa-ship:after{content:"\10f21a"}.fad.fa-shipping-fast:after{content:"\10f48b"}.fad.fa-shipping-timed:after{content:"\10f48c"}.fad.fa-shish-kebab:after{content:"\10f821"}.fad.fa-shoe-prints:after{content:"\10f54b"}.fad.fa-shopping-bag:after{content:"\10f290"}.fad.fa-shopping-basket:after{content:"\10f291"}.fad.fa-shopping-cart:after{content:"\10f07a"}.fad.fa-shovel:after{content:"\10f713"}.fad.fa-shovel-snow:after{content:"\10f7c3"}.fad.fa-shower:after{content:"\10f2cc"}.fad.fa-shredder:after{content:"\10f68a"}.fad.fa-shuttle-van:after{content:"\10f5b6"}.fad.fa-shuttlecock:after{content:"\10f45b"}.fad.fa-sickle:after{content:"\10f822"}.fad.fa-sigma:after{content:"\10f68b"}.fad.fa-sign:after{content:"\10f4d9"}.fad.fa-sign-in:after{content:"\10f090"}.fad.fa-sign-in-alt:after{content:"\10f2f6"}.fad.fa-sign-language:after{content:"\10f2a7"}.fad.fa-sign-out:after{content:"\10f08b"}.fad.fa-sign-out-alt:after{content:"\10f2f5"}.fad.fa-signal:after{content:"\10f012"}.fad.fa-signal-1:after{content:"\10f68c"}.fad.fa-signal-2:after{content:"\10f68d"}.fad.fa-signal-3:after{content:"\10f68e"}.fad.fa-signal-4:after{content:"\10f68f"}.fad.fa-signal-alt:after{content:"\10f690"}.fad.fa-signal-alt-1:after{content:"\10f691"}.fad.fa-signal-alt-2:after{content:"\10f692"}.fad.fa-signal-alt-3:after{content:"\10f693"}.fad.fa-signal-alt-slash:after{content:"\10f694"}.fad.fa-signal-slash:after{content:"\10f695"}.fad.fa-signal-stream:after{content:"\10f8dd"}.fad.fa-signature:after{content:"\10f5b7"}.fad.fa-sim-card:after{content:"\10f7c4"}.fad.fa-siren:after{content:"\10f92d"}.fad.fa-siren-on:after{content:"\10f92e"}.fad.fa-sitemap:after{content:"\10f0e8"}.fad.fa-skating:after{content:"\10f7c5"}.fad.fa-skeleton:after{content:"\10f620"}.fad.fa-ski-jump:after{content:"\10f7c7"}.fad.fa-ski-lift:after{content:"\10f7c8"}.fad.fa-skiing:after{content:"\10f7c9"}.fad.fa-skiing-nordic:after{content:"\10f7ca"}.fad.fa-skull:after{content:"\10f54c"}.fad.fa-skull-cow:after{content:"\10f8de"}.fad.fa-skull-crossbones:after{content:"\10f714"}.fad.fa-slash:after{content:"\10f715"}.fad.fa-sledding:after{content:"\10f7cb"}.fad.fa-sleigh:after{content:"\10f7cc"}.fad.fa-sliders-h:after{content:"\10f1de"}.fad.fa-sliders-h-square:after{content:"\10f3f0"}.fad.fa-sliders-v:after{content:"\10f3f1"}.fad.fa-sliders-v-square:after{content:"\10f3f2"}.fad.fa-smile:after{content:"\10f118"}.fad.fa-smile-beam:after{content:"\10f5b8"}.fad.fa-smile-plus:after{content:"\10f5b9"}.fad.fa-smile-wink:after{content:"\10f4da"}.fad.fa-smog:after{content:"\10f75f"}.fad.fa-smoke:after{content:"\10f760"}.fad.fa-smoking:after{content:"\10f48d"}.fad.fa-smoking-ban:after{content:"\10f54d"}.fad.fa-sms:after{content:"\10f7cd"}.fad.fa-snake:after{content:"\10f716"}.fad.fa-snooze:after{content:"\10f880"}.fad.fa-snow-blowing:after{content:"\10f761"}.fad.fa-snowboarding:after{content:"\10f7ce"}.fad.fa-snowflake:after{content:"\10f2dc"}.fad.fa-snowflakes:after{content:"\10f7cf"}.fad.fa-snowman:after{content:"\10f7d0"}.fad.fa-snowmobile:after{content:"\10f7d1"}.fad.fa-snowplow:after{content:"\10f7d2"}.fad.fa-socks:after{content:"\10f696"}.fad.fa-solar-panel:after{content:"\10f5ba"}.fad.fa-solar-system:after{content:"\10f92f"}.fad.fa-sort:after{content:"\10f0dc"}.fad.fa-sort-alpha-down:after{content:"\10f15d"}.fad.fa-sort-alpha-down-alt:after{content:"\10f881"}.fad.fa-sort-alpha-up:after{content:"\10f15e"}.fad.fa-sort-alpha-up-alt:after{content:"\10f882"}.fad.fa-sort-alt:after{content:"\10f883"}.fad.fa-sort-amount-down:after{content:"\10f160"}.fad.fa-sort-amount-down-alt:after{content:"\10f884"}.fad.fa-sort-amount-up:after{content:"\10f161"}.fad.fa-sort-amount-up-alt:after{content:"\10f885"}.fad.fa-sort-circle:after{content:"\10f930"}.fad.fa-sort-circle-down:after{content:"\10f931"}.fad.fa-sort-circle-up:after{content:"\10f932"}.fad.fa-sort-down:after{content:"\10f0dd"}.fad.fa-sort-numeric-down:after{content:"\10f162"}.fad.fa-sort-numeric-down-alt:after{content:"\10f886"}.fad.fa-sort-numeric-up:after{content:"\10f163"}.fad.fa-sort-numeric-up-alt:after{content:"\10f887"}.fad.fa-sort-shapes-down:after{content:"\10f888"}.fad.fa-sort-shapes-down-alt:after{content:"\10f889"}.fad.fa-sort-shapes-up:after{content:"\10f88a"}.fad.fa-sort-shapes-up-alt:after{content:"\10f88b"}.fad.fa-sort-size-down:after{content:"\10f88c"}.fad.fa-sort-size-down-alt:after{content:"\10f88d"}.fad.fa-sort-size-up:after{content:"\10f88e"}.fad.fa-sort-size-up-alt:after{content:"\10f88f"}.fad.fa-sort-up:after{content:"\10f0de"}.fad.fa-soup:after{content:"\10f823"}.fad.fa-spa:after{content:"\10f5bb"}.fad.fa-space-shuttle:after{content:"\10f197"}.fad.fa-space-station-moon:after{content:"\10f933"}.fad.fa-space-station-moon-alt:after{content:"\10f934"}.fad.fa-spade:after{content:"\10f2f4"}.fad.fa-sparkles:after{content:"\10f890"}.fad.fa-speaker:after{content:"\10f8df"}.fad.fa-speakers:after{content:"\10f8e0"}.fad.fa-spell-check:after{content:"\10f891"}.fad.fa-spider:after{content:"\10f717"}.fad.fa-spider-black-widow:after{content:"\10f718"}.fad.fa-spider-web:after{content:"\10f719"}.fad.fa-spinner:after{content:"\10f110"}.fad.fa-spinner-third:after{content:"\10f3f4"}.fad.fa-splotch:after{content:"\10f5bc"}.fad.fa-spray-can:after{content:"\10f5bd"}.fad.fa-sprinkler:after{content:"\10f935"}.fad.fa-square:after{content:"\10f0c8"}.fad.fa-square-full:after{content:"\10f45c"}.fad.fa-square-root:after{content:"\10f697"}.fad.fa-square-root-alt:after{content:"\10f698"}.fad.fa-squirrel:after{content:"\10f71a"}.fad.fa-staff:after{content:"\10f71b"}.fad.fa-stamp:after{content:"\10f5bf"}.fad.fa-star:after{content:"\10f005"}.fad.fa-star-and-crescent:after{content:"\10f699"}.fad.fa-star-christmas:after{content:"\10f7d4"}.fad.fa-star-exclamation:after{content:"\10f2f3"}.fad.fa-star-half:after{content:"\10f089"}.fad.fa-star-half-alt:after{content:"\10f5c0"}.fad.fa-star-of-david:after{content:"\10f69a"}.fad.fa-star-of-life:after{content:"\10f621"}.fad.fa-star-shooting:after{content:"\10f936"}.fad.fa-starfighter:after{content:"\10f937"}.fad.fa-starfighter-alt:after{content:"\10f938"}.fad.fa-stars:after{content:"\10f762"}.fad.fa-starship:after{content:"\10f939"}.fad.fa-starship-freighter:after{content:"\10f93a"}.fad.fa-steak:after{content:"\10f824"}.fad.fa-steering-wheel:after{content:"\10f622"}.fad.fa-step-backward:after{content:"\10f048"}.fad.fa-step-forward:after{content:"\10f051"}.fad.fa-stethoscope:after{content:"\10f0f1"}.fad.fa-sticky-note:after{content:"\10f249"}.fad.fa-stocking:after{content:"\10f7d5"}.fad.fa-stomach:after{content:"\10f623"}.fad.fa-stop:after{content:"\10f04d"}.fad.fa-stop-circle:after{content:"\10f28d"}.fad.fa-stopwatch:after{content:"\10f2f2"}.fad.fa-store:after{content:"\10f54e"}.fad.fa-store-alt:after{content:"\10f54f"}.fad.fa-stream:after{content:"\10f550"}.fad.fa-street-view:after{content:"\10f21d"}.fad.fa-stretcher:after{content:"\10f825"}.fad.fa-strikethrough:after{content:"\10f0cc"}.fad.fa-stroopwafel:after{content:"\10f551"}.fad.fa-subscript:after{content:"\10f12c"}.fad.fa-subway:after{content:"\10f239"}.fad.fa-suitcase:after{content:"\10f0f2"}.fad.fa-suitcase-rolling:after{content:"\10f5c1"}.fad.fa-sun:after{content:"\10f185"}.fad.fa-sun-cloud:after{content:"\10f763"}.fad.fa-sun-dust:after{content:"\10f764"}.fad.fa-sun-haze:after{content:"\10f765"}.fad.fa-sunglasses:after{content:"\10f892"}.fad.fa-sunrise:after{content:"\10f766"}.fad.fa-sunset:after{content:"\10f767"}.fad.fa-superscript:after{content:"\10f12b"}.fad.fa-surprise:after{content:"\10f5c2"}.fad.fa-swatchbook:after{content:"\10f5c3"}.fad.fa-swimmer:after{content:"\10f5c4"}.fad.fa-swimming-pool:after{content:"\10f5c5"}.fad.fa-sword:after{content:"\10f71c"}.fad.fa-sword-laser:after{content:"\10f93b"}.fad.fa-sword-laser-alt:after{content:"\10f93c"}.fad.fa-swords:after{content:"\10f71d"}.fad.fa-swords-laser:after{content:"\10f93d"}.fad.fa-synagogue:after{content:"\10f69b"}.fad.fa-sync:after{content:"\10f021"}.fad.fa-sync-alt:after{content:"\10f2f1"}.fad.fa-syringe:after{content:"\10f48e"}.fad.fa-table:after{content:"\10f0ce"}.fad.fa-table-tennis:after{content:"\10f45d"}.fad.fa-tablet:after{content:"\10f10a"}.fad.fa-tablet-alt:after{content:"\10f3fa"}.fad.fa-tablet-android:after{content:"\10f3fb"}.fad.fa-tablet-android-alt:after{content:"\10f3fc"}.fad.fa-tablet-rugged:after{content:"\10f48f"}.fad.fa-tablets:after{content:"\10f490"}.fad.fa-tachometer:after{content:"\10f0e4"}.fad.fa-tachometer-alt:after{content:"\10f3fd"}.fad.fa-tachometer-alt-average:after{content:"\10f624"}.fad.fa-tachometer-alt-fast:after{content:"\10f625"}.fad.fa-tachometer-alt-fastest:after{content:"\10f626"}.fad.fa-tachometer-alt-slow:after{content:"\10f627"}.fad.fa-tachometer-alt-slowest:after{content:"\10f628"}.fad.fa-tachometer-average:after{content:"\10f629"}.fad.fa-tachometer-fast:after{content:"\10f62a"}.fad.fa-tachometer-fastest:after{content:"\10f62b"}.fad.fa-tachometer-slow:after{content:"\10f62c"}.fad.fa-tachometer-slowest:after{content:"\10f62d"}.fad.fa-taco:after{content:"\10f826"}.fad.fa-tag:after{content:"\10f02b"}.fad.fa-tags:after{content:"\10f02c"}.fad.fa-tally:after{content:"\10f69c"}.fad.fa-tanakh:after{content:"\10f827"}.fad.fa-tape:after{content:"\10f4db"}.fad.fa-tasks:after{content:"\10f0ae"}.fad.fa-tasks-alt:after{content:"\10f828"}.fad.fa-taxi:after{content:"\10f1ba"}.fad.fa-teeth:after{content:"\10f62e"}.fad.fa-teeth-open:after{content:"\10f62f"}.fad.fa-telescope:after{content:"\10f93e"}.fad.fa-temperature-down:after{content:"\10f93f"}.fad.fa-temperature-frigid:after{content:"\10f768"}.fad.fa-temperature-high:after{content:"\10f769"}.fad.fa-temperature-hot:after{content:"\10f76a"}.fad.fa-temperature-low:after{content:"\10f76b"}.fad.fa-temperature-up:after{content:"\10f940"}.fad.fa-tenge:after{content:"\10f7d7"}.fad.fa-tennis-ball:after{content:"\10f45e"}.fad.fa-terminal:after{content:"\10f120"}.fad.fa-text:after{content:"\10f893"}.fad.fa-text-height:after{content:"\10f034"}.fad.fa-text-size:after{content:"\10f894"}.fad.fa-text-width:after{content:"\10f035"}.fad.fa-th:after{content:"\10f00a"}.fad.fa-th-large:after{content:"\10f009"}.fad.fa-th-list:after{content:"\10f00b"}.fad.fa-theater-masks:after{content:"\10f630"}.fad.fa-thermometer:after{content:"\10f491"}.fad.fa-thermometer-empty:after{content:"\10f2cb"}.fad.fa-thermometer-full:after{content:"\10f2c7"}.fad.fa-thermometer-half:after{content:"\10f2c9"}.fad.fa-thermometer-quarter:after{content:"\10f2ca"}.fad.fa-thermometer-three-quarters:after{content:"\10f2c8"}.fad.fa-theta:after{content:"\10f69e"}.fad.fa-thumbs-down:after{content:"\10f165"}.fad.fa-thumbs-up:after{content:"\10f164"}.fad.fa-thumbtack:after{content:"\10f08d"}.fad.fa-thunderstorm:after{content:"\10f76c"}.fad.fa-thunderstorm-moon:after{content:"\10f76d"}.fad.fa-thunderstorm-sun:after{content:"\10f76e"}.fad.fa-ticket:after{content:"\10f145"}.fad.fa-ticket-alt:after{content:"\10f3ff"}.fad.fa-tilde:after{content:"\10f69f"}.fad.fa-times:after{content:"\10f00d"}.fad.fa-times-circle:after{content:"\10f057"}.fad.fa-times-hexagon:after{content:"\10f2ee"}.fad.fa-times-octagon:after{content:"\10f2f0"}.fad.fa-times-square:after{content:"\10f2d3"}.fad.fa-tint:after{content:"\10f043"}.fad.fa-tint-slash:after{content:"\10f5c7"}.fad.fa-tire:after{content:"\10f631"}.fad.fa-tire-flat:after{content:"\10f632"}.fad.fa-tire-pressure-warning:after{content:"\10f633"}.fad.fa-tire-rugged:after{content:"\10f634"}.fad.fa-tired:after{content:"\10f5c8"}.fad.fa-toggle-off:after{content:"\10f204"}.fad.fa-toggle-on:after{content:"\10f205"}.fad.fa-toilet:after{content:"\10f7d8"}.fad.fa-toilet-paper:after{content:"\10f71e"}.fad.fa-toilet-paper-alt:after{content:"\10f71f"}.fad.fa-tombstone:after{content:"\10f720"}.fad.fa-tombstone-alt:after{content:"\10f721"}.fad.fa-toolbox:after{content:"\10f552"}.fad.fa-tools:after{content:"\10f7d9"}.fad.fa-tooth:after{content:"\10f5c9"}.fad.fa-toothbrush:after{content:"\10f635"}.fad.fa-torah:after{content:"\10f6a0"}.fad.fa-torii-gate:after{content:"\10f6a1"}.fad.fa-tornado:after{content:"\10f76f"}.fad.fa-tractor:after{content:"\10f722"}.fad.fa-trademark:after{content:"\10f25c"}.fad.fa-traffic-cone:after{content:"\10f636"}.fad.fa-traffic-light:after{content:"\10f637"}.fad.fa-traffic-light-go:after{content:"\10f638"}.fad.fa-traffic-light-slow:after{content:"\10f639"}.fad.fa-traffic-light-stop:after{content:"\10f63a"}.fad.fa-trailer:after{content:"\10f941"}.fad.fa-train:after{content:"\10f238"}.fad.fa-tram:after{content:"\10f7da"}.fad.fa-transgender:after{content:"\10f224"}.fad.fa-transgender-alt:after{content:"\10f225"}.fad.fa-transporter:after{content:"\10f942"}.fad.fa-transporter-1:after{content:"\10f943"}.fad.fa-transporter-2:after{content:"\10f944"}.fad.fa-transporter-3:after{content:"\10f945"}.fad.fa-transporter-empty:after{content:"\10f946"}.fad.fa-trash:after{content:"\10f1f8"}.fad.fa-trash-alt:after{content:"\10f2ed"}.fad.fa-trash-restore:after{content:"\10f829"}.fad.fa-trash-restore-alt:after{content:"\10f82a"}.fad.fa-trash-undo:after{content:"\10f895"}.fad.fa-trash-undo-alt:after{content:"\10f896"}.fad.fa-treasure-chest:after{content:"\10f723"}.fad.fa-tree:after{content:"\10f1bb"}.fad.fa-tree-alt:after{content:"\10f400"}.fad.fa-tree-christmas:after{content:"\10f7db"}.fad.fa-tree-decorated:after{content:"\10f7dc"}.fad.fa-tree-large:after{content:"\10f7dd"}.fad.fa-tree-palm:after{content:"\10f82b"}.fad.fa-trees:after{content:"\10f724"}.fad.fa-triangle:after{content:"\10f2ec"}.fad.fa-triangle-music:after{content:"\10f8e2"}.fad.fa-trophy:after{content:"\10f091"}.fad.fa-trophy-alt:after{content:"\10f2eb"}.fad.fa-truck:after{content:"\10f0d1"}.fad.fa-truck-container:after{content:"\10f4dc"}.fad.fa-truck-couch:after{content:"\10f4dd"}.fad.fa-truck-loading:after{content:"\10f4de"}.fad.fa-truck-monster:after{content:"\10f63b"}.fad.fa-truck-moving:after{content:"\10f4df"}.fad.fa-truck-pickup:after{content:"\10f63c"}.fad.fa-truck-plow:after{content:"\10f7de"}.fad.fa-truck-ramp:after{content:"\10f4e0"}.fad.fa-trumpet:after{content:"\10f8e3"}.fad.fa-tshirt:after{content:"\10f553"}.fad.fa-tty:after{content:"\10f1e4"}.fad.fa-turkey:after{content:"\10f725"}.fad.fa-turntable:after{content:"\10f8e4"}.fad.fa-turtle:after{content:"\10f726"}.fad.fa-tv:after{content:"\10f26c"}.fad.fa-tv-alt:after{content:"\10f8e5"}.fad.fa-tv-music:after{content:"\10f8e6"}.fad.fa-tv-retro:after{content:"\10f401"}.fad.fa-typewriter:after{content:"\10f8e7"}.fad.fa-ufo:after{content:"\10f947"}.fad.fa-ufo-beam:after{content:"\10f948"}.fad.fa-umbrella:after{content:"\10f0e9"}.fad.fa-umbrella-beach:after{content:"\10f5ca"}.fad.fa-underline:after{content:"\10f0cd"}.fad.fa-undo:after{content:"\10f0e2"}.fad.fa-undo-alt:after{content:"\10f2ea"}.fad.fa-unicorn:after{content:"\10f727"}.fad.fa-union:after{content:"\10f6a2"}.fad.fa-universal-access:after{content:"\10f29a"}.fad.fa-university:after{content:"\10f19c"}.fad.fa-unlink:after{content:"\10f127"}.fad.fa-unlock:after{content:"\10f09c"}.fad.fa-unlock-alt:after{content:"\10f13e"}.fad.fa-upload:after{content:"\10f093"}.fad.fa-usb-drive:after{content:"\10f8e9"}.fad.fa-usd-circle:after{content:"\10f2e8"}.fad.fa-usd-square:after{content:"\10f2e9"}.fad.fa-user:after{content:"\10f007"}.fad.fa-user-alien:after{content:"\10f94a"}.fad.fa-user-alt:after{content:"\10f406"}.fad.fa-user-alt-slash:after{content:"\10f4fa"}.fad.fa-user-astronaut:after{content:"\10f4fb"}.fad.fa-user-chart:after{content:"\10f6a3"}.fad.fa-user-check:after{content:"\10f4fc"}.fad.fa-user-circle:after{content:"\10f2bd"}.fad.fa-user-clock:after{content:"\10f4fd"}.fad.fa-user-cog:after{content:"\10f4fe"}.fad.fa-user-cowboy:after{content:"\10f8ea"}.fad.fa-user-crown:after{content:"\10f6a4"}.fad.fa-user-edit:after{content:"\10f4ff"}.fad.fa-user-friends:after{content:"\10f500"}.fad.fa-user-graduate:after{content:"\10f501"}.fad.fa-user-hard-hat:after{content:"\10f82c"}.fad.fa-user-headset:after{content:"\10f82d"}.fad.fa-user-injured:after{content:"\10f728"}.fad.fa-user-lock:after{content:"\10f502"}.fad.fa-user-md:after{content:"\10f0f0"}.fad.fa-user-md-chat:after{content:"\10f82e"}.fad.fa-user-minus:after{content:"\10f503"}.fad.fa-user-music:after{content:"\10f8eb"}.fad.fa-user-ninja:after{content:"\10f504"}.fad.fa-user-nurse:after{content:"\10f82f"}.fad.fa-user-plus:after{content:"\10f234"}.fad.fa-user-robot:after{content:"\10f94b"}.fad.fa-user-secret:after{content:"\10f21b"}.fad.fa-user-shield:after{content:"\10f505"}.fad.fa-user-slash:after{content:"\10f506"}.fad.fa-user-tag:after{content:"\10f507"}.fad.fa-user-tie:after{content:"\10f508"}.fad.fa-user-times:after{content:"\10f235"}.fad.fa-user-visor:after{content:"\10f94c"}.fad.fa-users:after{content:"\10f0c0"}.fad.fa-users-class:after{content:"\10f63d"}.fad.fa-users-cog:after{content:"\10f509"}.fad.fa-users-crown:after{content:"\10f6a5"}.fad.fa-users-medical:after{content:"\10f830"}.fad.fa-utensil-fork:after{content:"\10f2e3"}.fad.fa-utensil-knife:after{content:"\10f2e4"}.fad.fa-utensil-spoon:after{content:"\10f2e5"}.fad.fa-utensils:after{content:"\10f2e7"}.fad.fa-utensils-alt:after{content:"\10f2e6"}.fad.fa-vacuum:after{content:"\10f94d"}.fad.fa-vacuum-robot:after{content:"\10f94e"}.fad.fa-value-absolute:after{content:"\10f6a6"}.fad.fa-vector-square:after{content:"\10f5cb"}.fad.fa-venus:after{content:"\10f221"}.fad.fa-venus-double:after{content:"\10f226"}.fad.fa-venus-mars:after{content:"\10f228"}.fad.fa-vhs:after{content:"\10f8ec"}.fad.fa-vial:after{content:"\10f492"}.fad.fa-vials:after{content:"\10f493"}.fad.fa-video:after{content:"\10f03d"}.fad.fa-video-plus:after{content:"\10f4e1"}.fad.fa-video-slash:after{content:"\10f4e2"}.fad.fa-vihara:after{content:"\10f6a7"}.fad.fa-violin:after{content:"\10f8ed"}.fad.fa-voicemail:after{content:"\10f897"}.fad.fa-volcano:after{content:"\10f770"}.fad.fa-volleyball-ball:after{content:"\10f45f"}.fad.fa-volume:after{content:"\10f6a8"}.fad.fa-volume-down:after{content:"\10f027"}.fad.fa-volume-mute:after{content:"\10f6a9"}.fad.fa-volume-off:after{content:"\10f026"}.fad.fa-volume-slash:after{content:"\10f2e2"}.fad.fa-volume-up:after{content:"\10f028"}.fad.fa-vote-nay:after{content:"\10f771"}.fad.fa-vote-yea:after{content:"\10f772"}.fad.fa-vr-cardboard:after{content:"\10f729"}.fad.fa-wagon-covered:after{content:"\10f8ee"}.fad.fa-walker:after{content:"\10f831"}.fad.fa-walkie-talkie:after{content:"\10f8ef"}.fad.fa-walking:after{content:"\10f554"}.fad.fa-wallet:after{content:"\10f555"}.fad.fa-wand:after{content:"\10f72a"}.fad.fa-wand-magic:after{content:"\10f72b"}.fad.fa-warehouse:after{content:"\10f494"}.fad.fa-warehouse-alt:after{content:"\10f495"}.fad.fa-washer:after{content:"\10f898"}.fad.fa-watch:after{content:"\10f2e1"}.fad.fa-watch-calculator:after{content:"\10f8f0"}.fad.fa-watch-fitness:after{content:"\10f63e"}.fad.fa-water:after{content:"\10f773"}.fad.fa-water-lower:after{content:"\10f774"}.fad.fa-water-rise:after{content:"\10f775"}.fad.fa-wave-sine:after{content:"\10f899"}.fad.fa-wave-square:after{content:"\10f83e"}.fad.fa-wave-triangle:after{content:"\10f89a"}.fad.fa-waveform:after{content:"\10f8f1"}.fad.fa-waveform-path:after{content:"\10f8f2"}.fad.fa-webcam:after{content:"\10f832"}.fad.fa-webcam-slash:after{content:"\10f833"}.fad.fa-weight:after{content:"\10f496"}.fad.fa-weight-hanging:after{content:"\10f5cd"}.fad.fa-whale:after{content:"\10f72c"}.fad.fa-wheat:after{content:"\10f72d"}.fad.fa-wheelchair:after{content:"\10f193"}.fad.fa-whistle:after{content:"\10f460"}.fad.fa-wifi:after{content:"\10f1eb"}.fad.fa-wifi-1:after{content:"\10f6aa"}.fad.fa-wifi-2:after{content:"\10f6ab"}.fad.fa-wifi-slash:after{content:"\10f6ac"}.fad.fa-wind:after{content:"\10f72e"}.fad.fa-wind-turbine:after{content:"\10f89b"}.fad.fa-wind-warning:after{content:"\10f776"}.fad.fa-window:after{content:"\10f40e"}.fad.fa-window-alt:after{content:"\10f40f"}.fad.fa-window-close:after{content:"\10f410"}.fad.fa-window-frame:after{content:"\10f94f"}.fad.fa-window-frame-open:after{content:"\10f950"}.fad.fa-window-maximize:after{content:"\10f2d0"}.fad.fa-window-minimize:after{content:"\10f2d1"}.fad.fa-window-restore:after{content:"\10f2d2"}.fad.fa-windsock:after{content:"\10f777"}.fad.fa-wine-bottle:after{content:"\10f72f"}.fad.fa-wine-glass:after{content:"\10f4e3"}.fad.fa-wine-glass-alt:after{content:"\10f5ce"}.fad.fa-won-sign:after{content:"\10f159"}.fad.fa-wreath:after{content:"\10f7e2"}.fad.fa-wrench:after{content:"\10f0ad"}.fad.fa-x-ray:after{content:"\10f497"}.fad.fa-yen-sign:after{content:"\10f157"}.fad.fa-yin-yang:after{content:"\10f6ad"}@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:300;font-display:auto;src:url(../webfonts/fa-light-300.eot);src:url(../webfonts/fa-light-300.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-light-300.woff2) format("woff2"),url(../webfonts/fa-light-300.woff) format("woff"),url(../webfonts/fa-light-300.ttf) format("truetype"),url(../webfonts/fa-light-300.svg#fontawesome) format("svg")}.fal{font-weight:300}@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.fal,.far{font-family:"Font Awesome 5 Pro"}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Pro";font-weight:900} \ No newline at end of file diff --git a/assets/css/fontawesome/webfonts/fa-brands-400.eot b/assets/css/fontawesome/webfonts/fa-brands-400.eot new file mode 100644 index 0000000..ff42eeb Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-brands-400.eot differ diff --git a/assets/css/fontawesome/webfonts/fa-brands-400.svg b/assets/css/fontawesome/webfonts/fa-brands-400.svg new file mode 100644 index 0000000..3613b35 --- /dev/null +++ b/assets/css/fontawesome/webfonts/fa-brands-400.svg @@ -0,0 +1,3535 @@ + + + + + +Created by FontForge 20190801 at Tue Dec 10 16:08:44 2019 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/css/fontawesome/webfonts/fa-brands-400.ttf b/assets/css/fontawesome/webfonts/fa-brands-400.ttf new file mode 100644 index 0000000..79b6bae Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-brands-400.ttf differ diff --git a/assets/css/fontawesome/webfonts/fa-brands-400.woff b/assets/css/fontawesome/webfonts/fa-brands-400.woff new file mode 100644 index 0000000..56d4bbb Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-brands-400.woff differ diff --git a/assets/css/fontawesome/webfonts/fa-brands-400.woff2 b/assets/css/fontawesome/webfonts/fa-brands-400.woff2 new file mode 100644 index 0000000..8a83663 Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-brands-400.woff2 differ diff --git a/assets/css/fontawesome/webfonts/fa-duotone-900.eot b/assets/css/fontawesome/webfonts/fa-duotone-900.eot new file mode 100644 index 0000000..6ca4482 Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-duotone-900.eot differ diff --git a/assets/css/fontawesome/webfonts/fa-duotone-900.svg b/assets/css/fontawesome/webfonts/fa-duotone-900.svg new file mode 100644 index 0000000..43d3417 --- /dev/null +++ b/assets/css/fontawesome/webfonts/fa-duotone-900.svg @@ -0,0 +1,14692 @@ + + + + + +Created by FontForge 20190801 at Tue Dec 10 16:08:45 2019 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/css/fontawesome/webfonts/fa-duotone-900.ttf b/assets/css/fontawesome/webfonts/fa-duotone-900.ttf new file mode 100644 index 0000000..b1a5e7e Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-duotone-900.ttf differ diff --git a/assets/css/fontawesome/webfonts/fa-duotone-900.woff b/assets/css/fontawesome/webfonts/fa-duotone-900.woff new file mode 100644 index 0000000..de2ce75 Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-duotone-900.woff differ diff --git a/assets/css/fontawesome/webfonts/fa-duotone-900.woff2 b/assets/css/fontawesome/webfonts/fa-duotone-900.woff2 new file mode 100644 index 0000000..0d57b19 Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-duotone-900.woff2 differ diff --git a/assets/css/fontawesome/webfonts/fa-light-300.eot b/assets/css/fontawesome/webfonts/fa-light-300.eot new file mode 100644 index 0000000..5051b87 Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-light-300.eot differ diff --git a/assets/css/fontawesome/webfonts/fa-light-300.svg b/assets/css/fontawesome/webfonts/fa-light-300.svg new file mode 100644 index 0000000..48908c4 --- /dev/null +++ b/assets/css/fontawesome/webfonts/fa-light-300.svg @@ -0,0 +1,11936 @@ + + + + + +Created by FontForge 20190801 at Tue Dec 10 16:08:46 2019 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/css/fontawesome/webfonts/fa-light-300.ttf b/assets/css/fontawesome/webfonts/fa-light-300.ttf new file mode 100644 index 0000000..34489d0 Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-light-300.ttf differ diff --git a/assets/css/fontawesome/webfonts/fa-light-300.woff b/assets/css/fontawesome/webfonts/fa-light-300.woff new file mode 100644 index 0000000..414c107 Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-light-300.woff differ diff --git a/assets/css/fontawesome/webfonts/fa-light-300.woff2 b/assets/css/fontawesome/webfonts/fa-light-300.woff2 new file mode 100644 index 0000000..d49e7e2 Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-light-300.woff2 differ diff --git a/assets/css/fontawesome/webfonts/fa-regular-400.eot b/assets/css/fontawesome/webfonts/fa-regular-400.eot new file mode 100644 index 0000000..4c6662f Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-regular-400.eot differ diff --git a/assets/css/fontawesome/webfonts/fa-regular-400.svg b/assets/css/fontawesome/webfonts/fa-regular-400.svg new file mode 100644 index 0000000..32aae12 --- /dev/null +++ b/assets/css/fontawesome/webfonts/fa-regular-400.svg @@ -0,0 +1,10905 @@ + + + + + +Created by FontForge 20190801 at Tue Dec 10 16:08:46 2019 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/css/fontawesome/webfonts/fa-regular-400.ttf b/assets/css/fontawesome/webfonts/fa-regular-400.ttf new file mode 100644 index 0000000..2da2b23 Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-regular-400.ttf differ diff --git a/assets/css/fontawesome/webfonts/fa-regular-400.woff b/assets/css/fontawesome/webfonts/fa-regular-400.woff new file mode 100644 index 0000000..ae20cd5 Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-regular-400.woff differ diff --git a/assets/css/fontawesome/webfonts/fa-regular-400.woff2 b/assets/css/fontawesome/webfonts/fa-regular-400.woff2 new file mode 100644 index 0000000..783cfcf Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-regular-400.woff2 differ diff --git a/assets/css/fontawesome/webfonts/fa-solid-900.eot b/assets/css/fontawesome/webfonts/fa-solid-900.eot new file mode 100644 index 0000000..cbcc72f Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-solid-900.eot differ diff --git a/assets/css/fontawesome/webfonts/fa-solid-900.svg b/assets/css/fontawesome/webfonts/fa-solid-900.svg new file mode 100644 index 0000000..190c4c8 --- /dev/null +++ b/assets/css/fontawesome/webfonts/fa-solid-900.svg @@ -0,0 +1,9297 @@ + + + + + +Created by FontForge 20190801 at Tue Dec 10 16:08:45 2019 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/css/fontawesome/webfonts/fa-solid-900.ttf b/assets/css/fontawesome/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000..18e30d4 Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-solid-900.ttf differ diff --git a/assets/css/fontawesome/webfonts/fa-solid-900.woff b/assets/css/fontawesome/webfonts/fa-solid-900.woff new file mode 100644 index 0000000..c0e39e2 Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-solid-900.woff differ diff --git a/assets/css/fontawesome/webfonts/fa-solid-900.woff2 b/assets/css/fontawesome/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000..2524b30 Binary files /dev/null and b/assets/css/fontawesome/webfonts/fa-solid-900.woff2 differ diff --git a/assets/css/reset-css.css b/assets/css/reset-css.css new file mode 100644 index 0000000..8127738 --- /dev/null +++ b/assets/css/reset-css.css @@ -0,0 +1,262 @@ +a, abbr, acronym, address, applet, article, aside, audio, b, big, blockquote, body, canvas, caption, center, cite, code, dd, del, details, dfn, div, dl, dt, em, embed, fieldset, figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, header, hgroup, html, i, iframe, img, ins, kbd, label, legend, li, mark, menu, nav, object, ol, output, p, pre, q, ruby, s, samp, section, small, span, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, time, tr, tt, u, ul, var, video{ + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section{ + display: block +} + +body{ + line-height: 1; + margin: 0 +} + +ol, ul{ + list-style: none +} + +blockquote, q{ + quotes: none +} + +blockquote:after, blockquote:before, q:after, q:before{ + content: ''; + content: none +} + +table{ + border-collapse: collapse; + border-spacing: 0 +} + +html{ + line-height: 1.15; + -webkit-text-size-adjust: 100% +} + +h1{ + font-size: 2em; + margin: .67em 0 +} + +hr{ + box-sizing: content-box; + height: 0; + overflow: visible +} + +pre{ + font-family: monospace, monospace; + font-size: 1em +} + +a{ + background-color: transparent +} + +abbr[title]{ + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted +} + +b, strong{ + font-weight: bolder +} + +code, kbd, samp{ + font-family: monospace, monospace; + font-size: 1em +} + +small{ + font-size: 80% +} + +sub, sup{ + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline +} + +sub{ + bottom: -.25em +} + +sup{ + top: -.5em +} + +img{ + border-style: none +} + +button, input, optgroup, select, textarea{ + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0 +} + +button, input{ + overflow: visible +} + +button, select{ + text-transform: none +} + +[type=button], [type=reset], [type=submit], button{ + -webkit-appearance: button +} + +[type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner, button::-moz-focus-inner{ + border-style: none; + padding: 0 +} + +[type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring, button:-moz-focusring{ + outline: 1px dotted ButtonText +} + +fieldset{ + padding: .35em .75em .625em +} + +legend{ + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal +} + +progress{ + vertical-align: baseline +} + +textarea{ + overflow: auto +} + +[type=checkbox], [type=radio]{ + box-sizing: border-box; + padding: 0 +} + +[type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button{ + height: auto +} + +[type=search]{ + -webkit-appearance: textfield; + outline-offset: -2px +} + +[type=search]::-webkit-search-decoration{ + -webkit-appearance: none +} + +::-webkit-file-upload-button{ + -webkit-appearance: button; + font: inherit +} + +details{ + display: block +} + +summary{ + display: list-item +} + +template{ + display: none +} + +[hidden]{ + display: none +} + +::selection{ + background: #468fd2; + color: #fff +} + +::-webkit-selection{ + background: #468fd2; + color: #fff +} + +::-moz-selection{ + background: #468fd2; + color: #fff +} + +a{ + text-decoration: none +} + +h1{ + font-size: 32px; +} + +h2{ + font-size: 24px; +} + +h3{ + font-size: 18.72px; +} + +h4{ + font-size: 16px; +} + +h5{ + font-size: 13.28px; +} + +h6{ + font-size: 10.72px; +} + +.clear{ + clear: both; + display: block; + overflow: hidden; + visibility: hidden; + width: 0; + height: 0 +} + +.clearfix{ + zoom: 1 +} + +.clearfix:after, .clearfix:before, .row:after, .row:before{ + content: '\0020'; + display: block; + overflow: hidden; + visibility: hidden; + width: 0; + height: 0 +} + +.clearfix:after, .row:after{ + clear: both +} + +.relativePos{ + position: relative; +} diff --git a/assets/fonts/IRANSansFaNum.ttf b/assets/fonts/IRANSansFaNum.ttf new file mode 100644 index 0000000..3a5902f Binary files /dev/null and b/assets/fonts/IRANSansFaNum.ttf differ diff --git a/assets/fonts/dubai-font-webfonts/bold/Dubai-Bold.eot b/assets/fonts/dubai-font-webfonts/bold/Dubai-Bold.eot new file mode 100644 index 0000000..eca0d00 Binary files /dev/null and b/assets/fonts/dubai-font-webfonts/bold/Dubai-Bold.eot differ diff --git a/assets/fonts/dubai-font-webfonts/bold/Dubai-Bold.ttf b/assets/fonts/dubai-font-webfonts/bold/Dubai-Bold.ttf new file mode 100644 index 0000000..f72642f Binary files /dev/null and b/assets/fonts/dubai-font-webfonts/bold/Dubai-Bold.ttf differ diff --git a/assets/fonts/dubai-font-webfonts/bold/Dubai-Bold.woff b/assets/fonts/dubai-font-webfonts/bold/Dubai-Bold.woff new file mode 100644 index 0000000..f4715af Binary files /dev/null and b/assets/fonts/dubai-font-webfonts/bold/Dubai-Bold.woff differ diff --git a/assets/fonts/dubai-font-webfonts/light/Dubai-Light.eot b/assets/fonts/dubai-font-webfonts/light/Dubai-Light.eot new file mode 100644 index 0000000..b653213 Binary files /dev/null and b/assets/fonts/dubai-font-webfonts/light/Dubai-Light.eot differ diff --git a/assets/fonts/dubai-font-webfonts/light/Dubai-Light.ttf b/assets/fonts/dubai-font-webfonts/light/Dubai-Light.ttf new file mode 100644 index 0000000..9ec24da Binary files /dev/null and b/assets/fonts/dubai-font-webfonts/light/Dubai-Light.ttf differ diff --git a/assets/fonts/dubai-font-webfonts/light/Dubai-Light.woff b/assets/fonts/dubai-font-webfonts/light/Dubai-Light.woff new file mode 100644 index 0000000..5f3bab4 Binary files /dev/null and b/assets/fonts/dubai-font-webfonts/light/Dubai-Light.woff differ diff --git a/assets/fonts/dubai-font-webfonts/medium/Dubai-Medium.eot b/assets/fonts/dubai-font-webfonts/medium/Dubai-Medium.eot new file mode 100644 index 0000000..ea385c9 Binary files /dev/null and b/assets/fonts/dubai-font-webfonts/medium/Dubai-Medium.eot differ diff --git a/assets/fonts/dubai-font-webfonts/medium/Dubai-Medium.ttf b/assets/fonts/dubai-font-webfonts/medium/Dubai-Medium.ttf new file mode 100644 index 0000000..c52df5d Binary files /dev/null and b/assets/fonts/dubai-font-webfonts/medium/Dubai-Medium.ttf differ diff --git a/assets/fonts/dubai-font-webfonts/medium/Dubai-Medium.woff b/assets/fonts/dubai-font-webfonts/medium/Dubai-Medium.woff new file mode 100644 index 0000000..5b19be6 Binary files /dev/null and b/assets/fonts/dubai-font-webfonts/medium/Dubai-Medium.woff differ diff --git a/assets/fonts/dubai-font-webfonts/regular/Dubai-Regular.eot b/assets/fonts/dubai-font-webfonts/regular/Dubai-Regular.eot new file mode 100644 index 0000000..9a15928 Binary files /dev/null and b/assets/fonts/dubai-font-webfonts/regular/Dubai-Regular.eot differ diff --git a/assets/fonts/dubai-font-webfonts/regular/Dubai-Regular.ttf b/assets/fonts/dubai-font-webfonts/regular/Dubai-Regular.ttf new file mode 100644 index 0000000..9d9cea1 Binary files /dev/null and b/assets/fonts/dubai-font-webfonts/regular/Dubai-Regular.ttf differ diff --git a/assets/fonts/dubai-font-webfonts/regular/Dubai-Regular.woff b/assets/fonts/dubai-font-webfonts/regular/Dubai-Regular.woff new file mode 100644 index 0000000..61165f5 Binary files /dev/null and b/assets/fonts/dubai-font-webfonts/regular/Dubai-Regular.woff differ diff --git a/assets/img/BG-background.png b/assets/img/BG-background.png new file mode 100644 index 0000000..96bbd32 Binary files /dev/null and b/assets/img/BG-background.png differ diff --git a/assets/img/anaghas.jpg b/assets/img/anaghas.jpg new file mode 100644 index 0000000..b57aea5 Binary files /dev/null and b/assets/img/anaghas.jpg differ diff --git a/assets/img/banner.jpg b/assets/img/banner.jpg new file mode 100644 index 0000000..83bf2af Binary files /dev/null and b/assets/img/banner.jpg differ diff --git a/assets/img/iran.png b/assets/img/iran.png new file mode 100644 index 0000000..0f6b6b9 Binary files /dev/null and b/assets/img/iran.png differ diff --git a/assets/img/iran1.png b/assets/img/iran1.png new file mode 100644 index 0000000..e6848b5 Binary files /dev/null and b/assets/img/iran1.png differ diff --git a/assets/img/khilian.jpg b/assets/img/khilian.jpg new file mode 100644 index 0000000..b57aea5 Binary files /dev/null and b/assets/img/khilian.jpg differ diff --git a/assets/img/logows.png b/assets/img/logows.png new file mode 100644 index 0000000..a439087 Binary files /dev/null and b/assets/img/logows.png differ diff --git a/assets/img/muharam.png b/assets/img/muharam.png new file mode 100644 index 0000000..71fad4f Binary files /dev/null and b/assets/img/muharam.png differ diff --git a/assets/img/user.png b/assets/img/user.png new file mode 100644 index 0000000..3c62407 Binary files /dev/null and b/assets/img/user.png differ diff --git a/assets/scss/_CKEditorStyle.scss b/assets/scss/_CKEditorStyle.scss new file mode 100644 index 0000000..2b666e2 --- /dev/null +++ b/assets/scss/_CKEditorStyle.scss @@ -0,0 +1,80 @@ +.ck-content { + width: 100%; + direction: rtl; + text-align: right; + + &:lang(en) { + direction: ltr; + text-align: left; + } + + a { + display: inline-block; + color: blue; + } + + p{ + font-family: 'dubaiL', sans-serif; + } + + + p, a, span, b, ul, li, em, h1, h2, h3, h4, h5, h6, strong { + font-family: inherit, sans-serif; + direction: unset; + text-align: unset; + + &:lang(en) { + font-family: inherit; + direction: unset; + text-align: unset; + } + + &[dir="ltr"] { + direction: ltr; + text-align: left; + + p, a, span, b, ul, li, em, h1, h2, h3, h4, h5, h6, strong { + direction: ltr; + text-align: left; + } + } + + &[dir="rtl"] { + direction: rtl; + text-align: right; + + p, a, span, b, ul, li, em, h1, h2, h3, h4, h5, h6, strong { + direction: rtl; + text-align: right; + } + } + } + + p { + line-height: 1.6em; + } + + h1, h2, h3, h4, h5, h6 { + line-height: 1.3em; + } + + li { + margin-bottom: 15px; + line-height: 1.6em; + font-family: 'dubaiM', sans-serif; + } + + ol { + list-style: decimal; + list-style-position: inside; + } + + ul { + list-style: disc; + list-style-position: inside; + } + + img { + max-width: 100%!important; + } +} diff --git a/assets/scss/_el_ui_rtl.scss b/assets/scss/_el_ui_rtl.scss new file mode 100644 index 0000000..f77fb93 --- /dev/null +++ b/assets/scss/_el_ui_rtl.scss @@ -0,0 +1,139 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////////// element ui rtl fix +html:lang(fa) { + // .el-tag { + /*margin-bottom: 10px!important;*/ + // } + + .text-area { + textarea { + height: 100px; + } + } + + .el-popup-parent--hidden { + padding-right: 0 !important; + } + + .el-tag .el-icon-close { + right: auto !important; + left: -5px !important; + } + + .el-table .el-table__body-wrapper .el-table__row .is-left { + text-align: left !important; + } + + .wrapper { + min-height: 100vh; + } + + .el-form-item__label { + float: right !important; + text-align: right !important; + } + + .el-form-item__content { + margin-left: 0 !important; + margin-right: 120px !important; + } + + @media (max-width: 768px) { + .el-form-item__content { + margin-left: 0 !important; + margin-right: 0 !important; + } + } + + .secondTitle { + margin-top: 50px; + } + + .el-upload__input { + display: none !important; + } + + .el-message-box__title, .el-message-box__message { + direction: rtl !important; + text-align: right !important; + } + + .el-message-box__message { + padding-left: 12px !important; + padding-right: 36px !important; + } + + .el-message-box__btns { + text-align: left !important; + } + + .el-message-box__headerbtn { + right: auto !important; + left: 15px !important; + } + + .el-message-box__btns button:nth-child(2) { + margin-left: 0 !important; + margin-right: 10px !important; + } + + .el-message-box__status { + right: 0 !important; + } + + .el-table td, .el-table th { + text-align: right !important; + } + + .el-upload__input { + display: none !important; + } + + .el-checkbox__label { + padding-left: 0 !important; + padding-right: 10px !important; + } + + .el-message__icon { + margin-right: 0 !important; + margin-left: 10px !important; + } + + .sidebar-subnav { + background: rgba(0, 0, 0, 0.05) !important; + } + + .sidebar > .nav > li { + border-bottom: 1px solid #eee !important; + } + + .brand-logo p { + margin-top: 6px !important; + } + + .brand-logo-collapsed svg { + fill: #fff !important; + } + + .nav-floating { + background: #fff !important; + } + + .el-dialog__headerbtn { + right: auto !important; + left: 20px !important; + } + + .el-radio__label { + padding-right: 10px !important; + } + + .el-scrollbar__wrap { + margin-right: 0 !important; + margin-left: -17px !important; + } + + .el-upload-list--picture-card .el-upload-list__item-actions span + span{ + margin-left: 0; + } + +} diff --git a/assets/scss/_extentions.scss b/assets/scss/_extentions.scss new file mode 100644 index 0000000..03a1585 --- /dev/null +++ b/assets/scss/_extentions.scss @@ -0,0 +1,31 @@ +%defaultTransition { + @include transition(0.3s); +} + +%userSelect { + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} + +%appearance { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; +} + +%defaultBoxShadow { + @include boxShadow(0 5px 8px rgba(0, 0, 0, 0.2)) +} + +%formStyles { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + direction: rtl; + font-family: 'sahel'; + border: 1px solid transparent; + background: #fff; + @include borderRadius(2px); +} diff --git a/assets/scss/_fonts.scss b/assets/scss/_fonts.scss new file mode 100644 index 0000000..e2a6d31 --- /dev/null +++ b/assets/scss/_fonts.scss @@ -0,0 +1,42 @@ +////////////////////////////////////////// dubai + +// dubai-regular +@font-face { + font-family: 'dubaiR'; + src: url('../fonts/dubai-font-webfonts/regular/Dubai-Regular.eot?#iefix') format('embedded-opentype'), + url('../fonts/dubai-font-webfonts/regular/Dubai-Regular.woff') format('woff'), + url('../fonts/dubai-font-webfonts/regular/Dubai-Regular.ttf') format('truetype'); +} + +// dubai-light +@font-face { + font-family: 'dubaiL'; + src: url('../fonts/dubai-font-webfonts/light/Dubai-Light.eot?#iefix') format('embedded-opentype'), + url('../fonts/dubai-font-webfonts/light/Dubai-Light.woff') format('woff'), + url('../fonts/dubai-font-webfonts/light/Dubai-Light.ttf') format('truetype'); +} + + +// dubai-medium +@font-face { + font-family: 'dubaiM'; + src: url('../fonts/dubai-font-webfonts/medium/Dubai-Medium.eot?#iefix') format('embedded-opentype'), + url('../fonts/dubai-font-webfonts/medium/Dubai-Medium.woff') format('woff'), + url('../fonts/dubai-font-webfonts/medium/Dubai-Medium.ttf') format('truetype'); +} + +// dubai-bold +@font-face { + font-family: 'dubaiB'; + src: url('../fonts/dubai-font-webfonts/bold/Dubai-Bold.eot?#iefix') format('embedded-opentype'), + url('../fonts/dubai-font-webfonts/bold/Dubai-Bold.woff') format('woff'), + url('../fonts/dubai-font-webfonts/bold/Dubai-Bold.ttf') format('truetype'); +} + +//////////////iran-sans + + +@font-face { + font-family: 'sansNum'; + src: url('../fonts/IRANSansFaNum.ttf') format('truetype'); +} diff --git a/assets/scss/_globalStyles.scss b/assets/scss/_globalStyles.scss new file mode 100644 index 0000000..99e7e34 --- /dev/null +++ b/assets/scss/_globalStyles.scss @@ -0,0 +1,1384 @@ +body { + direction: rtl; +} + +h1, h2, h3, h4, h5, h6, a, p, span { + font-family: 'dubaiM', sans-serif; + line-height: 1.6em; +} + +.h1 { + font-size: $h1 !important; +} + +.h2 { + font-size: $h2 !important; +} + +.h3 { + font-size: $h3 !important; +} + +.h4 { + font-size: $h4 !important; +} + +.h5 { + font-size: $h5 !important; +} + +.h6 { + font-size: $h6 !important; +} + +p { + font-size: 16px; +} + +input, textarea { + font-family: 'dubaiM', sans-serif; + resize: vertical; +} + +* { + outline: none; + + &:lang(fa) { + direction: rtl; + } +} + +.stretch { + display: flex; + align-items: stretch; +} + +.txtBtn { + font-family: 'dubaiL', sans-serif; + text-align: center; +} + +.section { + padding: 20px 0; +} + +.btn { + display: inline-block; + padding: 0 4px; + border: 1px solid $gray; + cursor: pointer; + font-size: 12px; + font-weight: bold; + color: $themeReverse; + background-color: #fff; + @extend %defaultTransition; + + &.bigBtn { + padding: 4px 16px !important; + font-size: 16px !important; + font-weight: lighter !important; + } + + &.btn-primary { + border-color: $border; + color: $gray1; + border-radius: 5px; + + a { + color: $gray1; + @extend %defaultTransition; + } + + &:hover { + background-color: $gray; + color: $gray1; + } + } + + &.btn-secondary { + border-color: $red; + background-color: $red; + color: white; + padding: 4px 8px !important; + border-radius: 5px; + + &:hover { + background-color: transparent; + color: $red; + + } + } + + &.btn-success { + border-color: green; + background-color: transparent; + color: green; + border-radius: 5px; + + &:hover { + background-color: green; + color: white; + } + } + + &.btn-disable { + border-color: #666666; + background-color: #666666; + color: white; + border-radius: 5px; + } + + &:hover { + color: $gray1; + background: $gray; + } + + &.btn-active { + background: $gray; + color: $gray1; + } +} + +.newsBox { + padding-right: 10px !important; + padding-left: 10px !important; + + .innerBox { + height: 100%; + padding: 5px; + display: flex; + flex-wrap: wrap; + @extend %defaultTransition; + + &:hover { + @include boxShadow(0 3px 10px rgba(#000, 0.17)) + } + + .suTitrBox { + display: flex; + + div { + h2 { + font-size: 14px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + } + + &:first-child { + margin-left: 5px; + } + } + } + + img { + width: 100%; + } + + h3 { + flex-basis: 100%; + font-size: 11px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + margin-bottom: 10px; + } + + .date { + align-items: center; + justify-content: space-between; + margin-top: auto; + + p { + color: #999999; + margin-left: 10px; + font-size: 12px; + font-family: 'sansNum', sans-serif; + } + } + } +} + +.pointer { + cursor: pointer; +} + +.hide { + opacity: 0; + height: 0; + overflow: hidden; +} + +.sectionStyle { + background: $sectionBg; + padding: 15px; + @include borderRadius(10px); +} + + +.line-txt { + position: relative; + margin-bottom: 16px; + + span { + display: inline-block; + padding-left: 16px; + position: absolute; + background-color: white; + color: gray; + font-family: 'dubaiB' !important; + top: -16px; + font-size: 20px; + } + + .line { + height: 1px; + background-color: rgba(#000, 0.2) !important; + + } +} + +.sidebar-line-txt { + margin-bottom: 15px; + + span { + display: inline-block; + font-family: 'dubaiB' !important; + font-size: 16px; + } + + .red-line { + height: 1px; + background-color: $border; + margin-top: 10px; + margin-bottom: 15px; + } +} + +.btn-active { + display: inline-block; + padding: 4px 16px; + border: 1px solid $red; + cursor: pointer; + font-size: 16px; + color: $themeReverse; + width: 100%; + @extend %defaultTransition; + + &.btn-primary-active { + border-color: white; + background-color: white; + color: $gray1; + border-radius: 5px; + border: 1px solid $border; + + + a { + color: $red; + @extend %defaultTransition; + } + + &:hover { + background-color: $gray; + color: $gray1; + + } + } + + &.btn-secondary-active { + border-color: white; + background-color: white; + color: $red; + padding: 4px 8px !important; + border-radius: 5px; + } +} + +button { + font-family: 'dubaiM', sans-serif; +} + +.fixedHeight { + overflow: hidden !important; + height: 100vh !important; +} + +.app-front { + &.miniHeader { + .site--header { + .view-banner { + .iran-flag { + height: 0; + @extend %defaultTransition; + } + + .banner { + img { + width: 0; + @extend %defaultTransition; + } + } + } + } + + .bannerHeightFix { + height: 0; + @extend %defaultTransition; + } + } +} + +.page { + min-height: calc(100vh - 330px); + padding-top: 100px; + padding-bottom: 50px; + + .bannerHeightFix { + width: 100%; + visibility: hidden; + } +} + +.slick-dots { + li { + //width: 0 !important; + + button::before { + color: $red !important; + } + + &.slick-active button::before { + color: $red !important; + } + } +} + +.el-popover { + background: $red !important; + color: white; + font-family: 'dubaiB', sans-serif; + border-radius: 15px; + text-align: center; + min-width: 124px; + padding: 10px; + + .popper__arrow::after { + border-top-color: $red !important; + } +} + +.el-carousel__container { +} + +.el-carousel__item { + margin-bottom: 0; +} + +.el-carousel__indicators--outside { + position: absolute; + bottom: 160px; +} + +.el-carousel__indicator { + margin-top: 0; +} + +.el-dialog__wrapper { + top: 0 !important; + bottom: 0 !important; +} + +.simple-lightbox { + direction: ltr !important; + + * { + direction: ltr !important; + } +} + +.justifyBetween { + justify-content: space-between; + display: flex; + flex-direction: column; +} + +.site--footer { + background-color: #444444; + overflow: hidden; + + .col1 { + padding: 40px 0 30px 0; + align-items: flex-start; + + & > div { + h3 { + color: white; + font-family: 'dubaiB', sans-serif; + margin-bottom: 15px; + } + + .link-txt { + margin-bottom: 12px; + display: inline-block; + width: 100%; + text-align: right; + color: white; + font-family: "dubaiM" !important; + font-size: 14px !important; + @extend %defaultTransition; + + &:hover { + @extend %defaultTransition; + color: $red; + } + } + } + + .logo { + @media (max-width: 768px) { + display: flex; + justify-content: center; + } + + img { + width: 140px; + margin-bottom: 10px; + @media (max-width: 768px) { + width: 120px; + } + } + } + } + + .logoTxt { + text-align: center; + width: 100%; + display: inline-block; + margin-top: 12px; + color: white; + font-family: "dubaiM" !important; + font-size: 14px !important; + } + + .ll { + display: inline-block; + width: 60%; + text-align: right; + color: white; + font-family: "dubaiM" !important; + font-size: 14px !important; + + } + + .border { + height: 1px; + background-color: #D8D8D8; + border-bottom-width: 1px; + border-color: white; + //margin-top: 36px; + //margin-bottom: 36px; + } + + .view-copy-right { + padding: 20px 0; + + .icon-field { + @media (max-width: 768px) { + text-align: center; + padding-bottom: 10px; + } + + i { + color: white; + padding: 0 10px; + //margin-bottom: 10px; + @extend %defaultTransition; + cursor: pointer; + + &:hover { + @extend %defaultTransition; + color: $red; + } + } + } + + .copy-right-holder { + text-align: left; + margin-left: 0; + @media (max-width: 768px) { + text-align: center; + } + + .copy-right { + color: white; + width: 100%; + + a { + color: #fff; + @extend %defaultTransition; + + &:hover { + color: #000000; + font-weight: bold; + @extend %defaultTransition; + } + } + + //text-align: left; + } + } + } + + .footer-link { + display: inline-block; + margin-left: 32px; + color: white; + margin-bottom: 32px; + @extend %defaultTransition; + + &:hover { + @extend %defaultTransition; + color: $red; + } + } +} + +.site--header { + background: #000; + width: 100%; + position: fixed; + top: 0; + left: 0; + z-index: 10; + + .site-top { + padding: 3px 0; + background: #444444; + + .site-top-left { + text-align: left; + @media (max-width: 768px) { + text-align: center; + } + + .el-button { + padding: 0; + + span { + @extend %defaultTransition; + + &:hover { + color: $red; + @extend %defaultTransition; + } + } + } + + .email-top { + flex-direction: row; + display: flex; + align-items: center; + justify-content: flex-end; + //margin: 0 10px; + + @media (max-width: 768px) { + justify-content: center; + direction: ltr; + } + + .email-text { + margin: 0 10px; + } + + i { + color: #fff; + } + } + + //.flip-clock{ + // direction: ltr !important; + //} + } + + .site-top-right { + @media (max-width: 768px) { + text-align: center; + } + + .time-date { + margin-right: 10px; + } + } + + p, span, a { + color: white; + //margin: 0 10px; + //margin-right: 10px; + //margin-left: 10px; + font-family: 'sansNum', sans-serif; + font-size: 12px; + @extend %defaultTransition + } + + a:hover { + @extend %defaultTransition; + color: $red; + } + + i { + font-size: 15px; + } + + } + + .view-banner { + position: relative; + + .relativePos { + border-top: 1px solid #666666; + background: #7a7a7a; + } + + .iran-flag { + position: absolute; + top: 0; + left: 0; + height: 100%; + z-index: 1; + @extend %defaultTransition; + } + + .banner { + width: 100%; + background: #000; + padding: 0 !important; + margin: 0 !important; + + img { + display: block; + width: 100%; + @extend %defaultTransition; + } + } + + .navigations { + background: #7a7a7a; + + .row { + height: 100%; + } + + nav { + height: 100%; + + ul { + display: flex; + flex-wrap: wrap; + height: 100%; + + li { + @extend %defaultTransition; + position: relative; + height: $headerNavLinksHeight; + display: flex; + align-items: center; + + + &.active { + background: $red1; + } + + &:hover { + background-color: $red1; + + .mega-menu { + display: block; + } + } + + a { + display: block ruby; + padding: 5px 10px; + color: white; + + } + + .mega-menu { + $subMenuColor: #696363; + $subMenuWidth: 330px; + background: $subMenuColor; + position: absolute; + top: $headerNavLinksHeight; + right: 0; + display: none; + width: $subMenuWidth; + + li { + height: auto; + + &:hover { + background: $red1; + } + } + + .tree { + display: block; + + .treeItem { + display: block; + position: relative; + padding: 5px 0; + + &:hover { + & > .children { + display: block; + } + } + + a { + display: block; + padding: 8px 10px; + font-size: 14px; + line-height: 1.3em; + } + + .hasChild { + display: inline-block; + position: absolute; + top: 50%; + left: 8px; + font-size: 13px; + color: #fff; + @include transform(translateY(-50%)); + } + + .children { + width: $subMenuWidth; + position: absolute; + top: 0; + right: 100%; + background: $subMenuColor; + display: none; + } + } + } + } + } + } + } + + .left { + position: relative; + z-index: 2; + + ul { + display: flex; + height: 100%; + justify-content: flex-end; + align-items: stretch; + @media (max-width: 992px) { + flex-direction: row-reverse; + display: flex; + li { + margin: 0 5px; + } + } + + li { + display: flex; + justify-content: center; + align-items: center; + + &.switch-btn { + @extend %defaultTransition; + + &:hover { + background: $red; + } + + a { + display: block; + padding: 5px 10px; + color: white; + } + } + + i { + color: #fff; + cursor: pointer; + @extend %defaultTransition; + + &.hamburger-btn { + padding-left: 0; + } + + &:hover { + color: $red; + } + } + + &.searchBtns { + i { + display: block; + width: 36px; + height: 26px; + padding: 5px 5px; + } + } + + &.menu { + + } + } + } + } + + .menu-desk { + display: inline-block; + @media (max-width: 992px) { + display: none; + } + + .menu-mobile { + display: none; + @media (min-width: 768px) { + display: inline-block; + } + } + } + + .mobile-header { + + i { + font-size: 20px; + color: #fff; + padding: 5px; + + &:hover { + cursor: pointer; + opacity: 0.5; + } + } + } + } + + .searchBox { + background: #7a7a7a; + width: 100%; + position: absolute; + top: -20px; + left: 0; + z-index: -1; + @extend %defaultTransition; + + &.active-search { + top: 100%; + + .searchInput { + padding: 10px 0; + + input { + border-top-color: rgba(#fff, 0.5); + font-size: 20px; + font-family: 'dubaiR', sans-serif; + padding: 5px; + } + } + + + } + + .searchInput { + overflow: hidden; + position: relative; + padding: 0; + + input { + width: 100%; + @extend %appearance; + border: none; + background: #fff; + padding: 2px 8px; + color: #000; + @include borderRadius(5px); + @include boxSizing(border-box); + @extend %defaultTransition; + + &::placeholder { + opacity: 0.8; + font-size: 16px; + } + } + + button { + @extend %defaultTransition; + @extend %appearance; + background: #7a7a7a; + position: absolute; + top: 50%; + left: 3px; + padding: 3px 16px; + @include transform(translateY(-50%)); + @include borderRadius(5px); + cursor: pointer; + border: 1px solid #7a7a7a; + + i { + font-size: 18px; + color: #fff; + @extend %defaultTransition; + } + + &:hover { + background: transparent; + border-color: $red; + + i { + color: $red; + } + } + } + } + } + } +} + +.pageLoad { + width: 100%; + height: 100vh; + position: fixed; + top: 0; + left: 0; + z-index: 20; + background: #fff; + opacity: 0; + visibility: hidden; + + &.preLoader { + visibility: visible; + opacity: 1; + } + + .relativePos { + height: 100%; + + .txtBox { + display: inline-block; + position: absolute; + top: 50%; + left: 50%; + text-align: center; + @include transform(translate(-50%, -50%)); + + p { + color: #000; + } + + + @keyframes loading { + 0% { + width: 0; + left: 0; + } + 40% { + width: 90%; + left: 0; + } + + 60% { + width: 90%; + left: 10%; + } + + 100% { + width: 0; + left: 100%; + } + } + + .anim { + height: 10px; + background: rgba(#000, 1); + position: absolute; + bottom: -13px; + left: 0; + width: 100%; + z-index: -2; + @include borderRadius(50px); + @include animation(loading 0.8s ease-in-out infinite alternate); + + } + } + } +} + +.off-canvas { + $sideWidth: 100px; + background: $offCanvasColor; + width: 100%; + height: 100vh; + overflow: hidden; + position: fixed; + top: 0; + left: 0; + z-index: 19; + display: flex; + visibility: hidden; + + .side { + flex-basis: $sideWidth; + height: 100%; + border-left: 1px solid rgba(#000, 0.5); + + .closeBtn { + position: absolute; + top: 35px; + left: 0; + width: 100%; + text-align: center; + cursor: pointer; + + &:hover { + .x { + &:before, &:after { + width: 30px; + } + } + } + + .x { + position: relative; + width: 100%; + height: 30px; + + &:before, &:after { + content: ''; + display: block; + width: 25px; + height: 2px; + background: gray; + position: absolute; + @extend %defaultTransition; + } + + &:before { + top: 20px; + left: 50%; + @include transform(translateX(-50%) rotateZ(-45deg)); + } + + &:after { + top: 20px; + left: 50%; + @include transform(translateX(-50%) rotateZ(45deg)); + } + } + + span { + display: inline-block; + @include transform(translateX(4px) rotateZ(-270deg)); + font-size: 25px; + z-index: 2; + text-align: center; + margin-top: 30px; + } + } + } + + .main { + flex-basis: calc(100% - #{$sideWidth}); + padding-top: 100px; + overflow: hidden; + @media (max-width: 768px) { + padding-top: 80px; + } + + .closeBtnMobile { + text-align: right; + padding: 10px 0 10px 10px !important; + cursor: pointer; + position: fixed; + top: 0; + right: -10px; + + + &:hover { + .x { + &:before, &:after { + //width: 27px; + } + } + } + + .x { + width: 30px; + height: 30px; + position: relative; + + &:before, &:after { + content: ''; + display: block; + width: 25px; + height: 2px; + background: gray; + position: absolute; + @extend %defaultTransition; + } + + &:before { + top: 25px; + right: 10px; + @include transform(translateX(-50%) rotateZ(-45deg)); + } + + &:after { + top: 25px; + right: 10px; + @include transform(translateX(-50%) rotateZ(45deg)); + } + } + + span { + display: inline-block; + @include transform(translateX(4px) rotateZ(-270deg)); + font-size: 25px; + z-index: 2; + text-align: center; + margin-top: 30px; + } + } + + nav { + //@media (max-width: 768px) { + // padding: 20px 15px; + //} + + ul { + li { + margin-bottom: 30px; + + a { + @extend %defaultTransition; + + &:hover { + color: $red !important; + } + + &.subLink { + font-size: 16px; + color: rgba(#000, 0.7); + } + } + + + .children { + margin-top: 10px; + + ul { + li { + margin-bottom: 3px; + } + } + } + } + .mainLink { + font-size: 16px; + color: #000; + font-family: 'dubaiB'; + } + .mega-menu{ + .tree{ + a{ + margin-right: 70px; + color: rgba(0, 0, 0, 0.7); + font-size: 16px; + } + } + } + } + } + + .searchBox { + .title { + .title-search { + font-size: 20px; + + i { + display: inline-block; + margin-left: 5px; + @include transform(translateY(3px)); + } + } + + .login { + font-size: 16px; + margin-top: 20px; + @extend %defaultTransition; + cursor: pointer; + + i { + display: inline-block; + margin-left: 5px; + @include transform(translateY(3px)); + } + + &:hover { + color: $red; + @extend %defaultTransition; + } + } + } + + form { + margin-top: 20px; + display: block; + width: 100%; + max-width: 500px; + position: relative; + + input { + $inputBG: #E1E0E0; + width: 100%; + border: 1px solid $inputBG; + background: $inputBG; + padding: 5px 15px; + @include boxSizing(border-box); + @include borderRadius(25px); + font-family: 'dubaiR', sans-serif; + } + + button { + background: transparent; + border: none; + cursor: pointer; + position: absolute; + top: 50%; + left: 7px; + @include transform(translateY(-50%)); + + i { + display: inline-block; + font-size: 22px; + padding: 5px; + } + } + } + } + } +} + +.el-dialog { + @media (max-width: 768px) { + width: calc(100% - 100px); + } + @media (max-width: 575px) { + width: calc(100% - 30px); + } + + .el-dialog__header { + text-align: center; + } + + .flip-clock { + direction: ltr; + + .flip-clock__piece { + b { + font-family: 'sansNum', sans-serif; + + } + + .flip-card { + line-height: 1.1; + + .flip-card__top { + color: #fff; + background: $red; + } + + .flip-card__bottom { + color: #fff; + background: $red; + } + + .flip-card__back { + color: #fff; + //background: $red; + &::before { + color: #fff; + background: $red; + } + } + + .flip-card__back-bottom { + color: #fff; + background: $red; + } + } + + .flip-clock__slot { + //display: none; + } + } + } + + .title-counter { + display: flex; + align-items: center; + justify-content: space-around; + text-align: center; + width: 100%; + padding: 5px 0; + //max-width: 60%; + + } +} + +.not-found { + display: flex; + justify-content: center; + align-items: center; + background: #F4F4F4; + border-radius: 10px; + padding: 10px 0; + //margin-top: 60px; + + p { + color: gray; + } +} + +.el-pagination { + .el-pager { + .number { + font-family: 'sansNum', sans-serif; + } + } + + .btn-next, .btn-prev { + .el-icon { + transform: scaleX(-1); + } + } +} + +.el-tree{ + background: transparent; + .el-tree-node__content>.el-tree-node__expand-icon{ + padding: 6px 20px; + } + .test{ + margin-right: 20px; + } +} + + +.lid{ + font-family: "dubaiM", sans-serif; + font-size: 14px; +} + + + diff --git a/assets/scss/_mixins.scss b/assets/scss/_mixins.scss new file mode 100644 index 0000000..6740cd0 --- /dev/null +++ b/assets/scss/_mixins.scss @@ -0,0 +1,44 @@ +@mixin transform($p...) { + transform: $p; + -webkit-transform: $p; + -moz-transform: $p; + -ms-transform: $p; + -o-transform: $p; +} + +@mixin transition($p...) { + transition: $p; + -webkit-transition: $p; + -moz-transition: $p; + -ms-transition: $p; + -o-transition: $p; +} + +@mixin boxSizing($p) { + box-sizing: $p; + -webkit-box-sizing: $p; + -moz-box-sizing: $p; +} + +@mixin filter($p...) { + filter: $p; + -ms-filter: $p; +} + +@mixin boxShadow($p) { + box-shadow: $p; + -webkit-box-shadow: $p; + -moz-box-shadow: $p; +} + +@mixin borderRadius($p) { + border-radius: $p; + -webkit-border-radius: $p; + -moz-border-radius: $p; +} + +@mixin animation($p) { + animation: $p; + -webkit-animation: $p; + -o-animation: $p; +} diff --git a/assets/scss/_pages.scss b/assets/scss/_pages.scss new file mode 100644 index 0000000..33f09b8 --- /dev/null +++ b/assets/scss/_pages.scss @@ -0,0 +1,4062 @@ +///////////////////////////// error page +.error--page { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; + + h1 { + font-family: sans-serif; + font-weight: bold; + font-size: 60px; + } + + p { + text-transform: uppercase; + font-family: sans-serif; + margin-top: -20px; + font-size: 22px; + } + + a { + display: block; + margin-top: 20px; + } +} + +//-------------------------About +.about--page { + +} + +//-------------------------Home +.home--page { + $paddingSec: 20px; + + .s1 { + @media (max-width: 768px) { + margin-bottom: 0 !important; + } + + .slick-dotted.slick-slider { + margin-bottom: 0 !important; + } + + #slides { + overflow: hidden; + //margin-top: 60px; + .slick-dots { + bottom: 20px; + + li { + button { + &:before { + color: $red; + font-size: 12px; + } + } + } + } + + .slide { + $height: 450px; + + & > .row { + height: 100%; + padding: 0 !important; + margin: 0 !important; + } + + .img-holder { + padding: 0 !important; + margin: 0 !important; + height: $height; + overflow: hidden; + + @media (max-width: 992px) { + height: auto; + } + + img { + width: 100%; + height: 100%; + object-fit: cover; + @media (max-width: 992px) { + height: auto; + } + } + } + + .txt-holder { + margin: 0 !important; + background-color: $theme; + padding: 36px; + display: flex; + align-items: center; + height: $height; + @media (max-width: 992px) { + padding: 20px 10px 30px; + height: auto; + } + .txtBox { + + h2 { + color: white; + text-align: justify; + line-height: 1.3em; + + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + @media (max-width: 992px) { + font-size: 15px; + } + } + + .p2 { + margin-top: 16px; + color: #C8C8C8; + //font-size: 12px; + font-size: 16px; + + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 5; + -webkit-box-orient: vertical; + @media (max-width: 992px) { + font-size: 13px; + } + } + + .bbt { + width: 100%; + max-width: 150px; + margin-top: 24px; + text-align: center !important; + font-family: "dubaiL"; + margin-bottom: 24px; + color: #fff; + border-color: #fff; + background-color: transparent; + + @media (max-width: 992px) { + max-width: 120px; + span{ + font-size: 14px; + } + } + + &:hover { + border-color: #cccccc; + color: #cccccc; + } + } + } + } + } + } + } + + .event { + margin-bottom: 35px; + + @media (max-width: 768px) { + margin-bottom: 20px; + } + + #slides-event { + overflow: hidden; + margin-bottom: 0; + //margin-top: 60px; + .slick-dots { + bottom: 0; + position: relative !important; + + li { + button { + &:before { + color: red; + font-size: 12px; + } + } + } + } + + .slide { + + overflow: hidden; + + & > .row { + height: 100%; + } + + .img-holder { + margin: 0 !important; + padding: 0 !important; + + img { + width: 100%; + height: 100%; + object-fit: cover; + } + } + + .txt-holder { + margin: 0 !important; + background-color: $theme; + justify-items: center; + align-items: center; + align-content: center; + display: flex; + padding: 36px; + + p { + color: white; + } + + .p2 { + margin-top: 16px; + color: #C8C8C8; + font-size: 12px; + } + + .bbt { + width: 100%; + max-width: 150px; + margin-top: 24px; + text-align: center !important; + font-family: "dubaiL"; + margin-bottom: 24px; + } + } + } + } + + img { + width: 100%; + } + } + + .view-time-ago { + //display: flex; + //flex-direction: row; + align-items: center; + justify-content: space-between; + + p { + color: #999999; + margin-left: 10px; + font-size: 12px; + font-family: 'sansNum', sans-serif; + } + } + + .main-content { + //padding-left: $paddingSec; + + .s2 { + //padding-bottom: $paddingSec; + //margin-top: $paddingSec; + + .big-image-card { + //margin-top: 16px; + + img { + width: 100%; + } + + h2 { + font-size: 18px; + } + + p { + font-size: 14px; + color: gray; + margin: 10px 0 5px 0; + } + } + } + + .s3 { + //margin-top: $paddingSec; + //margin-top: $paddingSec; + + .newsFile { + cursor: pointer; + + img { + width: 100%; + } + + &:hover { + .txtBox { + a { + h2 { + color: $red; + } + } + } + } + + .txtBox { + position: relative; + //padding-right: 30px; + margin-top: 16px; + margin-bottom: 16px; + + &.first { + padding-right: 20px !important; + } + + span { + display: block; + padding: 0; + position: absolute; + top: -16px; + right: 0; + font-size: 32px !important; + color: $red; + font-family: 'sansNum', sans-serif; + @extend %defaultTransition; + } + + h2 { + font-size: 18px; + line-height: 1.3em !important; + color: $theme; + @extend %defaultTransition; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + } + + } + } + } + + .s4 { + //padding-top: $paddingSec; + //padding-bottom: $paddingSec; + //margin-top: $paddingSec; + + .big-image-card { + margin-top: 16px; + + img { + width: 100%; + } + + h2 { + font-size: 18px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + } + + p { + font-size: 14px; + color: gray; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + } + } + + .small-pics { + margin-top: 16px; + + img { + width: 100%; + padding-bottom: 8px; + } + + h2 { + padding-bottom: 5px; + font-size: 16px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + } + } + + } + + .s5 { + margin-top: 30px; + + .red-line-border { + height: 1px; + background-color: $red; + + } + + .red-title { + font-size: 18px; + font-family: dubaiM !important; + } + + .card-holder { + + border-width: 1px; + margin-top: 16px; + + img { + width: 100%; + } + + span { + display: inline-block; + + } + } + + .odd-margin { + margin-top: 36px; + } + + .txt-holder { + color: black; + padding-right: 40px; + width: 100%; + position: relative; + margin-bottom: 24px; + display: flex; + cursor: pointer; + @media (max-width: 768px) { + padding: 0; + } + + &:hover { + h2 { + color: $red; + } + } + + span { + padding: 0; + position: absolute; + top: -4px; + right: 4px; + font-size: 24px; + color: $red; + @extend %defaultTransition; + } + + h2 { + font-size: 18px; + line-height: 1.3em !important; + @extend %defaultTransition; + margin-right: 10px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + } + + i { + color: $red; + @extend %defaultTransition; + font-size: 14px; + @include transform(translateY(5px)); + } + + } + + .odd-line { + + .button-holder { + display: flex; + justify-content: center; + position: relative; + + .line { + height: 1px; + width: 100%; + background-color: #000000; + position: absolute; + left: 0; + top: 50%; + } + + .col-12 { + z-index: 1; + + .button-holder2 { + margin: 0 10px; + overflow: hidden; + z-index: 1; + display: inline-block; + text-align: center; + + .btn { + background: #fff; + + &.btn-active { + background: $gray; + color: $gray1; + } + + &:hover { + background: $gray; + } + } + + @media (max-width: 768px) { + width: 100%; + margin: 0; + + .btn { + width: 100%; + } + } + } + } + + } + } + + //.odd-line { + // position: relative; + // margin-bottom: 48px; + // margin-top: 36px; + // .line { + // height: 1px; + // background-color: #222F3A; + // } + // .button-holder { + // //min-width: 500px; + // width: 100%; + // //display: flex; + // justify-content: space-between; + // position: absolute; + // top: 0; + // left: 50%; + // @include transform(translate(-50%, -50%)); + // + // .btn { + // //width: 100%; + // text-align: center; + // } + // } + //} + + .archive_holder { + margin-top: 8px; + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + justify-items: center; + align-content: center; + } + } + + .s6 { + margin-bottom: 16px; + margin-top: 16px; + padding-bottom: 16px; + + .link-span { + color: #000; + @extend %defaultTransition; + + &:hover { + cursor: pointer; + color: $red; + } + } + + .big-image-card { + margin-top: 16px; + + img { + width: 100%; + } + + h2 { + font-size: 18px; + } + + p { + font-size: 14px; + color: gray; + } + } + + .small-pics { + margin-top: 16px; + + img { + width: 100%; + padding-bottom: 8px; + } + + h2 { + //max-width: 1000px; + //height: 100px; + //overflow: hidden; + //text-overflow: ellipsis; + //white-space: nowrap; + padding-bottom: 5px; + font-size: 16px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + } + } + + .card-holder { + background-color: rgba(0, 0, 0, 0.05); + border: 1px solid rgba(0, 0, 0, 1); + + img { + width: 100%; + } + + h2 { + font-size: 18px; + } + } + + .sectionStyle { + padding-bottom: 0; + } + } + + .archive { + text-align: center; + } + } + + .side-bar { + padding-top: $paddingSec; + + .boss { + margin-top: 52px; + + h2 { + display: flex; + align-items: center; + margin-bottom: 10px; + + .txtLink { + font-family: 'dubaiB'; + font-size: 15px; + color: #000; + } + + .btn { + margin-right: auto; + } + } + + .title { + display: inline-block; + //margin-bottom: 10px; + font-size: 16px; + color: #000; + cursor: pointer; + @extend %defaultTransition; + + &:hover { + color: $red; + } + } + + .mailLink { + display: inline-block; + margin-top: 0; + font-size: 14px; + color: gray; + cursor: pointer; + @extend %defaultTransition; + + &:hover { + color: $red; + } + } + + .links { + a { + display: block; + + &.btn { + display: inline-block; + margin-top: 5px; + } + } + } + } + + .multimedia { + .media_video { + margin-top: 40px; + } + .media_graphic { + margin-top: 40px; + } + + .slide { + .txtBox { + position: relative; + padding-top: 25px; + + + .tag { + display: inline-block; + background: transparent; + border: 1px solid rgba($red, 0.6); + color: rgba($red, 0.8); + padding: 0 5px; + @include borderRadius(4px); + font-size: 11px; + position: absolute; + top: 5px; + right: 0; + } + + a:not(.btn) { + font-size: 13px; + margin-top: 5px; + color: gray; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + @extend %defaultTransition; + + &:hover { + color: $red; + } + } + + .btns { + margin-top: 15px; + //text-align: center; + } + } + + img { + width: 100%; + } + } + } + + .spec-news { + #slides-spec { + margin-bottom: 15px; + } + + .slide { + img { + width: 100%; + } + + a { + font-size: 13px; + color: gray; + margin-top: 10px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + @extend %defaultTransition; + + + &:hover { + color: $red; + @extend %defaultTransition; + } + } + } + } + + .latest_news { + ul { + li { + a { + font-family: "dubaiL" !important; + font-size: 13px; + line-height: 1.3em; + margin-bottom: 15px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + @extend %defaultTransition; + color: #000; + + i { + font-size: 8px; + color: $red; + } + + &:hover { + color: $red; + } + } + } + } + } + + .links { + ul { + li { + a { + display: flex; + align-items: center; + + i { + display: block; + color: $red; + margin-left: 5px; + font-size: 12px; + } + + span { + color: #000; + @extend %defaultTransition; + font-family: 'dubaiL', sans-serif; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + font-size: 13px; + + &:hover { + cursor: pointer; + color: $red; + } + } + } + } + } + } + + .slick-dots { + li { + width: 0 !important; + } + } + + img { + width: 100%; + } + } +} + +//-------------------------News +.news_details { + .s1 { + .date-jalali { + font-family: "sansNum", sans-serif !important; + font-size: 12px; + color: gray; + } + + .sharableLinks { + display: flex; + margin-bottom: 10px; + + p { + margin-left: 15px; + } + + ul { + li { + display: inline-block; + margin-left: 10px; + + i { + cursor: pointer; + color: $red; + } + } + } + } + + .leadTitle { + padding: 15px 4px; + background: $sectionBg; + } + + main { + .menu-right-details { + //padding-left: 32px; + + .s1-view-time { + margin: 20px 0 10px 0; + display: flex; + align-items: center; + @media (max-width: 768px) { + display: block; + } + + div { + display: flex; + align-items: center; + @media (max-width: 768px) { + margin: 5px 0; + } + } + + .share-btn { + span { + font-size: 17.5px; + } + } + + .s1-cat { + border: 1px solid $red; + padding: 5px 15px; + color: $theme; + margin: 0 5px; + //width: 100px; + text-align: center; + background-color: transparent; + cursor: pointer; + border-radius: 4px; + @extend %defaultTransition; + + &:hover { + background-color: $red; + @extend %defaultTransition; + color: $themeReverse; + } + } + + .userName { + margin: 0 5px; + color: #666; + } + + .time { + margin: 0 5px; + color: #666; + font-family: 'sansNum', sans-serif; + font-size: 14px; + } + } + + .sk-editor-field { + margin-top: 16px; + } + + h1 { + margin-top: 0; + } + } + + .menu-right-comment { + padding-top: 30px; + + form { + flex-direction: column; + padding-bottom: 10px; + padding-top: 20px; + + .formRow { + margin-bottom: 10px; + + p { + margin-bottom: 10px; + margin-top: 0; + color: $red; + } + } + + .err-captcha { + margin-bottom: 10px; + margin-top: 0; + color: $red; + } + + .view-captcha { + margin-top: 20px; + + .input { + //padding: 10px !important; + //margin-bottom: 10px; + height: 40px !important; + } + + .new-captcha { + display: flex; + justify-content: center; + align-items: flex-start; + margin-bottom: 10px; + + .captcha { + //margin-top: -12px; + svg { + height: 40px; + } + } + + button { + padding: 10px; + height: 40px; + @include borderRadius(0); + } + } + } + + .input { + color: $theme; + border: 1px solid rgba(#000, 0.5); + padding: 15px; + width: 100%; + box-sizing: border-box; + } + + textarea { + resize: vertical; + } + + .btnSub { + //padding: 10px 0; + //margin-bottom: 10px; + + .btn-link { + background-color: $red; + padding: 10px 30px; + color: $themeReverse; + width: 100%; + @extend %defaultTransition; + cursor: pointer; + border: 1px solid white; + + &:hover { + @extend %defaultTransition; + background-color: $themeReverse; + color: $red; + border: 1px solid $red; + } + } + } + + .err { + p { + margin-top: 3px; + color: $red; + } + + input, textarea { + border: 1px solid $red; + } + } + } + + .view-comment { + padding: 20px 0; + + .view-comment-item { + border: 1px solid rgba(#000, 0.2); + padding: 20px; + margin-bottom: 10px; + + h4 { + color: #333333; + font-family: 'dubaiB', sans-serif; + } + + span { + color: #999999; + font-family: 'sansNum', sans-serif; + font-size: 12px; + text-align: left; + } + + h3 { + color: #666666; + margin-top: 5px; + } + + } + } + } + + .view-page-terms { + margin-bottom: 10px; + + .view-item-terms { + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + margin-bottom: 10px; + + .view-title-terms { + display: flex; + align-items: center; + flex-basis: calc(100% - 200px); + + i { + display: inline-block; + color: $red; + margin-left: 10px; + font-size: 22px; + } + + p { + width: 100%; + margin-bottom: 5px; + } + + h3 { + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + } + } + + .download-btn { + border: 1px solid $red; + padding: 5px 15px; + color: $red; + margin: 0 5px; + //width: 100px; + text-align: center; + background-color: transparent; + cursor: pointer; + border-radius: 4px; + @extend %defaultTransition; + + &:hover { + background-color: $red; + @extend %defaultTransition; + color: $themeReverse; + } + } + } + } + } + + aside { + .news-box { + margin-bottom: 10px; + font-size: 12px !important; + padding-bottom: 5px; + cursor: pointer; + + &:hover { + .title, p, .date-jalali { + color: $red; + } + } + + .view-date-menu-left { + display: flex; + justify-content: space-between; + align-items: center; + + .date-jalali { + @extend %defaultTransition; + } + } + + .title { + //font-size: 16px; + color: black; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + @extend %defaultTransition; + } + + p { + color: gray; + padding: 5px 0; + @extend %defaultTransition; + font-size: 13px; + } + } + + .news-with-img { + margin-bottom: 5px; + padding-bottom: 8px; + + .title { + margin-top: 4px; + color: #000; + padding: 5px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + @extend %defaultTransition; + font-size: 13px; + } + + border: 1px solid rgba(0, 0, 0, 0.5); + + img { + width: 100%; + + } + + span { + color: gray; + padding: 5px; + } + + @extend %defaultTransition; + + &:hover { + p { + color: $red; + @extend %defaultTransition; + } + } + } + + .red-num-txt-box { + margin-bottom: 16px; + display: flex; + color: #000; + border-bottom: 1px solid rgba(#000, 0.3); + + span { + font-family: "sansNum", sans-serif !important; + color: $red; + } + + p { + margin-right: 5px; + @extend %defaultTransition; + margin-bottom: 10px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + font-size: 13px; + + &:hover { + color: $red; + cursor: pointer; + } + } + + .gray-line { + background-color: rgba(0, 0, 0, 0.2); + height: 1px; + margin-top: 4px; + } + } + } + } + + .s2 { + .img-overlay-text { + position: relative; + cursor: pointer; + + &:hover { + .gray-back { + a { + color: $red; + } + } + } + + img { + width: 100%; + } + + .gray-back { + width: 84%; + left: 8%; + position: absolute; + bottom: -10px; + background-color: #ECEBEB; + font-family: "dubaiL" !important; + padding: 8px; + + a { + text-align: center; + display: block; + color: black; + text-decoration: none; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + @extend %defaultTransition; + } + + } + } + } +} + +//-------------------------Category +.category { + $paddingSec: 20px; + + .s1 { + .top-btns { + text-align: center; + + .view-link { + text-align: center; + display: inline-block; + margin-left: 15px; + } + } + } + + .main-content { + .s2 { + padding-top: $paddingSec; + padding-bottom: $paddingSec; + + .heronews { + padding-toptop: $paddingSec; + padding-bottom: $paddingSec; + + .title-holder { + margin-top: 24px; + + .view-img { + display: flex; + align-items: stretch; + + .image { + width: 100%; + align-items: stretch; + display: flex; + } + + } + + .title { + font-family: 'dubaiB', sans-serif; + margin-bottom: 10px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + } + + .paragraph { + font-family: 'dubaiM', sans-serif; + margin-bottom: 20px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 4; + -webkit-box-orient: vertical; + } + + .s1-date { + color: gray; + font-size: 14px; + font-family: 'sansNum', sans-serif; + margin-left: 5px; + } + } + } + + .list-news { + padding-toptop: $paddingSec; + padding-bottom: $paddingSec; + + .line { + width: 100%; + height: 1px; + background: rgba(#000, 0.2); + } + + .news-card { + + img { + width: 100%; + } + + h2 { + font-size: 20px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + } + + + .whole-wrapper { + margin-top: 16px; + display: flex; + justify-content: space-between; + align-items: center; + } + + .whole-wrapper-date { + font-family: 'sansNum', sans-serif; + font-size: 12px; + color: gray; + } + + .whole-wrapper-title { + @extend %defaultTransition; + color: gray; + + i { + @include transform(translateY(2px)); + margin-right: 10px; + } + + &:hover { + @extend %defaultTransition; + color: $red; + } + } + } + } + + .sectionStyle { + padding-bottom: 0; + } + + } + + .s3 { + padding-top: $paddingSec; + padding-bottom: $paddingSec; + + .link { + padding-top: $paddingSec; + + ul { + width: 100%; + display: inline-block; + + //flex-direction: row; + //justify-content: flex-start; + //align-items: flex-start; + + li { + margin: 0 5px 10px; + } + } + } + } + + .s4 { + padding-top: $paddingSec; + padding-bottom: $paddingSec; + + .gallery-btn { + text-align: center; + @include transform(translateY(65px)); + z-index: 5; + + .view-link { + text-align: center; + display: inline-block; + margin-left: 15px; + + } + } + + .view-gallery { + .view-item { + display: block; + position: relative; + overflow: hidden; + height: 100%; + @extend %defaultTransition; + + img { + width: 100%; + height: 100%; + object-fit: cover; + } + + .title { + width: 100%; + //height: 100%; + position: absolute; + right: 0; + bottom: 0; + z-index: 1; + //justify-content: center; + //display: flex; + //align-items: center; + background-color: rgba(#000, 0.6); + overflow: hidden; + @include boxSizing(border-box); + @extend %defaultTransition; + + h5 { + text-align: center; + color: white; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + padding: 0 10px; + } + + h3 { + text-align: center; + color: white; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + padding: 0 10px; + } + + //&:hover { + // opacity: 1; + //} + + @media (max-width: 575px) { + background-color: rgba(#000, 0.6); + opacity: 1; + + h5 { + font-size: 16px; + } + h3 { + font-size: 16px; + } + } + } + + &:hover { + @include transform(scale(1.01)); + } + } + } + + .sectionStyle { + padding-bottom: 0; + } + + //.items { + // padding-bottom: 20px; + //} + + .favorites { + .slick-dots { + li { + @media (max-width: 768px) { + width: 10px; + } + @media (max-width: 575px) { + width: 5px; + } + } + } + + .sectionStyle { + padding-bottom: 15px; + } + } + + } + + .s5 { + padding-top: $paddingSec; + padding-bottom: $paddingSec; + } + + .s6 { + padding-top: $paddingSec; + padding-bottom: $paddingSec; + + .view-page-terms { + margin-bottom: 10px; + + .view-item-terms { + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + margin-bottom: 10px; + + .view-title-terms { + display: flex; + align-items: center; + flex-basis: calc(100% - 200px); + + i { + display: inline-block; + color: $red; + margin-left: 10px; + font-size: 22px; + } + + p { + width: 100%; + margin-bottom: 5px; + } + + h3 { + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + } + } + + .download-btn { + border: 1px solid $red; + padding: 5px 15px; + color: $red; + margin: 0 5px; + //width: 100px; + text-align: center; + background-color: transparent; + cursor: pointer; + border-radius: 4px; + @extend %defaultTransition; + + &:hover { + background-color: $red; + @extend %defaultTransition; + color: $themeReverse; + } + } + } + } + } + + .s7 { + padding-top: $paddingSec; + padding-bottom: $paddingSec; + + .view-page-survey { + //width: calc(100% - 50px); + width: 100%; + height: auto; + background-color: #fff; + padding: 10px 20px; + margin-bottom: 20px; + @include borderRadius(10px); + @include boxShadow(0 3px 15px #999); + + .survey-item1 { + border-bottom: 2px solid rgba(#000, 0.2); + padding: 20px 0; + + .about-title { + padding: 20px 0; + color: #444444; + } + + .about-txt { + color: #666666; + } + } + + .survey-item2 { + padding: 20px 0; + + .el-radio-group { + direction: ltr; + + .el-radio__input.is-checked .el-radio__inner { + background: $red; + border-color: $red; + } + + .el-radio__input.is-checked + .el-radio__label { + color: $red; + } + + .el-radio__label { + @extend %defaultTransition; + + &:hover { + color: $red; + } + } + + .el-radio__inner { + @extend %defaultTransition; + border: 1px solid #666666; + } + + .el-radio__inner:hover { + border-color: $red; + } + } + + .comment-btn { + display: flex; + justify-content: flex-end; + + button { + &:disabled { + border-color: #666666; + background-color: #666666; + color: white; + border-radius: 5px; + } + } + } + + .el-checkbox-group { + direction: ltr; + text-align: right; + + .el-checkbox { + margin-right: 0; + margin-left: 30px; + } + + .el-checkbox__inner { + + border: 1px solid #666666; + @extend %defaultTransition; + + &:hover { + border-color: $red; + } + } + } + + + .el-checkbox__input.is-checked .el-checkbox__inner, .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: $red; + border-color: $red; + } + + .el-checkbox__label { + @extend %defaultTransition; + + &:hover { + color: $red; + } + } + + .el-checkbox__input.is-checked + .el-checkbox__label { + color: $red; + } + + .el-progress { + font-family: 'sansNum', sans-serif; + + .el-progress-bar__inner { + right: 0; + } + + .el-progress__text { + margin-right: 10px; + } + } + + + } + + } + } + + .s8 { + padding-top: $paddingSec; + padding-bottom: $paddingSec; + + ul { + //margin-top: 50px; + + li { + margin-bottom: 25px; + + display: flex; + + i { + color: $red; + margin-left: 10px; + font-size: 18px; + @include transform(translateY(5px)) + } + + a { + color: #000; + //overflow: hidden; + //display: -webkit-box; + //-webkit-line-clamp: 1; + //-webkit-box-orient: vertical; + @extend %defaultTransition; + + &:hover { + color: $red; + } + } + } + } + } + + .s9 { + padding-top: $paddingSec; + padding-bottom: $paddingSec; + + ul { + //margin-top: 50px; + + li { + margin-bottom: 25px; + + display: flex; + + i { + color: $red; + margin-left: 10px; + font-size: 18px; + @include transform(translateY(5px)) + } + + a { + color: #000; + //overflow: hidden; + //display: -webkit-box; + //-webkit-line-clamp: 1; + //-webkit-box-orient: vertical; + @extend %defaultTransition; + + &:hover { + color: $red; + } + } + } + } + } + + .s10 { + padding-top: $paddingSec; + padding-bottom: $paddingSec; + + .view-page-newsFile { + .view-item-newsFile { + .view-title-newsFile { + display: flex; + cursor: pointer; + align-items: flex-start; + color: black; + margin-bottom: 10px; + + span { + color: $red; + font-family: 'sansNum', sans-serif; + margin-left: 10px; + font-size: 22px; + } + + h3 { + @extend %defaultTransition; + } + + &:hover { + h3 { + color: $red; + } + } + + } + } + } + } + + .paginate { + overflow: hidden; + + .el-pagination { + display: flex; + justify-content: center; + direction: ltr !important; + margin-top: 20px; + + button:hover { + color: $red !important; + } + + .el-pager { + //direction: ltr !important; + + li:hover { + color: $red !important; + } + + .active { + color: $red !important; + cursor: pointer !important; + } + + } + + + } + } + } + + .side-bar { + .sideBarItem { + &:first-child { + margin-top: 32px !important; + + &.galleryPage { + margin-top: 76px !important; + } + + .sidebar-line-txt { + margin-bottom: 23px; + } + } + } + + .managerInfo { + img { + width: 100%; + } + + .txtBox { + h2 { + font-size: 16px; + } + + p { + font-size: 13px; + } + } + + .sectionStyle { + margin-bottom: 10px; + + .view-title { + color: $gray1; + @extend %defaultTransition; + + &:hover { + color: $red + } + + .title { + h4 { + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + } + } + } + + } + + } + + .sidebarLinks { + ul { + li { + margin-bottom: 10px; + + a { + display: flex; + align-items: flex-start; + + i { + display: block; + color: $red; + margin-left: 5px; + font-size: 12px; + @include transform(translateY(5px)); + } + + span { + color: #000; + @extend %defaultTransition; + font-family: 'dubaiL', sans-serif; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + font-size: 13px; + + &:hover { + cursor: pointer; + color: $red; + } + } + } + } + } + } + + .specNews { + .slick-dots { + li { + width: 0 !important; + } + } + + #slides-spec { + margin-bottom: 5px; + } + + .slide { + img { + width: 100%; + } + + a { + font-size: 13px; + color: gray; + margin-top: 10px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + @extend %defaultTransition; + + + &:hover { + color: $red; + @extend %defaultTransition; + } + } + } + } + + .latestNews { + ul { + li { + a { + i { + font-size: 8px; + color: $red; + } + } + } + } + } + } +} + +//-------------------------News File +.news-file-details { + + .s1 { + .img-hold { + width: 100%; + } + + .news_holder { + font-size: 20px; + + .date { + margin-top: 10px; + margin-bottom: 5px; + align-items: center; + justify-content: space-between; + + p { + color: #999999; + margin-left: 10px; + font-size: 12px; + font-family: 'sansNum', sans-serif; + } + } + + .s1-title { + width: 100%; + margin-top: 0; + margin-bottom: 20px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + + @media (max-width: 768px) { + font-size: 16px; + } + } + + .s1-description { + width: 100%; + max-width: 400px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 4; + -webkit-box-orient: vertical; + font-family: 'dubaiM', sans-serif; + + @media (max-width: 768px) { + display: none; + } + } + } + } + + .s2 { + + .bigNews { + h2 { + font-size: 20px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + + @media (max-width: 768px) { + font-size: 16px; + } + } + + .desc { + margin-top: 15px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 4; + -webkit-box-orient: vertical; + font-size: 16px; + + @media (max-width: 768px) { + display: none; + } + } + + .date { + align-items: center; + justify-content: space-between; + margin-top: 10px; + margin-bottom: 5px; + + p { + color: #999999; + margin-left: 10px; + font-size: 12px; + font-family: 'sansNum', sans-serif; + } + } + } + + .date-n { + display: inline-block; + color: gray; + } + + .view-date { + display: flex; + align-items: center; + justify-content: space-between; + + .but { + display: inline-block; + margin-right: 12px; + color: gray; + cursor: pointer; + @extend %defaultTransition; + + &:hover { + color: $red; + @extend %defaultTransition; + } + + i { + @include transform(translateY(2px)); + margin-right: 5px; + } + + } + } + + .s2-title1 { + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 4; + -webkit-box-orient: vertical; + + @media (max-width: 768px) { + font-size: 16px; + } + } + + //.s2-title2 { + // overflow: hidden; + // display: -webkit-box; + // -webkit-line-clamp: 2; + // -webkit-box-orient: vertical; + //} + + //.small-pics { + // img { + // width: 100%; + // } + // + // h2 { + // font-size: 16px; + // overflow: hidden; + // display: -webkit-box; + // -webkit-line-clamp: 2; + // -webkit-box-orient: vertical; + // } + // + // .view-time-ago { + // //display: flex; + // //flex-direction: row; + // align-items: center; + // justify-content: space-between; + // + // p { + // color: #999999; + // margin-left: 10px; + // font-size: 12px; + // font-family: 'sansNum', sans-serif; + // } + // } + //} + + img { + width: 100%; + } + } + + .paginate { + overflow: hidden; + + .el-pagination { + display: flex; + justify-content: center; + direction: ltr !important; + margin-top: 20px; + + button:hover { + color: $red !important; + } + + .el-pager { + //direction: ltr !important; + + li:hover { + color: $red !important; + } + + .active { + color: $red !important; + cursor: pointer !important; + } + + } + + + } + } +} + +//-------------------------Gallery +.gallery-page { + padding: 30px 0; + + .gallery-title { + border-bottom: 2px solid $red; + display: inline-block; + margin-bottom: 30px; + } + + .gallery-side { + border-bottom: 2px solid $red; + display: inline-block; + margin-bottom: 30px; + } + + .gallery-item { + margin-bottom: 10px; + //@include boxShadow(0 4px 10px rgba(#000000, .3)); + @extend %defaultTransition; + + &:hover { + @include boxShadow(0 3px 10px rgba(#000, 0.17)) + } + + .gallery-img-box { + display: block; + overflow: hidden; + + &:hover { + .gallery-img { + @include transform(scale(1.05)); + } + } + + .gallery-img { + width: 100%; + @extend %defaultTransition; + } + } + + .gallery-detail-item { + padding: 10px; + + .gallery-detail-title { + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + font-size: 12px; + } + + .gallery-detail-date { + color: gray; + font-family: 'sansNum', sans-serif !important; + font-size: 10px; + margin-top: 10px; + } + } + + } + + .gallery-item1 { + //margin-bottom: 10px; + //@include boxShadow(0 4px 10px rgba(#000000, .3)); + @extend %defaultTransition; + + &:hover { + @include boxShadow(0 3px 10px rgba(#000, 0.17)) + } + + .gallery-img-box1 { + display: block; + overflow: hidden; + position: relative; + + &:hover { + .gallery-img1 { + @include transform(scale(1.05)); + } + } + + .gallery-img1 { + width: 100%; + @extend %defaultTransition; + } + + .gallery-detail-item1 { + padding: 10px; + position: absolute; + bottom: 0; + left: 0; + right: 0; + background: $sectionBg; + + .gallery-detail-title1 { + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + color: $theme; + } + + .gallery-detail-date1 { + color: gray; + font-family: 'sansNum', sans-serif !important; + font-size: 14px; + margin-top: 10px; + } + } + + } + } + + .paginate { + overflow: hidden; + + .el-pagination { + display: flex; + justify-content: center; + direction: ltr !important; + margin-top: 20px; + + button:hover { + color: $red !important; + } + + .el-pager { + //direction: ltr !important; + + li:hover { + color: $red !important; + } + + .active { + color: $red !important; + cursor: pointer !important; + } + + } + + + } + } +} + +.gallery-details { + + .view-date { + display: flex; + + .date { + margin: 0 2px 0; + color: gray; + font-family: 'sansNum', sans-serif !important; + font-size: 14px; + } + } + + .user-info { + margin-bottom: 20px; + //display: flex; + //flex-direction: row; + //justify-content: space-between; + //align-items: center; + + span { + color: gray; + } + + .date { + font-family: 'sansNum', sans-serif; + } + + .item2 { + text-align: left; + + button { + padding: 5px 20px; + @media (max-width: 768px) { + width: 100%; + margin-top: 5px; + } + } + } + + + } + + .summry-title { + font-size: 16px; + font-family: dubaiL !important; + } + + .title { + font-family: dubaiL !important; + font-size: 24px; + } + + .img-gallery { + + } + + .s2 { + background-color: black; + padding-bottom: 80px; + overflow: hidden; + + h3 { + color: $themeReverse; + text-align: center; + padding: 40px 0; + } + + #slides { + .slick-track{ + align-items: stretch; + display: flex; + } + .slide { + background-color: #111111; + padding: 50px 0; + height: 200px; + + .view-txt { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + + &:last-child { + border-right: 1px solid #333; + @media (max-width: 768px) { + border: none; + } + @media (max-width: 768px) { + padding: 0 10px; + } + } + + .h3 { + color: $themeReverse; + text-align: right; + margin-bottom: 10px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + } + + p { + color: $themeReverse; + width: 100%; + max-width: 500px; + margin-bottom: 10px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + } + + .date { + color: gray; + + &:first-child { + font-family: 'sansNum', sans-serif; + } + + } + } + + } + } + } + + .el-popover { + z-index: 2; + } +} + +//-------------------------Graphics +.graphic-page { + padding: 30px 0; + + .graphic-title { + border-bottom: 2px solid $red; + display: inline-block; + margin-bottom: 30px; + } + + .graphic-side { + border-bottom: 2px solid $red; + display: inline-block; + margin-bottom: 30px; + } + + .graphic-item { + margin-bottom: 10px; + //@include boxShadow(0 4px 10px rgba(#000000, .3)); + @extend %defaultTransition; + + &:hover { + @include boxShadow(0 3px 10px rgba(#000, 0.17)) + } + + .graphic-img-box { + display: block; + overflow: hidden; + + &:hover { + .graphic-img { + @include transform(scale(1.05)); + } + } + + .graphic-img { + width: 100%; + @extend %defaultTransition; + } + } + + + .graphic-detail-item { + padding: 10px; + + .graphic-detail-title { + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + font-size: 12px; + + } + + .graphic-detail-date { + color: gray; + font-family: 'sansNum', sans-serif !important; + font-size: 10px; + margin-top: 10px; + } + } + + } + + .graphic-item1 { + //margin-bottom: 10px; + //@include boxShadow(0 4px 10px rgba(#000000, .3)); + @extend %defaultTransition; + + &:hover { + @include boxShadow(0 3px 10px rgba(#000, 0.17)) + } + + .graphic-img-box1 { + display: block; + overflow: hidden; + position: relative; + + &:hover { + .gallery-img1 { + @include transform(scale(1.05)); + } + } + + .graphic-img1 { + width: 100%; + @extend %defaultTransition; + } + + .graphic-detail-item1 { + padding: 10px; + position: absolute; + bottom: 0; + left: 0; + right: 0; + background: $sectionBg; + + .graphic-detail-title1 { + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + color: $theme; + } + + .graphic-detail-date1 { + color: gray; + font-family: 'sansNum', sans-serif !important; + font-size: 10px; + margin-top: 10px; + } + } + + } + } + + + .paginate { + overflow: hidden; + + .el-pagination { + display: flex; + justify-content: center; + direction: ltr !important; + margin-top: 20px; + + button:hover { + color: $red !important; + } + + .el-pager { + //direction: ltr !important; + + li:hover { + color: $red !important; + } + + .active { + color: $red !important; + cursor: pointer !important; + } + + } + + + } + } +} + +.graphic-details { + .view-date { + display: flex; + + .date { + margin: 36px 2px 0; + color: gray; + font-family: 'sansNum', sans-serif !important; + font-size: 14px; + } + } + + .summry-title { + font-size: 16px; + font-family: dubaiL !important; + } + + .title { + font-family: dubaiL !important; + font-size: 24px; + } + + .s2 { + background-color: black; + padding-bottom: 80px; + overflow: hidden; + + h3 { + color: $themeReverse; + text-align: center; + padding: 40px 0; + } + + #slides { + .slide { + background-color: #111111; + padding: 50px 0; + + .view-txt { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + + &:last-child { + border-right: 1px solid #333; + @media (max-width: 768px) { + border: none; + } + @media (max-width: 768px) { + padding: 0 10px; + } + } + + .h3 { + color: $themeReverse; + text-align: right; + margin-bottom: 10px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + } + + p { + color: $themeReverse; + width: 100%; + max-width: 500px; + margin-bottom: 10px; + } + + .date { + color: gray; + + &:first-child { + font-family: 'sansNum', sans-serif; + } + + } + } + + } + } + } +} + +//-------------------------Video +.video-page { + padding: 30px 0; + + .video-title { + border-bottom: 2px solid $red; + display: inline-block; + margin-bottom: 30px; + } + + .video-side { + border-bottom: 2px solid $red; + display: inline-block; + margin-bottom: 30px; + } + + .video-item { + margin-bottom: 10px; + //@include boxShadow(0 4px 10px rgba(#000000, .3)); + @extend %defaultTransition; + + &:hover { + @include boxShadow(0 3px 10px rgba(#000, 0.17)) + } + + .video-img-box { + display: block; + overflow: hidden; + + &:hover { + .video-img { + @include transform(scale(1.05)); + } + } + + .video-img { + width: 100%; + @extend %defaultTransition; + } + } + + + .video-detail-item { + padding: 10px; + + .video-detail-title { + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + font-size: 12px; + + } + + .video-detail-date { + color: gray; + font-family: 'sansNum', sans-serif !important; + font-size: 10px; + margin-top: 10px; + } + } + + } + + .video-item1 { + //margin-bottom: 10px; + //@include boxShadow(0 4px 10px rgba(#000000, .3)); + @extend %defaultTransition; + + &:hover { + @include boxShadow(0 3px 10px rgba(#000, 0.17)) + } + + .video-img-box1 { + display: block; + overflow: hidden; + position: relative; + + &:hover { + .gallery-img1 { + @include transform(scale(1.05)); + } + } + + .video-img1 { + width: 100%; + @extend %defaultTransition; + } + + .video-detail-item1 { + padding: 10px; + position: absolute; + bottom: 0; + left: 0; + right: 0; + background: $sectionBg; + + .video-detail-title1 { + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + color: $theme; + } + + .video-detail-date1 { + color: gray; + font-family: 'sansNum', sans-serif !important; + font-size: 14px; + margin-top: 10px; + } + } + + } + } + + .paginate { + overflow: hidden; + + .el-pagination { + display: flex; + justify-content: center; + direction: ltr !important; + margin-top: 20px; + + button:hover { + color: $red !important; + } + + .el-pager { + //direction: ltr !important; + + li:hover { + color: $red !important; + } + + .active { + color: $red !important; + cursor: pointer !important; + } + + } + + + } + } +} + +.video-details { + .view-date { + display: flex; + + .date { + margin: 36px 2px 0; + color: gray; + font-family: 'sansNum', sans-serif !important; + font-size: 14px; + } + } + + .summry-title { + font-size: 16px; + font-family: dubaiL !important; + } + + .title { + font-family: dubaiL !important; + font-size: 24px; + } + + .s2 { + background-color: black; + padding-bottom: 80px; + overflow: hidden; + + h3 { + color: $themeReverse; + text-align: center; + padding: 40px 0; + } + + #slides { + .slide { + background-color: #111111; + padding: 50px 0; + + .view-txt { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + + &:last-child { + border-right: 1px solid #333; + @media (max-width: 768px) { + border: none; + } + @media (max-width: 768px) { + padding: 0 10px; + } + } + + .h3 { + color: $themeReverse; + text-align: right; + margin-bottom: 10px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + } + + p { + color: $themeReverse; + width: 100%; + max-width: 500px; + margin-bottom: 10px; + } + + .date { + color: gray; + + &:first-child { + font-family: 'sansNum', sans-serif; + } + + } + } + + } + } + } +} + +//-------------------------Info +.info--page { + + .title { + margin-bottom: 20px; + border-bottom: 2px solid $red; + display: inline-block; + } + + img { + display: block; + margin-bottom: 20px; + width: 100%; + } +} + +//--------------------------- contact +.contact-page { + overflow: hidden; + + .col-left { + .cover { + background-color: #f4f4f4; + border: .5px solid #999999; + margin-bottom: 20px; + + a { + &:hover { + p { + color: $red; + } + } + + img { + width: 100%; + border-bottom: 1px solid #666666; + } + + p { + margin: 10px; + font-size: 14px; + color: black; + @extend %defaultTransition; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + } + } + } + } + + .col-right { + .s1-right { + .s1-col1-right { + .s1-col1-title { + border-bottom: 1px solid $red; + display: inline-block; + } + + .s1-col1-desc { + color: #666666; + font-size: 14px; + margin-top: 15px; + margin-bottom: 30px; + width: 100%; + max-width: 400px + } + + form { + flex-direction: column; + padding-bottom: 10px; + + .formRow { + margin-bottom: 10px; + + p { + margin-bottom: 10px; + margin-top: 0; + color: $red; + } + } + + .view-captcha { + display: flex; + align-items: center; + justify-content: space-between; + + .formRow { + margin-bottom: 0; + flex-basis: calc(100% - 220px); + + @media (max-width: 575px) { + width: 100%; + flex-basis: 100%; + } + } + + .new-captcha { + width: 220px; + display: flex; + align-items: center; + + @media (max-width: 575px) { + width: 100%; + justify-content: center; + margin-top: 10px; + } + + .captcha { + display: inline-block; + + svg { + height: 50px; + } + } + + button { + padding: 0 15px; + @include borderRadius(0); + height: 50px; + } + } + + .err-captcha { + margin-bottom: 10px; + margin-top: 0; + color: $red; + } + } + + .input { + background-color: #f2f2f2; + color: $theme; + border: 0; + padding: 15px; + width: 100%; + box-sizing: border-box; + } + + textarea { + resize: vertical; + } + + .btnSub { + padding: 10px 0; + margin-bottom: 10px; + + .btn-link { + background-color: $red1; + padding: 10px 30px; + color: $themeReverse; + width: 100%; + @extend %defaultTransition; + cursor: pointer; + border: 1px solid white; + + &:hover { + @extend %defaultTransition; + background-color: $themeReverse; + color: $red; + border: 1px solid $red; + } + } + } + + .err { + p { + margin-top: 3px; + color: $red; + } + + input, textarea { + border: 1px solid $red; + } + } + } + } + + .s1-col2-right { + position: relative; + margin-bottom: 10px; + + .mapouter { + position: relative; + text-align: right; + height: 100%; + width: 100%; + z-index: 1; + padding-top: 20px; + padding-left: 20px; + @include boxSizing(border-box); + + @media (max-width: 992px) { + padding: 0; + } + + .gmap_canvas { + overflow: hidden; + background: transparent !important; + height: 100%; + width: 100%; + + #gmap_canvas { + width: 100%; + height: 100%; + } + } + + .bg-map { + background-color: $red1; + width: 200px; + height: 90%; + position: absolute; + top: 0; + left: 0; + z-index: -1; + + @media (max-width: 992px) { + display: none; + } + } + } + } + } + + .s2-right { + padding: 50px 80px; + @media (max-width: 768px) { + padding: 10px 0; + } + + .s2-right-title { + display: flex; + align-items: center; + margin-bottom: 10px; + @media (max-width: 768px) { + margin-top: 10px; + } + + i { + display: flex; + align-items: center; + color: $red; + font-size: 18px; + } + + h4 { + margin: 0 5px; + } + } + + .s2-right-desc { + //margin-top: 5px; + width: 100%; + max-width: 250px; + font-size: 16px; + color: black; + @extend %defaultTransition; + } + + .phone { + font-family: 'sansNum', sans-serif; + + &:hover { + color: $red; + @extend %defaultTransition; + } + } + + .email { + &:hover { + color: $red; + @extend %defaultTransition; + } + } + } + + .s3-right { + .s3-right-view-title { + align-items: center; + position: relative; + + + .br { + height: 1px; + width: 83%; + background-color: $theme; + position: absolute; + right: 150px; + top: 29px; + @media (max-width: 768px) { + width: 50%; + } + } + } + + .s3-right-item { + margin-top: 20px; + + .s3-right-title { + display: flex; + color: #000; + + @media (max-width: 768px) { + margin-bottom: 10px; + } + + &:hover { + h1 { + color: #000; + @extend %defaultTransition; + + } + + h4 { + color: $red; + @extend %defaultTransition; + } + } + + p { + color: $red; + font-family: 'sansNum', sans-serif !important; + margin: 0; + @extend %defaultTransition; + font-size: $h1 !important; + + @media (max-width: 575px) { + font-size: 25px !important; + } + } + + h4 { + margin-right: 20px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + @extend %defaultTransition; + + @media (max-width: 768px) { + margin-top: 10px; + margin-right: 15px; + } + } + } + } + } + } +} + +//--------------------------- Election And LogIn +.election-page { + display: flex; + align-items: center; + justify-content: center; + padding-bottom: 20px; + + .login-row { + justify-content: center; + + .col-12 { + display: flex; + justify-content: center; + + .view-form { + background-color: #fff; + width: 500px; + margin: 60px 0; + border-radius: 5px; + display: flex; + align-items: center; + flex-direction: column; + padding: 20px 10px; + @include boxShadow(0 5px 20px #999); + + + img { + width: 100px; + height: 110px; + } + + + form { + width: 100%; + max-width: 400px; + + .title { + text-align: right; + margin-bottom: 20px; + } + + .formRow { + .input { + border-top: none; + border-left: none; + border-right: none; + width: 100%; + margin: 10px 0; + font-size: 15px; + padding: 10px; + box-sizing: border-box; + + } + } + + .btnSub { + width: 100%; + margin: 20px 0; + + .btn-link { + width: 100%; + padding: 10px 0; + font-size: 16px; + font-weight: lighter; + } + } + } + } + } + } + + .line-txt { + position: relative; + margin: 30px 0; + + .line { + height: 1px; + background-color: rgba(0, 0, 0, 0.2); + } + + .txt { + color: #86868A; + font-size: 24px; + display: inline-block; + padding-left: 12px; + background-color: white; + position: absolute; + top: -20px; + } + } + + .election-view-item { + width: 100%; + height: auto; + background-color: #fff; + padding: 10px 20px; + margin-bottom: 20px; + @include borderRadius(10px); + @include boxShadow(0 3px 15px #999); + + .election-item1 { + border-bottom: 2px solid rgba(#000, 0.2); + padding: 20px 0; + + .about-title { + padding: 20px 0; + color: #444444; + } + + .about-txt { + color: #666666; + } + } + + .election-item2 { + padding: 20px 0; + + + .election-user { + background-color: #fff; + padding: 20px; + margin-bottom: 20px; + @include borderRadius(10px); + @include boxShadow(0 3px 15px #999); + @extend %defaultTransition; + + &.clicked { + &.exclude { + opacity: 0.4; + } + + &.selected { + @include boxShadow(0 3px 15px green); + } + } + + img { + width: 100%; + border-radius: 5px; + } + + .user-name { + margin: 10px 0; + } + + .view-btn { + .selectBTN { + background: green; + border-color: green; + color: white; + border-radius: 5px; + } + } + } + + .voteBtn { + background: green; + border-color: green; + + &:hover { + background: #fff; + border-color: green; + color: green; + } + + &:disabled { + background: gray; + border-color: gray; + cursor: not-allowed; + + &:hover { + color: #fff; + background: gray; + border-color: gray; + } + } + } + + } + + } + + .el-dialog__wrapper { + .el-dialog { + @media (max-width: 1198px) { + width: 80%; + } + + .el-dialog__body { + .img-alert { + width: 100%; + border-radius: 5px; + } + + .user-name { + margin-bottom: 30px; + } + + p { + margin: 5px 0; + } + + .about { + color: $red; + } + } + } + } + + .err { + p { + margin-top: 3px; + color: $red; + } + + .input, textarea { + border: 1px solid $red; + } + } + +} + +//--------------------------- services +.services-page { + + .services-view { + margin-bottom: 20px; + margin-top: 10px; + + .services-item { + i { + color: $red; + font-size: 18px; + @extend %defaultTransition; + } + + span { + color: #333333; + margin-right: 5px; + @extend %defaultTransition; + } + + &:hover { + span { + color: $red; + } + } + } + } +} + +//--------------------------- Form Meeting +.meeting-page { + .view-form { + + justify-content: center; + display: flex; + flex-direction: column; + align-items: center; + + form { + width: 100%; + max-width: 600px; + background-color: #fff; + border-radius: 10px; + padding: 30px 40px; + @include boxShadow(0 5px 20px #999); + + .title { + text-align: right; + margin-bottom: 20px; + } + + .formRow { + margin-bottom: 10px; + + .input { + width: 100%; + margin: 10px 0; + padding: 15px; + box-sizing: border-box; + border: 1px solid #ffffff; + background-color: #f4f4f4; + } + } + + .btnSub { + width: 100%; + margin: 20px 0; + + .btn-link { + width: 100%; + padding: 10px 0; + font-size: 16px; + font-weight: lighter; + } + } + + .view-captcha { + display: flex; + align-items: center; + //justify-content: space-between; + + .formRow { + margin-bottom: 0; + //flex-basis: calc(100% - 220px); + } + + .new-captcha { + width: 220px; + display: flex; + align-items: center; + + .captcha { + display: inline-block; + + svg { + height: 50px; + } + } + + button { + padding: 0 15px; + @include borderRadius(0); + height: 50px; + } + } + + .err-captcha { + margin-bottom: 10px; + margin-top: 0; + color: $red; + } + } + + .err { + p { + margin-top: 3px; + color: $red; + } + + .input, textarea { + border: 1px solid $red; + } + } + } + } +} + +//--------------------------- Links +.links-page { + .links-view { + margin-bottom: 20px; + margin-top: 10px; + + .links-item { + i { + color: $red; + font-size: 18px; + @extend %defaultTransition; + } + + span { + color: #333333; + @extend %defaultTransition; + margin-right: 5px; + } + + &:hover { + span { + color: $red; + } + } + } + } + + .line-txt { + position: relative; + margin: 30px 0; + + .line { + height: 1px; + background-color: rgba(0, 0, 0, 0.5); + } + + .txt { + color: #333333; + font-size: 24px; + display: inline-block; + padding-left: 12px; + background-color: white; + position: absolute; + top: -20px; + } + } +} + +//--------------------------- Archive +.archive-page { + + .news-card { + + img { + width: 100%; + } + + h2 { + font-size: 20px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + } + + .whole-wrapper { + margin-top: 16px; + display: flex; + justify-content: space-between; + align-items: center; + } + + .whole-wrapper-date { + font-family: 'sansNum', sans-serif; + font-size: 12px; + color: gray; + } + + .whole-wrapper-title { + @extend %defaultTransition; + color: gray; + + i { + @include transform(translateY(2px)); + margin-right: 10px; + } + + &:hover { + @extend %defaultTransition; + color: $red; + } + } + } + + .line-txt { + position: relative; + margin: 30px 0; + + .line { + height: 1px; + background-color: rgba(0, 0, 0, 0.5); + } + + .txt { + color: #333333; + font-size: 24px; + display: inline-block; + padding-left: 12px; + background-color: white; + position: absolute; + top: -20px; + } + } + + .paginate { + overflow: hidden; + + .el-pagination { + display: flex; + justify-content: center; + direction: rtl !important; + margin-top: 20px; + + button:hover { + color: $red !important; + } + + + } + + + .el-pager { + direction: rtl !important; + + li:hover { + color: $red !important; + } + + .active { + color: $red !important; + cursor: pointer !important; + } + + } + + + } +} + +//--------------------------- Search results +.search-result { + padding-top: 150px; + + .results-for { + margin-bottom: 100px; + + h2 { + background: $red; + color: #fff; + padding: 15px; + } + } + + section { + margin-bottom: 60px; + } + + .title { + margin-bottom: 30px; + display: flex; + align-items: center; + + h2 { + cursor: pointer; + display: flex; + align-items: center; + + i { + display: inline-block; + @extend %defaultTransition; + margin-left: 5px; + + &.open { + @include transform(rotateZ(-90deg)); + } + } + + b { + $radius: 30px; + width: $radius; + height: $radius; + line-height: $radius; + text-align: center; + display: inline-block; + @include borderRadius(50%); + background: $red; + color: #fff; + font-size: 12px; + margin-right: 10px; + } + } + + p { + color: $red; + margin-right: 10px; + } + } + + .seeMore { + text-align: center; + margin-top: 20px; + margin-bottom: 20px; + + button { + text-align: center; + border: none; + background: transparent; + cursor: pointer; + + &:hover { + span, i { + color: $red; + } + } + + span, i { + display: block; + @extend %defaultTransition; + } + + i { + margin-top: 5px; + + &.open { + @include transform(rotateZ(180deg)); + } + } + } + } + + .line { + border-bottom: 1px solid rgba(#000, 0.3); + margin-bottom: 20px; + } + + .news { + .news-item { + height: 100%; + display: flex; + justify-content: flex-start; + flex-wrap: wrap; + + img { + width: 100%; + margin-bottom: 10px; + } + + h2 { + width: 100%; + margin-bottom: 15px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + font-size: $h5 !important; + line-height: 1.3em; + } + + p { + flex-basis: 100%; + margin-bottom: 20px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + color: rgba(#000, 0.7); + } + + a { + margin-top: auto; + display: inline-block; + } + } + } + + .pages { + .pages-item { + a { + display: block; + padding: 20px; + text-align: center; + color: $red; + background: #fff; + border: 1px solid $red; + @extend %defaultTransition; + + &:hover { + background: $red; + color: #fff; + } + } + } + } + + .media { + .media-item { + height: 100%; + display: flex; + flex-direction: column; + + img { + width: 100%; + margin-bottom: 5px; + } + + .txtBox { + position: relative; + overflow: hidden; + flex-basis: 100%; + display: flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: flex-start; + align-items: flex-start; + + h2 { + width: 100%; + margin-top: 27px; + margin-bottom: 25px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + font-size: $h5 !important; + line-height: 1.3em; + } + + a { + margin-top: auto; + display: block; + } + + .tag { + display: inline-block; + background: transparent; + border: 1px solid rgba($red, 0.6); + color: rgba($red, 0.8); + padding: 0 5px; + @include borderRadius(4px); + font-size: 13px; + position: absolute; + top: 0; + right: 0; + } + } + } + } +} + diff --git a/assets/scss/_printStyles.scss b/assets/scss/_printStyles.scss new file mode 100644 index 0000000..47530ee --- /dev/null +++ b/assets/scss/_printStyles.scss @@ -0,0 +1,226 @@ +body { + -webkit-print-color-adjust: exact !important; +} + +@page { + size: landscape !important; +} + +#box-face-receipt { + padding: 20px; + + .receipt-body { + border: 1px solid rgba(#000, 1); + padding: 15px; + + .infoRow { + margin-bottom: 15px; + } + + .topLeft { + display: flex; + align-items: center; + justify-content: center; + text-align: center; + background: rgba(0, 0, 0, 0.05); + padding: 10px; + flex-basis: 300px; + + b { + } + + &:first-child { + margin-bottom: 5px; + } + } + + h2 { + margin-bottom: 20px; + } + + b, span { + display: inline-block; + } + + b { + margin-left: 5px; + } + + .senderInfo { + } + + .receiverInfo { + .topLeft { + background: transparent; + justify-content: flex-end; + align-items: flex-start; + + svg { + width: 200px; + + path, rect { + fill: #000; + } + } + } + } + } +} + +#box-inner-receipt { + padding: 20px; + + .receipt-body { + border: 1px solid rgba(#000, 1); + padding: 15px; + + .topBar { + margin-bottom: 30px; + + svg { + width: 200px; + + path, rect { + fill: #000; + } + } + } + + .topLeft { + display: flex; + align-items: center; + justify-content: center; + text-align: center; + background: rgba(0, 0, 0, 0.05); + padding: 10px; + flex-basis: 300px; + + &:first-child { + margin-left: 5px; + } + } + + .stuff-list { + margin-bottom: 30px !important; + + @media print { + .notice { + display: none; + } + } + + table { + width: 100% !important; + + thead { + tr { + background: rgba(0, 0, 0, 0.7) !important; + color: #fff !important; + } + } + + tr { + background-color: #E0E6ED !important; + + &.odd { + background-color: #8A92A9 !important; + } + + td, th { + padding: 10px !important; + text-align: center !important; + } + } + } + } + } + +} + +#factor-layout { + border: 1px dashed #000; + padding: 10px; + margin-bottom: 30px; + + span, p { + font-family: 'iranYekanR', sans-serif; + color: #000; + } + + .pageHeader { + margin-bottom: 10px; + + .row1 { + h2 { + text-align: center; + font-family: 'iranYekanB'; + font-weight: bold; + } + } + + .row2 { + display: flex; + flex-direction: column; + align-items: flex-end; + + p { + width: 200px; + text-align: right; + } + } + } + + .factor { + width: 100%; + border: 1px solid #000; + + + .factorInfo { + display: flex; + flex-direction: column; + padding: 10px; + + p { + text-align: right; + padding: 10px 0; + color: #000; + } + + .row1 { + display: flex; + flex-direction: row; + justify-content: center; + + p { + flex-basis: 33.33%; + } + } + } + + table { + width: 100%; + + thead { + tr { + th { + background: rgba(#000, 0.1); + text-align: center; + border: 1px solid #000; + padding: 5px; + } + } + } + + tbody { + tr { + td, th { + text-align: center; + border: 1px solid #000; + padding: 5px; + } + } + } + } + } + +} diff --git a/assets/scss/_variables.scss b/assets/scss/_variables.scss new file mode 100644 index 0000000..e51c6c4 --- /dev/null +++ b/assets/scss/_variables.scss @@ -0,0 +1,22 @@ +////// colors +$theme: #222F3A; +$themeReverse: #fff; +$red: #CC0000; +$red1: #903030; +$themeFooter: "#111111"; +$themeTxtColor: lightgreen; +$offCanvasColor: #F7F6F6; +$yearBannerHeight: 180px; +$headerNavLinksHeight: 40px; +$sectionBg: #F4F4F4; +$gray: #e2e6ea; +$gray1: #212529; +$border: #ced4da; + +//------------------------------Font Size +$h1: 38px; +$h2: 28px; +$h3: 24px; +$h4: 22px; +$h5: 20px; +$h6: 18px; diff --git a/assets/scss/main.scss b/assets/scss/main.scss new file mode 100644 index 0000000..37eac15 --- /dev/null +++ b/assets/scss/main.scss @@ -0,0 +1,12 @@ +@import "variables"; +@import "mixins"; +@import "extentions"; +@import "fonts"; +@import "globalStyles"; +@import "pages"; +@import "CKEditorStyle"; +@import "el_ui_rtl"; +@import "printStyles"; + + + diff --git a/backup/.gitinclude b/backup/.gitinclude new file mode 100644 index 0000000..e69de29 diff --git a/backup/backup_2021-07-17.zip b/backup/backup_2021-07-17.zip new file mode 100644 index 0000000..97d75ee Binary files /dev/null and b/backup/backup_2021-07-17.zip differ diff --git a/components/CategoryGallerySection.vue b/components/CategoryGallerySection.vue new file mode 100644 index 0000000..fd7a047 --- /dev/null +++ b/components/CategoryGallerySection.vue @@ -0,0 +1,115 @@ + + + diff --git a/components/CategoryHeroNews.vue b/components/CategoryHeroNews.vue new file mode 100644 index 0000000..48d155b --- /dev/null +++ b/components/CategoryHeroNews.vue @@ -0,0 +1,41 @@ + + + + diff --git a/components/LineTxt.vue b/components/LineTxt.vue new file mode 100644 index 0000000..59ccb38 --- /dev/null +++ b/components/LineTxt.vue @@ -0,0 +1,17 @@ + + + diff --git a/components/NewsBox.vue b/components/NewsBox.vue new file mode 100644 index 0000000..72c5966 --- /dev/null +++ b/components/NewsBox.vue @@ -0,0 +1,53 @@ + + + diff --git a/components/OffCanvas.vue b/components/OffCanvas.vue new file mode 100644 index 0000000..cd2b2eb --- /dev/null +++ b/components/OffCanvas.vue @@ -0,0 +1,452 @@ + + + diff --git a/components/SepratorLine.vue b/components/SepratorLine.vue new file mode 100644 index 0000000..5894a4b --- /dev/null +++ b/components/SepratorLine.vue @@ -0,0 +1,5 @@ + diff --git a/components/SideBarLineTxt.vue b/components/SideBarLineTxt.vue new file mode 100644 index 0000000..21bb3ba --- /dev/null +++ b/components/SideBarLineTxt.vue @@ -0,0 +1,18 @@ + + + + diff --git a/components/SiteFooter.vue b/components/SiteFooter.vue new file mode 100644 index 0000000..5ca1e0f --- /dev/null +++ b/components/SiteFooter.vue @@ -0,0 +1,105 @@ + + + diff --git a/components/SiteHeader.vue b/components/SiteHeader.vue new file mode 100644 index 0000000..d5a4630 --- /dev/null +++ b/components/SiteHeader.vue @@ -0,0 +1,297 @@ + + + diff --git a/components/TreeItem.vue b/components/TreeItem.vue new file mode 100644 index 0000000..8b00943 --- /dev/null +++ b/components/TreeItem.vue @@ -0,0 +1,32 @@ + + + diff --git a/components/admin/CustomSubHeader.vue b/components/admin/CustomSubHeader.vue new file mode 100644 index 0000000..7f60799 --- /dev/null +++ b/components/admin/CustomSubHeader.vue @@ -0,0 +1,23 @@ + + + diff --git a/components/admin/RenderString.js b/components/admin/RenderString.js new file mode 100644 index 0000000..fcc8a4d --- /dev/null +++ b/components/admin/RenderString.js @@ -0,0 +1,20 @@ +import Vue from 'vue' + +Vue.component('RenderString', { + props: { + string: { + required: true + } + }, + render(h) { + const render = { + template: "
" + this.string + "
", + methods: { + markComplete() { + console.log('the method called') + } + } + } + return h(render) + } +}) diff --git a/components/admin/TheFooter.vue b/components/admin/TheFooter.vue new file mode 100644 index 0000000..4948302 --- /dev/null +++ b/components/admin/TheFooter.vue @@ -0,0 +1,16 @@ + + + diff --git a/components/admin/TheHeader.vue b/components/admin/TheHeader.vue new file mode 100644 index 0000000..4d5856c --- /dev/null +++ b/components/admin/TheHeader.vue @@ -0,0 +1,40 @@ + + + diff --git a/components/admin/TheHeaderDropdownAccnt.vue b/components/admin/TheHeaderDropdownAccnt.vue new file mode 100644 index 0000000..e4e7975 --- /dev/null +++ b/components/admin/TheHeaderDropdownAccnt.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/components/admin/TheSidebar.vue b/components/admin/TheSidebar.vue new file mode 100644 index 0000000..6e4b02e --- /dev/null +++ b/components/admin/TheSidebar.vue @@ -0,0 +1,343 @@ + + + diff --git a/components/admin/_nav.js b/components/admin/_nav.js new file mode 100644 index 0000000..2280386 --- /dev/null +++ b/components/admin/_nav.js @@ -0,0 +1,19 @@ +export default [ + { + _name: 'CSidebarNav', + _children: [ + { + _name: 'CSidebarNavItem', + name: 'صفحه اصلی', + to: {name: 'admin'}, + icon: 'cil-speedometer' + }, + { + _name: 'CSidebarNavItem', + name: 'مدیریت کابران', + to: {name: 'admin-users'}, + icon: 'cil-speedometer' + } + ] + } +] diff --git a/components/admin/charts/CChartBarExample.vue b/components/admin/charts/CChartBarExample.vue new file mode 100644 index 0000000..a1c8214 --- /dev/null +++ b/components/admin/charts/CChartBarExample.vue @@ -0,0 +1,23 @@ + + + diff --git a/components/admin/charts/CChartBarSimple.vue b/components/admin/charts/CChartBarSimple.vue new file mode 100644 index 0000000..ed87d86 --- /dev/null +++ b/components/admin/charts/CChartBarSimple.vue @@ -0,0 +1,72 @@ + + + diff --git a/components/admin/charts/CChartDoughnutExample.vue b/components/admin/charts/CChartDoughnutExample.vue new file mode 100644 index 0000000..4393730 --- /dev/null +++ b/components/admin/charts/CChartDoughnutExample.vue @@ -0,0 +1,27 @@ + + + diff --git a/components/admin/charts/CChartLineExample.vue b/components/admin/charts/CChartLineExample.vue new file mode 100644 index 0000000..2b2ecf2 --- /dev/null +++ b/components/admin/charts/CChartLineExample.vue @@ -0,0 +1,28 @@ + + + diff --git a/components/admin/charts/CChartLineSimple.vue b/components/admin/charts/CChartLineSimple.vue new file mode 100644 index 0000000..0f9bfad --- /dev/null +++ b/components/admin/charts/CChartLineSimple.vue @@ -0,0 +1,138 @@ + + + diff --git a/components/admin/charts/CChartPieExample.vue b/components/admin/charts/CChartPieExample.vue new file mode 100644 index 0000000..3178695 --- /dev/null +++ b/components/admin/charts/CChartPieExample.vue @@ -0,0 +1,27 @@ + + + diff --git a/components/admin/charts/CChartPolarAreaExample.vue b/components/admin/charts/CChartPolarAreaExample.vue new file mode 100644 index 0000000..4f9fc31 --- /dev/null +++ b/components/admin/charts/CChartPolarAreaExample.vue @@ -0,0 +1,45 @@ + + + diff --git a/components/admin/charts/CChartRadarExample.vue b/components/admin/charts/CChartRadarExample.vue new file mode 100644 index 0000000..bd5a634 --- /dev/null +++ b/components/admin/charts/CChartRadarExample.vue @@ -0,0 +1,49 @@ + + + diff --git a/components/admin/charts/MainChartExample.vue b/components/admin/charts/MainChartExample.vue new file mode 100644 index 0000000..d4251e9 --- /dev/null +++ b/components/admin/charts/MainChartExample.vue @@ -0,0 +1,103 @@ + + + diff --git a/components/admin/widgets/WidgetsBrand.vue b/components/admin/widgets/WidgetsBrand.vue new file mode 100644 index 0000000..55ca4a0 --- /dev/null +++ b/components/admin/widgets/WidgetsBrand.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/components/admin/widgets/WidgetsDropdown.vue b/components/admin/widgets/WidgetsDropdown.vue new file mode 100644 index 0000000..63f5177 --- /dev/null +++ b/components/admin/widgets/WidgetsDropdown.vue @@ -0,0 +1,136 @@ + + + diff --git a/components/pageLoad.vue b/components/pageLoad.vue new file mode 100644 index 0000000..cd91f11 --- /dev/null +++ b/components/pageLoad.vue @@ -0,0 +1,41 @@ + + + diff --git a/components/preLoader.vue b/components/preLoader.vue new file mode 100644 index 0000000..24e1ee4 --- /dev/null +++ b/components/preLoader.vue @@ -0,0 +1,26 @@ + + + diff --git a/components/vue2-flip-countdown.js b/components/vue2-flip-countdown.js new file mode 100644 index 0000000..1ab24c5 --- /dev/null +++ b/components/vue2-flip-countdown.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("vue2-flip-countdown",[],t):"object"==typeof exports?exports["vue2-flip-countdown"]=t():e["vue2-flip-countdown"]=t()}("undefined"!=typeof self?self:this,function(){return function(e){function t(a){if(n[a])return n[a].exports;var i=n[a]={i:a,l:!1,exports:{}};return e[a].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,a){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:a})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=1)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=n(7);t.default={name:"flipCountdown",props:{deadline:{type:String},stop:{type:Boolean},showDays:{type:Boolean,required:!1,default:!0},showHours:{type:Boolean,required:!1,default:!0},showMinutes:{type:Boolean,required:!1,default:!0},showSeconds:{type:Boolean,required:!1,default:!0},labels:{type:Object,required:!1,default:function(){return{days:"روز",hours:"ساعت",minutes:"دقیقه",seconds:"ثانیه"}}}},data:function(){var e=a();return{now:Math.trunc((new Date).getTime()/1e3),date:null,interval:null,diff:0,show:!1,timeData:[{current:0,previous:0,label:this.labels.days,elementId:"flip-card-days-"+e,show:this.showDays},{current:0,previous:0,label:this.labels.hours,elementId:"flip-card-hours-"+e,show:this.showHours},{current:0,previous:0,label:this.labels.minutes,elementId:"flip-card-minutes-"+e,show:this.showMinutes},{current:0,previous:0,label:this.labels.seconds,elementId:"flip-card-seconds-"+e,show:this.showSeconds}]}},created:function(){var e=this;if(!this.deadline)throw new Error("Missing props 'deadline'");var t=this.deadline;if(this.date=Math.trunc(Date.parse(t.replace(/-/g,"/"))/1e3),!this.date)throw new Error("Invalid props value, correct the 'deadline'");this.interval=setInterval(function(){e.now=Math.trunc((new Date).getTime()/1e3)},1e3)},mounted:function(){0!==this.diff&&(this.show=!0)},computed:{seconds:function(){return Math.trunc(this.diff)%60},minutes:function(){return Math.trunc(this.diff/60)%60},hours:function(){return Math.trunc(this.diff/60/60)%24},days:function(){return Math.trunc(this.diff/60/60/24)}},watch:{deadline:function(e,t){var n=this.deadline;if(this.date=Math.trunc(Date.parse(n.replace(/-/g,"/"))/1e3),!this.date)throw new Error("Invalid props value, correct the 'deadline'")},now:function(e){this.diff=this.date-this.now,this.diff<=0||this.stop?(this.diff=0,this.updateTime(3,0)):this.updateAllCards()},diff:function(e){0===e&&(this.$emit("timeElapsed"),this.updateAllCards())}},filters:{twoDigits:function(e){return e.toString().length<=1?"0"+e.toString():e.toString()}},methods:{updateAllCards:function(){this.updateTime(0,this.days),this.updateTime(1,this.hours),this.updateTime(2,this.minutes),this.updateTime(3,this.seconds)},updateTime:function(e,t){if(!(e>=this.timeData.length||void 0===t)){window.requestAnimationFrame&&(this.frame=requestAnimationFrame(this.updateTime.bind(this)));var n=this.timeData[e],a=t<0?0:t,i=document.querySelector("#"+n.elementId);if(a!==n.current&&(n.previous=n.current,n.current=a,i&&(i.classList.remove("flip"),i.offsetWidth,i.classList.add("flip")),0===e)){var r=i.querySelectorAll("span b");if(r){var o=!0,s=!1,f=void 0;try{for(var d,c=r[Symbol.iterator]();!(o=(d=c.next()).done);o=!0){var l=d.value,u=l.classList[0];if(t/1e3>=1){if(!u.includes("-4digits")){var p=u+"-4digits";l.classList.add(p),l.classList.remove(u)}}else if(u.includes("-4digits")){var v=u.replace("-4digits","");l.classList.add(v),l.classList.remove(u)}}}catch(e){s=!0,f=e}finally{try{!o&&c.return&&c.return()}finally{if(s)throw f}}}}}}},beforeDestroy:function(){window.cancelAnimationFrame&&cancelAnimationFrame(this.frame)},destroyed:function(){clearInterval(null)}}},function(e,t,n){"use strict";function a(e){n(2)}Object.defineProperty(t,"__esModule",{value:!0});var i=n(0),r=n.n(i);for(var o in i)"default"!==o&&function(e){n.d(t,e,function(){return i[e]})}(o);var s=n(10),f=n(11),d=a,c=Object(f.a)(r.a,s.a,s.b,!1,d,"data-v-78efe7f6",null);t.default=c.exports},function(e,t,n){var a=n(3);"string"==typeof a&&(a=[[e.i,a,""]]),a.locals&&(e.exports=a.locals);var i=n(5).default;i("6cb6a1b9",a,!0,{})},function(e,t,n){t=e.exports=n(4)(!1),t.push([e.i,"\n.flip-clock[data-v-78efe7f6] {\n text-align: center;\n perspective: 600px;\n margin: 0 auto;\n}\n.flip-clock *[data-v-78efe7f6],\n.flip-clock *[data-v-78efe7f6]:before,\n.flip-clock *[data-v-78efe7f6]:after {\n box-sizing: border-box;\n}\n.flip-clock__piece[data-v-78efe7f6] {\n display: inline-block;\n margin: 0 0.2vw;\n}\n@media (min-width: 1000px) {\n.flip-clock__piece[data-v-78efe7f6] {\n margin: 0 5px;\n}\n}\n.flip-clock__slot[data-v-78efe7f6] {\n font-size: 1rem;\n line-height: 1.5;\n display: block;\n}\n.flip-card[data-v-78efe7f6] {\n display: block;\n position: relative;\n padding-bottom: 0.72em;\n font-size: 2.25rem;\n line-height: 0.95;\n}\n@media (min-width: 1000px) {\n.flip-clock__slot[data-v-78efe7f6] {\n font-size: 1.2rem;\n}\n.flip-card[data-v-78efe7f6] {\n font-size: 3rem;\n}\n}\n.flip-card__top[data-v-78efe7f6],\n.flip-card__bottom[data-v-78efe7f6],\n.flip-card__back-bottom[data-v-78efe7f6],\n.flip-card__back[data-v-78efe7f6]::before,\n.flip-card__back[data-v-78efe7f6]::after {\n display: block;\n color: #cca900;\n background: #222;\n padding: 0.23em 0.15em 0.4em;\n border-radius: 0.15em 0.15em 0 0;\n backface-visibility: hidden;\n -webkit-backface-visibility: hidden;\n transform-style: preserve-3d;\n width: 2.1em;\n height: 0.72em;\n}\n.flip-card__top-4digits[data-v-78efe7f6],\n.flip-card__bottom-4digits[data-v-78efe7f6],\n.flip-card__back-bottom-4digits[data-v-78efe7f6],\n.flip-card__back-4digits[data-v-78efe7f6]::before,\n.flip-card__back-4digits[data-v-78efe7f6]::after {\n display: block;\n color: #cca900;\n background: #222;\n padding: 0.23em 0.15em 0.4em;\n border-radius: 0.15em 0.15em 0 0;\n backface-visibility: hidden;\n -webkit-backface-visibility: hidden;\n transform-style: preserve-3d;\n width: 2.65em;\n height: 0.72em;\n}\n.flip-card__bottom[data-v-78efe7f6],\n.flip-card__back-bottom[data-v-78efe7f6],\n.flip-card__bottom-4digits[data-v-78efe7f6],\n.flip-card__back-bottom-4digits[data-v-78efe7f6] {\n color: #ffdc00;\n position: absolute;\n top: 50%;\n left: 0;\n border-top: solid 1px #000;\n background: #393939;\n border-radius: 0 0 0.15em 0.15em;\n pointer-events: none;\n overflow: hidden;\n z-index: 2;\n}\n.flip-card__back-bottom[data-v-78efe7f6],\n.flip-card__back-bottom-4digits[data-v-78efe7f6] {\n z-index: 1;\n}\n.flip-card__bottom[data-v-78efe7f6]::after,\n.flip-card__back-bottom[data-v-78efe7f6]::after,\n.flip-card__bottom-4digits[data-v-78efe7f6]::after,\n.flip-card__back-bottom-4digits[data-v-78efe7f6]::after {\n display: block;\n margin-top: -0.72em;\n}\n.flip-card__back[data-v-78efe7f6]::before,\n.flip-card__bottom[data-v-78efe7f6]::after,\n.flip-card__back-bottom[data-v-78efe7f6]::after,\n.flip-card__back-4digits[data-v-78efe7f6]::before,\n.flip-card__bottom-4digits[data-v-78efe7f6]::after,\n.flip-card__back-bottom-4digits[data-v-78efe7f6]::after {\n content: attr(data-value);\n}\n.flip-card__back[data-v-78efe7f6],\n.flip-card__back-4digits[data-v-78efe7f6] {\n position: absolute;\n top: 0;\n height: 100%;\n left: 0%;\n pointer-events: none;\n}\n.flip-card__back[data-v-78efe7f6]::before,\n.flip-card__back-4digits[data-v-78efe7f6]::before {\n position: relative;\n overflow: hidden;\n z-index: -1;\n}\n.flip .flip-card__back[data-v-78efe7f6]::before,\n.flip .flip-card__back-4digits[data-v-78efe7f6]::before {\n z-index: 1;\n animation: flipTop-data-v-78efe7f6 0.3s cubic-bezier(0.37, 0.01, 0.94, 0.35);\n animation-fill-mode: both;\n transform-origin: center bottom;\n}\n.flip .flip-card__bottom[data-v-78efe7f6],\n.flip .flip-card__bottom-4digits[data-v-78efe7f6] {\n transform-origin: center top;\n animation-fill-mode: both;\n animation: flipBottom-data-v-78efe7f6 0.6s cubic-bezier(0.15, 0.45, 0.28, 1);\n}\n@keyframes flipTop-data-v-78efe7f6 {\n0% {\n transform: rotateX(0deg);\n z-index: 2;\n}\n0%,\n 99% {\n opacity: 1;\n}\n100% {\n transform: rotateX(-90deg);\n opacity: 0;\n}\n}\n@keyframes flipBottom-data-v-78efe7f6 {\n0%,\n 50% {\n z-index: -1;\n transform: rotateX(90deg);\n opacity: 0;\n}\n51% {\n opacity: 1;\n}\n100% {\n opacity: 1;\n transform: rotateX(0deg);\n z-index: 5;\n}\n}\n",""])},function(e,t,n){"use strict";function a(e,t){var n=e[1]||"",a=e[3];if(!a)return n;if(t&&"function"==typeof btoa){var r=i(a);return[n].concat(a.sources.map(function(e){return"/*# sourceURL=".concat(a.sourceRoot).concat(e," */")})).concat([r]).join("\n")}return[n].join("\n")}function i(e){return"/*# ".concat("sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(e)))))," */")}e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n=a(t,e);return t[2]?"@media ".concat(t[2],"{").concat(n,"}"):n}).join("")},t.i=function(e,n){"string"==typeof e&&(e=[[null,e,""]]);for(var a={},i=0;in.parts.length&&(a.parts.length=n.parts.length)}else{for(var r=[],i=0;i>>((3&t)<<3)&255;return i}}},function(e,t){function n(e,t){var n=t||0,i=a;return[i[e[n++]],i[e[n++]],i[e[n++]],i[e[n++]],"-",i[e[n++]],i[e[n++]],"-",i[e[n++]],i[e[n++]],"-",i[e[n++]],i[e[n++]],"-",i[e[n++]],i[e[n++]],i[e[n++]],i[e[n++]],i[e[n++]],i[e[n++]]].join("")}for(var a=[],i=0;i<256;++i)a[i]=(i+256).toString(16).substr(1);e.exports=n},function(e,t,n){"use strict";n.d(t,"a",function(){return a}),n.d(t,"b",function(){return i});var a=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"container flip-clock"},[e._l(e.timeData,function(t){return[n("span",{directives:[{name:"show",rawName:"v-show",value:t.show,expression:"data.show"}],key:t.label,staticClass:"flip-clock__piece",attrs:{id:t.elementId}},[n("span",{staticClass:"flip-clock__card flip-card"},[n("b",{staticClass:"flip-card__top"},[e._v(e._s(e._f("twoDigits")(t.current)))]),e._v(" "),n("b",{staticClass:"flip-card__bottom",attrs:{"data-value":e._f("twoDigits")(t.current)}}),e._v(" "),n("b",{staticClass:"flip-card__back",attrs:{"data-value":e._f("twoDigits")(t.previous)}}),e._v(" "),n("b",{staticClass:"flip-card__back-bottom",attrs:{"data-value":e._f("twoDigits")(t.previous)}})]),e._v(" "),n("span",{staticClass:"flip-clock__slot"},[e._v(e._s(t.label))])])]})],2)},i=[]},function(e,t,n){"use strict";function a(e,t,n,a,i,r,o,s){e=e||{};var f=typeof e.default;"object"!==f&&"function"!==f||(e=e.default);var d="function"==typeof e?e.options:e;t&&(d.render=t,d.staticRenderFns=n,d._compiled=!0),a&&(d.functional=!0),r&&(d._scopeId=r);var c;if(o?(c=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(o)},d._ssrRegister=c):i&&(c=s?function(){i.call(this,this.$root.$options.shadowRoot)}:i),c)if(d.functional){d._injectStyles=c;var l=d.render;d.render=function(e,t){return c.call(t),l(e,t)}}else{var u=d.beforeCreate;d.beforeCreate=u?[].concat(u,c):[c]}return{exports:e,options:d}}t.a=a}])}); diff --git a/layouts/admin-auth.vue b/layouts/admin-auth.vue new file mode 100644 index 0000000..302579f --- /dev/null +++ b/layouts/admin-auth.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/layouts/admin.vue b/layouts/admin.vue new file mode 100644 index 0000000..7de5ed4 --- /dev/null +++ b/layouts/admin.vue @@ -0,0 +1,56 @@ + + + + + + + diff --git a/layouts/blank.vue b/layouts/blank.vue new file mode 100644 index 0000000..129f67a --- /dev/null +++ b/layouts/blank.vue @@ -0,0 +1,5 @@ + diff --git a/layouts/default.vue b/layouts/default.vue new file mode 100644 index 0000000..db54a3a --- /dev/null +++ b/layouts/default.vue @@ -0,0 +1,80 @@ + + + + + + diff --git a/layouts/error.vue b/layouts/error.vue new file mode 100644 index 0000000..e80e1e8 --- /dev/null +++ b/layouts/error.vue @@ -0,0 +1,20 @@ + + + diff --git a/middleware/auth-admin.js b/middleware/auth-admin.js new file mode 100644 index 0000000..eef0970 --- /dev/null +++ b/middleware/auth-admin.js @@ -0,0 +1,8 @@ +export default function ({$auth, redirect}) { + if ($auth.loggedIn && $auth.hasScope('admin')) { + return true + } + else { + return redirect('/admin/login') + } +} diff --git a/middleware/redirects.js b/middleware/redirects.js new file mode 100644 index 0000000..fe35395 --- /dev/null +++ b/middleware/redirects.js @@ -0,0 +1,11 @@ +export default function ({route, redirect, error}) { + ///////////// redirect to default local + if (route.path === '/') return redirect('/ostandari') + ///////////// local check + const portals = ['ostandari', 'election'] + const isPortal = portals.includes(route.params.portal) + const isAdmin = route.path.includes('/admin') + + if (isPortal || isAdmin) return null + else error({statusCode: 404, message: 'صفحه مورد نظر یافت نشد'}) +} diff --git a/mixins/CoreUtils.js b/mixins/CoreUtils.js new file mode 100644 index 0000000..4ce8c58 --- /dev/null +++ b/mixins/CoreUtils.js @@ -0,0 +1,175 @@ +export default { + methods: { + getCssCustomProperties() { + if (process.client) { + const cssCustomProperties = {} + const sheets = document.styleSheets + let cssText = '' + for (let i = sheets.length - 1; i > -1; i--) { + const rules = sheets[i].cssRules + for (let j = rules.length - 1; j > -1; j--) { + if (rules[j].selectorText === '.ie-custom-properties') { + // eslint-disable-next-line prefer-destructuring + cssText = rules[j].cssText + break + } + } + + if (cssText) { + break + } + } + + // eslint-disable-next-line unicorn/prefer-string-slice + cssText = cssText.substring( + cssText.lastIndexOf('{') + 1, + cssText.lastIndexOf('}') + ) + + cssText.split(';').forEach(property => { + if (property) { + const name = property.split(': ')[0] + const value = property.split(': ')[1] + if (name && value) { + cssCustomProperties[`--${name.trim()}`] = value.trim() + } + } + }) + return cssCustomProperties + } else { + return null + } + }, + deepObjectsMerge(target, source) { + // Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties + for (const key of Object.keys(source)) { + if (source[key] instanceof Object) { + Object.assign(source[key], this.deepObjectsMerge(target[key], source[key])) + } + } + + // Join `target` and modified `source` + Object.assign(target || {}, source) + return target + }, + getColor(rawProperty, element = process.client ? document.body : null) { + const property = `--${rawProperty}` + const style = this.getStyle(property, element) + return style ? style : rawProperty + }, + getStyle(property, element = process.client ? document.body : null) { + if (process.client) { + const minIEVersion = 10 + const isIE1x = () => Boolean(document.documentMode) && document.documentMode >= minIEVersion + const isCustomProperty = property => property.match(/^--.*/i) + /// + let style + + if (isCustomProperty(property) && isIE1x()) { + const cssCustomProperties = this.getCssCustomProperties() + style = cssCustomProperties[property] + } else { + style = window.getComputedStyle(element, null).getPropertyValue(property).replace(/^\s/, '') + } + + return style + } else { + return null + } + }, + hexToRgb(color) { + if (typeof color === 'undefined') { + throw new TypeError('Hex color is not defined') + } + + const hex = color.match(/^#(?:[0-9a-f]{3}){1,2}$/i) + + if (!hex) { + throw new Error(`${color} is not a valid hex color`) + } + + let r + let g + let b + + if (color.length === 7) { + r = parseInt(color.slice(1, 3), 16) + g = parseInt(color.slice(3, 5), 16) + b = parseInt(color.slice(5, 7), 16) + } else { + r = parseInt(color.slice(1, 2), 16) + g = parseInt(color.slice(2, 3), 16) + b = parseInt(color.slice(3, 5), 16) + } + + return `rgba(${r}, ${g}, ${b})` + }, + hexToRgba(color, opacity = 100) { + if (typeof color === 'undefined') { + throw new TypeError('Hex color is not defined') + } + + const hex = color.match(/^#(?:[0-9a-f]{3}){1,2}$/i) + + if (!hex) { + throw new Error(`${color} is not a valid hex color`) + } + + let r + let g + let b + + if (color.length === 7) { + r = parseInt(color.slice(1, 3), 16) + g = parseInt(color.slice(3, 5), 16) + b = parseInt(color.slice(5, 7), 16) + } else { + r = parseInt(color.slice(1, 2), 16) + g = parseInt(color.slice(2, 3), 16) + b = parseInt(color.slice(3, 5), 16) + } + + return `rgba(${r}, ${g}, ${b}, ${opacity / 100})` + }, + makeUid() { + const key = Math.random().toString(36).substr(2) + return 'uid-' + key + }, + omitByKeys(originalObject, keys) { + var newObj = {} + var objKeys = Object.keys(originalObject) + for (var i = 0; i < objKeys.length; i++) { + !keys.includes(objKeys[i]) && (newObj[objKeys[i]] = originalObject[objKeys[i]]) + } + return newObj + }, + pickByKeys(originalObject, keys) { + var newObj = {} + for (var i = 0; i < keys.length; i++) { + newObj[keys[i]] = originalObject[keys[i]] + } + return newObj + }, + rgbToHex(color) { + if (typeof color === 'undefined') { + throw new TypeError('Hex color is not defined') + } + + if (color === 'transparent') { + return '#00000000' + } + + const rgb = color.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i) + + if (!rgb) { + throw new Error(`${color} is not a valid rgb color`) + } + + const r = `0${parseInt(rgb[1], 10).toString(16)}` + const g = `0${parseInt(rgb[2], 10).toString(16)}` + const b = `0${parseInt(rgb[3], 10).toString(16)}` + + return `#${r.slice(-2)}${g.slice(-2)}${b.slice(-2)}` + } + } +} diff --git a/mixins/axiosUploadProcess.js b/mixins/axiosUploadProcess.js new file mode 100644 index 0000000..0fff497 --- /dev/null +++ b/mixins/axiosUploadProcess.js @@ -0,0 +1,25 @@ +const minimumDataSize = 100 //size unit = kilobytes (kb) + +export default { + data() { + return { + axiosConfig: { + onUploadProgress: progressEvent => { + if (progressEvent.total / 1024 > minimumDataSize) { + const text = 'درحال آپلود ' + const uploadLayout = this.$loading({ + lock: true, + text: text, + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)' + }) + document.querySelector('.el-loading-text').innerText = text + Math.floor(((progressEvent.loaded / progressEvent.total) * 100)) + '%' + if ((progressEvent.loaded / progressEvent.total) * 100 === 100) { + uploadLayout.close() + } + } + } + } + } + } +} diff --git a/mixins/unreadContactMessages.js b/mixins/unreadContactMessages.js new file mode 100644 index 0000000..78f0e27 --- /dev/null +++ b/mixins/unreadContactMessages.js @@ -0,0 +1,16 @@ +export default{ + mounted(){ + this.checkContactMessage(); + }, + methods : { + checkContactMessage() { + if(this.$auth.loggedIn){ + this.$axios.get('/api/admin/comment/countAll/ContactUs').then((res) => { + const messages = res.data.filter((item) => !item.read); + + this.$store.commit('admin/set' , ['unreadContactMessagesCount' , messages.length]) + }) + } + } + } +} diff --git a/mixins/unreadMeetingReq.js b/mixins/unreadMeetingReq.js new file mode 100644 index 0000000..5ab05a4 --- /dev/null +++ b/mixins/unreadMeetingReq.js @@ -0,0 +1,16 @@ +export default{ + mounted(){ + this.checkMeetingMessage(); + }, + methods : { + checkMeetingMessage() { + if(this.$auth.loggedIn && this.$auth.user.permissions.includes('superAdmin')){ + this.$axios.get('/api/admin/meeting/getCount').then((res) => { + const messages = res.data.filter((item) => !item.read); + + this.$store.commit('admin/set' , ['unreadMeetingReqCount' , messages.length]); + }) + } + } + } +} diff --git a/mixins/unreadNewsMessages.js b/mixins/unreadNewsMessages.js new file mode 100644 index 0000000..6bffd7d --- /dev/null +++ b/mixins/unreadNewsMessages.js @@ -0,0 +1,16 @@ +export default{ + mounted(){ + this.checkNewsMessage(); + }, + methods : { + checkNewsMessage() { + if(this.$auth.loggedIn){ + this.$axios.get('/api/admin/comment/countAll/News').then((res) => { + const messages = res.data.filter((item) => !item.read); + + this.$store.commit('admin/set' , ['unreadNewsMessagesCount' , messages.length]); + }) + } + } + } +} diff --git a/nuxt.config.js b/nuxt.config.js new file mode 100644 index 0000000..20842c6 --- /dev/null +++ b/nuxt.config.js @@ -0,0 +1,183 @@ +const webpack = require("webpack"); + +const serverPort = 3756; + +export default { + + // Global page headers: https://go.nuxtjs.dev/config-head + head: { + title: "پورتال خبری استانداری", + htmlAttrs: { + lang: "fa", + }, + meta: [ + { charset: "utf-8" }, + { + name: "viewport", + content: "width=device-width, initial-scale=1", + }, + { name: "theme-color", content: "#000" }, + { + hid: "description", + name: "description", + content: "استانداری مرکزی", + }, + ], + link: [ + { + rel: "icon", + type: "image/x-icon", + href: "/favicon.png", + }, + { + rel: "stylesheet", + type: "text/css", + href: "/js/lightBox/simple-lightbox.min.css", + }, + { + rel: "stylesheet", + type: "text/css", + href: "/js/flipBook/flipbook.style.css", + }, + { + rel: "stylesheet", + type: "text/css", + href: "/js/flipBook/font-awesome.css", + }, + { rel: 'stylesheet', + href: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js' } + ], + + + script: [ + { src: "https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.js" }, + { src: "https://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js" }, + { src: "/js/flipBook/flipbook.min.js" }, + { src: "/js/lightBox/simple-lightbox.min.js" }, + { src: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js', defer: true }, + { src: 'https://cdnjs.cloudflare.com/ajax/libs/jquery-flipbook/1.0.5/jquery.flipbook.min.js', defer: true } + ], + }, + loading: "~/components/pageLoad.vue", + // Global CSS: https://go.nuxtjs.dev/config-css + css: [ + "element-ui/lib/theme-chalk/index.css", + "~/assets/css/bootstrap-grid.css", + "~/assets/css/reset-css.css", + "~/assets/css/fontawesome/css/all.min.css", + "~/assets/scss/main.scss", + ], + + + // Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins + plugins: [ + "@/plugins/element-ui", + "@/plugins/gsap.client", + "@/plugins/core-ui.client", + "@/plugins/ckEditor.client", + "@/plugins/datePicker.client", + { src: "@/plugins/jquery.js", mode: "client" }, + { + src: "@/plugins/vue-turnjs.client", // Added vue-turnjs plugin + + mode: "client", + }, + ], + + // Auto import components: https://go.nuxtjs.dev/config-components + components: [ + "~/components/", + { path: "~/components/admin/", prefix: "" }, + ], + // Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules + buildModules: [], + + // Modules: https://go.nuxtjs.dev/config-modules + modules: [ + // https://go.nuxtjs.dev/axios + "@nuxtjs/axios", + "@nuxtjs/auth-next", + "vue-social-sharing/nuxt", + ], + + // Axios module configuration: https://go.nuxtjs.dev/config-axios + axios: { + proxy: true, + }, + proxy: { + "/api": { target: `http://0.0.0.0:${serverPort}` }, + }, + serverMiddleware: ["~/server/index.js"], + server: { + host: "0.0.0.0", + port: 3000, + }, + router: { + middleware: ["redirects"], + }, + // Build Configuration: https://go.nuxtjs.dev/config-build + build: { + transpile: [/^element-ui/], + plugins: [ + new webpack.ProvidePlugin({ + $: "jquery", + jQuery: "jquery", + "window.jQuery": "jquery", + }), + new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), + ], + splitChunks: { + layouts: true, + }, + }, + auth: { + strategies: { + local: { + token: { + property: "token", + required: true, + type: "", + }, + user: { + property: "user", + autoFetch: true, + }, + endpoints: { + login: { url: "/api/auth/login", method: "post" }, + logout: { + url: "/api/auth/logout", + method: "delete", + }, + user: { url: "/api/auth/user", method: "get" }, + }, + }, + vote: { + scheme: "local", + token: { + property: "token", + required: true, + type: "", + }, + user: { + property: "user", + autoFetch: true, + }, + endpoints: { + login: { + url: "/api/auth/voter/login", + method: "post", + }, + user: { + url: "/api/auth/voter/user", + method: "get", + }, + logout: false, + }, + tokenRequired: true, + tokenType: "", + globalToken: true, + }, + }, + redirect: false, + }, +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..049297a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,22049 @@ +{ + "name": "ostandari-portal", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ostandari-portal", + "version": "1.0.0", + "dependencies": { + "@coreui/coreui": "^3.2.2", + "@coreui/icons": "^2.0.0-beta.5", + "@coreui/utils": "^1.3.1", + "@coreui/vue": "^3.1.2", + "@coreui/vue-chartjs": "^1.0.5", + "@fingerprintjs/fingerprintjs": "^3.2.0", + "@ilovepdf/ilovepdf-nodejs": "^0.3.0", + "@nuxt/image": "^1.7.0", + "@nuxtjs/auth": "^4.9.1", + "@nuxtjs/auth-next": "5.0.0-1618898588.9655d0e", + "@nuxtjs/axios": "^5.13.1", + "archiver": "^5.3.0", + "axios": "^0.21.1", + "bcryptjs": "^2.4.3", + "ckeditor4-vue": "^1.3.0", + "convertapi": "^1.14.0", + "core-js": "^3.9.1", + "cors": "^2.8.5", + "element-ui": "^2.15.1", + "express": "^4.17.1", + "express-fileupload": "^1.2.1", + "express-validator": "^6.10.1", + "gsap": "^3.6.1", + "jquery": "^3.7.1", + "jsonwebtoken": "^8.5.1", + "lodash": "^4.17.21", + "lodash-contrib": "^4.1200.1", + "moment-jalaali": "^0.9.2", + "mongoose": "^5.12.5", + "mongoose-paginate-v2": "^1.3.18", + "nodemailer": "^6.6.0", + "nodemon": "^3.1.2", + "nuxt": "^2.15.3", + "nuxt-video-player": "^1.0.17", + "request-ip": "^2.1.3", + "sharp": "^0.28.1", + "slick-carousel": "^1.8.1", + "svg-captcha": "^1.4.0", + "swagger-jsdoc": "^6.2.8", + "swagger-ui-express": "^5.0.0", + "turn.js": "^1.0.5", + "uuid": "^8.3.2", + "vue-persian-datetime-picker": "^2.6.1", + "vue-slick-carousel": "^1.0.6", + "vue-social-sharing": "^3.0.8", + "vue-tree-chart": "^1.2.9", + "vue-turnjs": "^1.3.2" + }, + "devDependencies": { + "sass": "^1.77.3", + "sass-loader": "^10.1.0", + "webpack": "^4.46.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.2.tgz", + "integrity": "sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==", + "license": "MIT", + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.6", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" + } + }, + "node_modules/@apidevtools/openapi-schemas": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz", + "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@apidevtools/swagger-methods": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz", + "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==", + "license": "MIT" + }, + "node_modules/@apidevtools/swagger-parser": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-10.0.3.tgz", + "integrity": "sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g==", + "license": "MIT", + "dependencies": { + "@apidevtools/json-schema-ref-parser": "^9.0.6", + "@apidevtools/openapi-schemas": "^2.0.4", + "@apidevtools/swagger-methods": "^3.0.2", + "@jsdevtools/ono": "^7.1.3", + "call-me-maybe": "^1.0.1", + "z-schema": "^5.0.1" + }, + "peerDependencies": { + "openapi-types": ">=7" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", + "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.25.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz", + "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.8.tgz", + "integrity": "sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helpers": "^7.25.7", + "@babel/parser": "^7.25.8", + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.8", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", + "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", + "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz", + "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", + "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz", + "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/traverse": "^7.25.7", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz", + "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.7", + "regexpu-core": "^6.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz", + "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", + "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", + "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz", + "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", + "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz", + "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-wrap-function": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz", + "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", + "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz", + "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", + "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", + "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", + "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz", + "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", + "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", + "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz", + "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz", + "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz", + "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz", + "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz", + "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/plugin-transform-optional-chaining": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz", + "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.7.tgz", + "integrity": "sha512-q1mqqqH0e1lhmsEQHV5U8OmdueBC2y0RFr2oUzZoFRtN3MvPmt2fsFRcNQAoGLTSNdHBFUYGnlgcRFhkBbKjPw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/plugin-syntax-decorators": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.7.tgz", + "integrity": "sha512-oXduHo642ZhstLVYTe2z2GSJIruU0c/W3/Ghr6A5yGMsVrvdnxO1z+3pbTcT7f3/Clnt+1z8D/w1r1f1SHaCHw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz", + "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz", + "integrity": "sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz", + "integrity": "sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz", + "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.8.tgz", + "integrity": "sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz", + "integrity": "sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz", + "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz", + "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz", + "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz", + "integrity": "sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz", + "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/traverse": "^7.25.7", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz", + "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/template": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz", + "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz", + "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz", + "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz", + "integrity": "sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz", + "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==", + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz", + "integrity": "sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz", + "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz", + "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz", + "integrity": "sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz", + "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz", + "integrity": "sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz", + "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz", + "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz", + "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz", + "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz", + "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz", + "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz", + "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz", + "integrity": "sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz", + "integrity": "sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/plugin-transform-parameters": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz", + "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz", + "integrity": "sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz", + "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz", + "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz", + "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz", + "integrity": "sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz", + "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz", + "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz", + "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.7.tgz", + "integrity": "sha512-Y9p487tyTzB0yDYQOtWnC+9HGOuogtP3/wNpun1xJXEEvI6vip59BSBTsHnekZLqxmPcgsrAKt46HAAb//xGhg==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz", + "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz", + "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz", + "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz", + "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz", + "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz", + "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz", + "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz", + "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz", + "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.8.tgz", + "integrity": "sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.8", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.25.7", + "@babel/plugin-syntax-import-attributes": "^7.25.7", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.8", + "@babel/plugin-transform-async-to-generator": "^7.25.7", + "@babel/plugin-transform-block-scoped-functions": "^7.25.7", + "@babel/plugin-transform-block-scoping": "^7.25.7", + "@babel/plugin-transform-class-properties": "^7.25.7", + "@babel/plugin-transform-class-static-block": "^7.25.8", + "@babel/plugin-transform-classes": "^7.25.7", + "@babel/plugin-transform-computed-properties": "^7.25.7", + "@babel/plugin-transform-destructuring": "^7.25.7", + "@babel/plugin-transform-dotall-regex": "^7.25.7", + "@babel/plugin-transform-duplicate-keys": "^7.25.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-dynamic-import": "^7.25.8", + "@babel/plugin-transform-exponentiation-operator": "^7.25.7", + "@babel/plugin-transform-export-namespace-from": "^7.25.8", + "@babel/plugin-transform-for-of": "^7.25.7", + "@babel/plugin-transform-function-name": "^7.25.7", + "@babel/plugin-transform-json-strings": "^7.25.8", + "@babel/plugin-transform-literals": "^7.25.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.8", + "@babel/plugin-transform-member-expression-literals": "^7.25.7", + "@babel/plugin-transform-modules-amd": "^7.25.7", + "@babel/plugin-transform-modules-commonjs": "^7.25.7", + "@babel/plugin-transform-modules-systemjs": "^7.25.7", + "@babel/plugin-transform-modules-umd": "^7.25.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-new-target": "^7.25.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.8", + "@babel/plugin-transform-numeric-separator": "^7.25.8", + "@babel/plugin-transform-object-rest-spread": "^7.25.8", + "@babel/plugin-transform-object-super": "^7.25.7", + "@babel/plugin-transform-optional-catch-binding": "^7.25.8", + "@babel/plugin-transform-optional-chaining": "^7.25.8", + "@babel/plugin-transform-parameters": "^7.25.7", + "@babel/plugin-transform-private-methods": "^7.25.7", + "@babel/plugin-transform-private-property-in-object": "^7.25.8", + "@babel/plugin-transform-property-literals": "^7.25.7", + "@babel/plugin-transform-regenerator": "^7.25.7", + "@babel/plugin-transform-reserved-words": "^7.25.7", + "@babel/plugin-transform-shorthand-properties": "^7.25.7", + "@babel/plugin-transform-spread": "^7.25.7", + "@babel/plugin-transform-sticky-regex": "^7.25.7", + "@babel/plugin-transform-template-literals": "^7.25.7", + "@babel/plugin-transform-typeof-symbol": "^7.25.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.7", + "@babel/plugin-transform-unicode-property-regex": "^7.25.7", + "@babel/plugin-transform-unicode-regex": "^7.25.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.38.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/standalone": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.25.8.tgz", + "integrity": "sha512-UvRanvLCGPRscJ5Rw9o6vUBS5P+E+gkhl6eaokrIN+WM1kUkmj254VZhyihFdDZVDlI3cPcZoakbJJw24QPISw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", + "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", + "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/@babel/types": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", + "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@coreui/coreui": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@coreui/coreui/-/coreui-3.4.0.tgz", + "integrity": "sha512-WqzockdWVkXUNmNwlqdu+AxM+9JoiWGe4rKaySu/dZme1NvVOn2ukjJlpTkssal8UKcSHyitzNixtkMCmUxE1A==", + "license": "MIT", + "engines": { + "node": ">= 10", + "npm": ">= 5" + }, + "peerDependencies": { + "@popperjs/core": "^2.5.4", + "perfect-scrollbar": "^1.5.0" + } + }, + "node_modules/@coreui/coreui-chartjs": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@coreui/coreui-chartjs/-/coreui-chartjs-2.0.0-beta.0.tgz", + "integrity": "sha512-Svua1A5YQNPbxcTMN/1TLiie/HJvT+iJ8VB3zPcy/c+ihJvFlIf7D0I5JcRL6LvQkZydq2xQiZ9/73Q+Z5BV6Q==", + "license": "MIT", + "dependencies": { + "@coreui/coreui": "^3.0.0-beta.1", + "chart.js": "^2.8.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@coreui/icons": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@coreui/icons/-/icons-2.1.0.tgz", + "integrity": "sha512-3yY9J0088TSY403jwJeP5YERH3RLOvxdhOa4VIQsGOX4fuQZiyVUM+vwlzyCSpgAv9NwKPkCor+gc+JJaYf0TA==", + "license": "MIT" + }, + "node_modules/@coreui/icons-vue": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@coreui/icons-vue/-/icons-vue-1.3.5.tgz", + "integrity": "sha512-GgvtUzyla/kfshaGVhqOxwWOHOCOmtACGD6SXilzw2Puz9LAX6Q9YCn20C1NIkCt8qtJ09jHyyucIZ9Eu+jv0A==", + "license": "MIT", + "dependencies": { + "vue": "~2.6.11" + } + }, + "node_modules/@coreui/icons-vue/node_modules/vue": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz", + "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==", + "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.", + "license": "MIT" + }, + "node_modules/@coreui/utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@coreui/utils/-/utils-1.3.1.tgz", + "integrity": "sha512-WuWHX7bg89cJH34TWVsLe9RsxzBhTApj+X2Ja19xhjcpxt5Gv11Ozm+fwYt6DD7DgncTvpwYrMcnNlpp701UOg==", + "license": "MIT", + "engines": { + "node": ">=8.9.0", + "npm": ">= 5.6.0" + } + }, + "node_modules/@coreui/vue": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/@coreui/vue/-/vue-3.2.12.tgz", + "integrity": "sha512-n1E19EXZFyJBveT77+nSaXMKwTSf0UQ62diM/H7YGw6+w0fdii7Z4OalrnNir2ZKjPmOxdAnpoElcOAtf6KqnQ==", + "license": "MIT", + "dependencies": { + "@coreui/icons": "^2.0.1", + "@coreui/icons-vue": "^1.3.5", + "@coreui/utils": "^1.3.1", + "@popperjs/core": "^2.9.2", + "lodash.clonedeep": "~4.5.0", + "perfect-scrollbar": "~1.5.1", + "tooltip.js": "~1.3.3", + "vue": "^2.6.12", + "vue-functional-data-merge": "~3.1.0" + }, + "engines": { + "node": ">= 12", + "npm": ">= 6" + } + }, + "node_modules/@coreui/vue-chartjs": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@coreui/vue-chartjs/-/vue-chartjs-1.0.6.tgz", + "integrity": "sha512-x116yRGqBfxBxFFMhJXsY2MDbIBJWajSA24j2w4zyrShjshES2G6iBxi9zSbug0H+3ariYY+fyhv/0uFJ4G/Yg==", + "license": "MIT", + "dependencies": { + "@coreui/coreui-chartjs": "2.0.0-beta.0", + "chart.js": "^2.9.3", + "vue": "^2.6.12" + } + }, + "node_modules/@csstools/cascade-layer-name-parser": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.13.tgz", + "integrity": "sha512-MX0yLTwtZzr82sQ0zOjqimpZbzjMaK/h2pmlrLK7DCzlmiZLYFpoO94WmN1akRVo6ll/TdpHb53vihHLUMyvng==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.2.1.tgz", + "integrity": "sha512-CEypeeykO9AN7JWkr1OEOQb0HRzZlPWGwV0Ya6DuVgFdDi6g3ma/cPZ5ZPZM4AWQikDpq/0llnGGlIL+j8afzw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.4.tgz", + "integrity": "sha512-tfOuvUQeo7Hz+FcuOd3LfXVp+342pnWUJ7D2y8NUpu1Ww6xnTbHLpz018/y6rtbHifJ3iIEf9ttxXd8KG7nL0Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-2.0.5.tgz", + "integrity": "sha512-lRZSmtl+DSjok3u9hTWpmkxFZnz7stkbZxzKc08aDUsdrWwhSgWo8yq9rq9DaFUtbAyAq2xnH92fj01S+pwIww==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^4.2.1", + "@csstools/css-calc": "^1.2.4" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", + "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^2.4.1" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", + "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", + "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" + } + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.6.tgz", + "integrity": "sha512-Xt00qGAQyqAODFiFEJNkTpSUz5VfYqnDLECdlA/Vv17nl/OIV5QfTRHGAXrBGG5YcJyHpJ+GF9gF/RZvOQz4oA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^3.1.1", + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "3.0.19", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.19.tgz", + "integrity": "sha512-d1OHEXyYGe21G3q88LezWWx31ImEDdmINNDy0LyLNN9ChgN2bPxoubUPiHf9KmwypBMaHmNcMuA/WZOKdZk/Lg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-mix-function": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.19.tgz", + "integrity": "sha512-mLvQlMX+keRYr16AuvuV8WYKUwF+D0DiCqlBdvhQ0KYEtcQl9/is9Ssg7RcIys8x0jIn2h1zstS4izckdZj9wg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-content-alt-text": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-1.0.0.tgz", + "integrity": "sha512-SkHdj7EMM/57GVvSxSELpUg7zb5eAndBeuvGwFzYtU06/QXJ/h9fuK7wO5suteJzGhm3GDF/EWPCdWV2h1IGHQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-exponential-functions": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.9.tgz", + "integrity": "sha512-x1Avr15mMeuX7Z5RJUl7DmjhUtg+Amn5DZRD0fQ2TlTFTcJS8U1oxXQ9e5mA62S2RJgUU6db20CRoJyDvae2EQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^1.2.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-3.0.2.tgz", + "integrity": "sha512-E0xz2sjm4AMCkXLCFvI/lyl4XO6aN1NCSMMVEOngFDJ+k2rDwfr6NDjWljk1li42jiLNChVX+YFnmfGCigZKXw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gamut-mapping": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.11.tgz", + "integrity": "sha512-KrHGsUPXRYxboXmJ9wiU/RzDM7y/5uIefLWKFSc36Pok7fxiPyvkSHO51kh+RLZS1W5hbqw9qaa6+tKpTSxa5g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gradients-interpolation-method": { + "version": "4.0.20", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.20.tgz", + "integrity": "sha512-ZFl2JBHano6R20KB5ZrB8KdPM2pVK0u+/3cGQ2T8VubJq982I2LSOvQ4/VtxkAXjkPkk1rXt4AD1ni7UjTZ1Og==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.18.tgz", + "integrity": "sha512-3ifnLltR5C7zrJ+g18caxkvSRnu9jBBXCYgnBznRjxm6gQJGnnCO9H6toHfywNdNr/qkiVf2dymERPQLDnjLRQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.7.tgz", + "integrity": "sha512-YoaNHH2wNZD+c+rHV02l4xQuDpfR8MaL7hD45iJyr+USwvr0LOheeytJ6rq8FN6hXBmEeoJBeXXgGmM8fkhH4g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^3.3.0", + "@csstools/utilities": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-1.0.1.tgz", + "integrity": "sha512-wtb+IbUIrIf8CrN6MLQuFR7nlU5C7PwuebfeEXfjthUha1+XZj2RVi+5k/lukToA24sZkYAiSJfHM8uG/UZIdg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.8.tgz", + "integrity": "sha512-0aj591yGlq5Qac+plaWCbn5cpjs5Sh0daovYUKJUOMjIp70prGH/XPLp7QjxtbFXz3CTvb0H9a35dpEuIuUi3Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^3.1.1", + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-light-dark-function": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.8.tgz", + "integrity": "sha512-x0UtpCyVnERsplUeoaY6nEtp1HxTf4lJjoK/ULEm40DraqFfUdUSt76yoOyX5rGY6eeOUOkurHyYlFHVKv/pew==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-float-and-clear": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-2.0.1.tgz", + "integrity": "sha512-SsrWUNaXKr+e/Uo4R/uIsqJYt3DaggIh/jyZdhy/q8fECoJSKsSMr7nObSLdvoULB69Zb6Bs+sefEIoMG/YfOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overflow": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-1.0.1.tgz", + "integrity": "sha512-Kl4lAbMg0iyztEzDhZuQw8Sj9r2uqFDcU1IPl+AAt2nue8K/f1i7ElvKtXkjhIAmKiy5h2EY8Gt/Cqg0pYFDCw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overscroll-behavior": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-1.0.1.tgz", + "integrity": "sha512-+kHamNxAnX8ojPCtV8WPcUP3XcqMFBSDuBuvT6MHgq7oX4IQxLIXKx64t7g9LiuJzE7vd06Q9qUYR6bh4YnGpQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-resize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-2.0.1.tgz", + "integrity": "sha512-W5Gtwz7oIuFcKa5SmBjQ2uxr8ZoL7M2bkoIf0T1WeNqljMkBrfw1DDA8/J83k57NQ1kcweJEjkJ04pUkmyee3A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-viewport-units": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.11.tgz", + "integrity": "sha512-ElITMOGcjQtvouxjd90WmJRIw1J7KMP+M+O87HaVtlgOOlDt1uEPeTeii8qKGe2AiedEp0XOGIo9lidbiU2Ogg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-minmax": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.8.tgz", + "integrity": "sha512-KYQCal2i7XPNtHAUxCECdrC7tuxIWQCW+s8eMYs5r5PaAiVTeKwlrkRS096PFgojdNCmHeG0Cb7njtuNswNf+w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^1.2.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/media-query-list-parser": "^2.1.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.11.tgz", + "integrity": "sha512-YD6jrib20GRGQcnOu49VJjoAnQ/4249liuz7vTpy/JfgqQ1Dlc5eD4HPUMNLOw9CWey9E6Etxwf/xc/ZF8fECA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/media-query-list-parser": "^2.1.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-3.0.2.tgz", + "integrity": "sha512-ySUmPyawiHSmBW/VI44+IObcKH0v88LqFe0d09Sb3w4B1qjkaROc6d5IA3ll9kjD46IIX/dbO5bwFN/swyoyZA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-3.0.2.tgz", + "integrity": "sha512-fCapyyT/dUdyPtrelQSIV+d5HqtTgnNP/BEG9IuhgXHt93Wc4CfC1bQ55GzKAjWrZbgakMQ7MLfCXEf3rlZJOw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "3.0.19", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.19.tgz", + "integrity": "sha512-e3JxXmxjU3jpU7TzZrsNqSX4OHByRC3XjItV3Ieo/JEQmLg5rdOL4lkv/1vp27gXemzfNt44F42k/pn0FpE21Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.3.0.tgz", + "integrity": "sha512-W2oV01phnILaRGYPmGFlL2MT/OgYjQDrL9sFlbdikMFi6oQkFki9B86XqEWR7HCsTZFVq7dbzr/o71B75TKkGg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-relative-color-syntax": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.19.tgz", + "integrity": "sha512-MxUMSNvio1WwuS6WRLlQuv6nNPXwIWUFzBBAvL/tBdWfiKjiJnAa6eSSN5gtaacSqUkQ/Ce5Z1OzLRfeaWhADA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-scope-pseudo-class": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-3.0.1.tgz", + "integrity": "sha512-3ZFonK2gfgqg29gUJ2w7xVw2wFJ1eNWVDONjbzGkm73gJHVCYK5fnCqlLr+N+KbEfv2XbWAO0AaOJCFB6Fer6A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.10.tgz", + "integrity": "sha512-MZwo0D0TYrQhT5FQzMqfy/nGZ28D1iFtpN7Su1ck5BPHS95+/Y5O9S4kEvo76f2YOsqwYcT8ZGehSI1TnzuX2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^1.2.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.7.tgz", + "integrity": "sha512-+cptcsM5r45jntU6VjotnkC9GteFR7BQBfZ5oW7inLCxj7AfLGAzMbZ60hKTP13AULVZBdxky0P8um0IBfLHVA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/color-helpers": "^4.2.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.10.tgz", + "integrity": "sha512-G9G8moTc2wiad61nY5HfvxLiM/myX0aYK4s1x8MQlPH29WDPxHQM7ghGgvv2qf2xH+rrXhztOmjGHJj4jsEqXw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^1.2.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-3.0.1.tgz", + "integrity": "sha512-dbDnZ2ja2U8mbPP0Hvmt2RMEGBiF1H7oY6HYSpjteXJGihYwgxgTr6KRbbJ/V6c+4wd51M+9980qG4gKVn5ttg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/selector-resolve-nested": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-1.1.0.tgz", + "integrity": "sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", + "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/@csstools/utilities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-1.0.0.tgz", + "integrity": "sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.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==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@fastify/accept-negotiator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz", + "integrity": "sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@fingerprintjs/fingerprintjs": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@fingerprintjs/fingerprintjs/-/fingerprintjs-3.4.2.tgz", + "integrity": "sha512-3Ncze6JsJpB7BpYhqIgvBpfvEX1jsEKrad5hQBpyRQxtoAp6hx3+R46zqfsuQG4D9egQZ+xftQ0u4LPFMB7Wmg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.1" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "license": "MIT" + }, + "node_modules/@ilovepdf/ilovepdf-js-core": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@ilovepdf/ilovepdf-js-core/-/ilovepdf-js-core-0.3.1.tgz", + "integrity": "sha512-koaz/fd2K5DUZzQGJgwts2We1La36hz8ZZjDSgVH0K1SWol12PlL4RiX4zN8rw2eekKRZJEOEh6Cx3qBwyT6CQ==", + "license": "MIT", + "dependencies": { + "axios": "^1.7.2", + "form-data": "^3.0.0", + "jsonwebtoken": "^9.0.2" + } + }, + "node_modules/@ilovepdf/ilovepdf-js-core/node_modules/axios": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/@ilovepdf/ilovepdf-js-core/node_modules/axios/node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@ilovepdf/ilovepdf-js-core/node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/@ilovepdf/ilovepdf-js-core/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/@ilovepdf/ilovepdf-nodejs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@ilovepdf/ilovepdf-nodejs/-/ilovepdf-nodejs-0.3.0.tgz", + "integrity": "sha512-eIGDxt3WAVc5QS1s1Y5Ru4qeXxk2AEduDBLhPXybdgp5uFs0zJQ5myTmOqMcBficq6CiQmpJ9fMS2hQSMpBgDw==", + "license": "MIT", + "dependencies": { + "@ilovepdf/ilovepdf-js-core": "0.3.1" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "license": "MIT" + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", + "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz", + "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nuxt/babel-preset-app": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/@nuxt/babel-preset-app/-/babel-preset-app-2.18.1.tgz", + "integrity": "sha512-7AYAGVjykrvta7k+koMGbt6y6PTMwl74PX2i9Ubyc1VC9ewy9U/b6cW0gVJOR/ZJWPzaABAgVZC7N58PprUDfA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.24.7", + "@babel/core": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-decorators": "^7.24.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.21.0", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.21.11", + "@babel/plugin-transform-runtime": "^7.24.7", + "@babel/preset-env": "^7.24.7", + "@babel/runtime": "^7.24.7", + "@vue/babel-preset-jsx": "^1.4.0", + "core-js": "^3.37.1", + "core-js-compat": "^3.37.1", + "regenerator-runtime": "^0.14.1" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/builder": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/@nuxt/builder/-/builder-2.18.1.tgz", + "integrity": "sha512-hc4AUP3Nvov7jL0BEP7jFXt8zOfa6gt+y1kyoVvU1WHEVNcWnrGtRKvJuCwi1IwCVlx7Weh+luvHI4nzQwEeKg==", + "license": "MIT", + "dependencies": { + "@nuxt/devalue": "^2.0.2", + "@nuxt/utils": "2.18.1", + "@nuxt/vue-app": "2.18.1", + "@nuxt/webpack": "2.18.1", + "chalk": "^4.1.2", + "chokidar": "^3.6.0", + "consola": "^3.2.3", + "fs-extra": "^11.2.0", + "glob": "^8.1.0", + "hash-sum": "^2.0.0", + "ignore": "^5.3.1", + "lodash": "^4.17.21", + "pify": "^5.0.0", + "serialize-javascript": "^6.0.2", + "upath": "^2.0.1" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/builder/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@nuxt/builder/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@nuxt/builder/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@nuxt/builder/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@nuxt/builder/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nuxt/builder/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nuxt/builder/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nuxt/builder/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nuxt/cli": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/@nuxt/cli/-/cli-2.18.1.tgz", + "integrity": "sha512-ZOoDlE4Fw1Cum6oG8DVnb7B4ivovXySxdDI8vnIt49Ypx22pBGt5y2ErF7g+5TAxGMIHpyh7peJWJwYp88PqPA==", + "license": "MIT", + "dependencies": { + "@nuxt/config": "2.18.1", + "@nuxt/utils": "2.18.1", + "boxen": "^5.1.2", + "chalk": "^4.1.2", + "compression": "^1.7.4", + "connect": "^3.7.0", + "consola": "^3.2.3", + "crc": "^4.3.2", + "defu": "^6.1.4", + "destr": "^2.0.3", + "execa": "^5.1.1", + "exit": "^0.1.2", + "fs-extra": "^11.2.0", + "globby": "^11.0.4", + "hookable": "^4.4.1", + "lodash": "^4.17.21", + "minimist": "^1.2.8", + "opener": "1.5.2", + "pretty-bytes": "^5.6.0", + "semver": "^7.6.2", + "serve-static": "^1.15.0", + "std-env": "^3.7.0", + "upath": "^2.0.1", + "wrap-ansi": "^7.0.0" + }, + "bin": { + "nuxt-cli": "bin/nuxt-cli.js" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@nuxt/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@nuxt/cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@nuxt/cli/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@nuxt/cli/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nuxt/cli/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nuxt/cli/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nuxt/cli/node_modules/hookable": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-4.4.1.tgz", + "integrity": "sha512-KWjZM8C7IVT2qne5HTXjM6R6VnRfjfRlf/oCnHd+yFxoHO1DzOl6B9LzV/VqGQK/IrFewq+EG+ePVrE9Tpc3fg==", + "license": "MIT" + }, + "node_modules/@nuxt/cli/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@nuxt/cli/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@nuxt/cli/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nuxt/cli/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nuxt/cli/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/@nuxt/cli/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nuxt/cli/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@nuxt/cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nuxt/components": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@nuxt/components/-/components-2.2.1.tgz", + "integrity": "sha512-r1LHUzifvheTnJtYrMuA+apgsrEJbxcgFKIimeXKb+jl8TnPWdV3egmrxBCaDJchrtY/wmHyP47tunsft7AWwg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "glob": "^7.1.7", + "globby": "^11.0.4", + "scule": "^0.2.1", + "semver": "^7.3.5", + "upath": "^2.0.1", + "vue-template-compiler": "^2.6.14" + }, + "peerDependencies": { + "consola": "*" + } + }, + "node_modules/@nuxt/components/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@nuxt/components/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@nuxt/components/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@nuxt/components/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nuxt/components/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nuxt/components/node_modules/scule": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/scule/-/scule-0.2.1.tgz", + "integrity": "sha512-M9gnWtn3J0W+UhJOHmBxBTwv8mZCan5i1Himp60t6vvZcor0wr+IM0URKmIglsWJ7bRujNAVVN77fp+uZaWoKg==", + "license": "MIT" + }, + "node_modules/@nuxt/components/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nuxt/components/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nuxt/config": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/@nuxt/config/-/config-2.18.1.tgz", + "integrity": "sha512-CTsUMFtNCJ6+7AkgMRz53zM9vxmsMYVJWBQOnikVzwFxm/jsWzjyXkp3pQb5/fNZuqR7qXmpUKIRtrdeUeN4JQ==", + "license": "MIT", + "dependencies": { + "@nuxt/utils": "2.18.1", + "consola": "^3.2.3", + "defu": "^6.1.4", + "destr": "^2.0.3", + "dotenv": "^16.4.5", + "lodash": "^4.17.21", + "rc9": "^2.1.2", + "std-env": "^3.7.0", + "ufo": "^1.5.3" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/core": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/@nuxt/core/-/core-2.18.1.tgz", + "integrity": "sha512-BFnKVH7caEdDrK04qQ2U9F4Rf4hV/BqqXBJiIeHp7vM9CLKjTL5/yhiognDw3SBefmSJkpOATx1HJl3XM8c4fg==", + "license": "MIT", + "dependencies": { + "@nuxt/config": "2.18.1", + "@nuxt/server": "2.18.1", + "@nuxt/utils": "2.18.1", + "consola": "^3.2.3", + "fs-extra": "^11.2.0", + "hash-sum": "^2.0.0", + "hookable": "^4.4.1", + "lodash": "^4.17.21" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/core/node_modules/hookable": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-4.4.1.tgz", + "integrity": "sha512-KWjZM8C7IVT2qne5HTXjM6R6VnRfjfRlf/oCnHd+yFxoHO1DzOl6B9LzV/VqGQK/IrFewq+EG+ePVrE9Tpc3fg==", + "license": "MIT" + }, + "node_modules/@nuxt/devalue": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nuxt/devalue/-/devalue-2.0.2.tgz", + "integrity": "sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==", + "license": "MIT" + }, + "node_modules/@nuxt/friendly-errors-webpack-plugin": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@nuxt/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-2.6.0.tgz", + "integrity": "sha512-3IZj6MXbzlvUxDncAxgBMLQwGPY/JlNhy2i+AGyOHCAReR5HcBxYjVRBvyaKM9R3s5k4OODYKeHAbrToZH/47w==", + "license": "MIT", + "dependencies": { + "chalk": "^2.4.2", + "consola": "^3.2.3", + "error-stack-parser": "^2.1.4", + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=5.0.0" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@nuxt/generator": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/@nuxt/generator/-/generator-2.18.1.tgz", + "integrity": "sha512-kZMfB5Ymvd/5ek+xfk2svQiMJWEAjZf5XNFTG+2WiNsitHb01Bo3W2QGidy+dwfuLtHoiOJkMovRlyAKWxTohg==", + "license": "MIT", + "dependencies": { + "@nuxt/utils": "2.18.1", + "chalk": "^4.1.2", + "consola": "^3.2.3", + "defu": "^6.1.4", + "devalue": "^2.0.1", + "fs-extra": "^11.2.0", + "html-minifier-terser": "^7.2.0", + "node-html-parser": "^6.1.13", + "ufo": "^1.5.3" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/generator/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@nuxt/generator/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@nuxt/generator/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@nuxt/generator/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nuxt/generator/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nuxt/image": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@nuxt/image/-/image-1.8.1.tgz", + "integrity": "sha512-qNj7OCNsoGcutGOo1R2PYp4tQ/6uD77aSakyDoVAmLSRJBmhFTnT2+gIqVD95JMmkSHgYhmSX4gGxnaQK/t1cw==", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^3.13.2", + "consola": "^3.2.3", + "defu": "^6.1.4", + "h3": "^1.12.0", + "image-meta": "^0.2.1", + "node-fetch-native": "^1.6.4", + "ohash": "^1.1.4", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "ufo": "^1.5.4" + }, + "engines": { + "node": "^14.16.0 || >=16.11.0" + }, + "optionalDependencies": { + "ipx": "^2.1.0" + } + }, + "node_modules/@nuxt/kit": { + "version": "3.13.2", + "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.2.tgz", + "integrity": "sha512-KvRw21zU//wdz25IeE1E5m/aFSzhJloBRAQtv+evcFeZvuroIxpIQuUqhbzuwznaUwpiWbmwlcsp5uOWmi4vwA==", + "license": "MIT", + "dependencies": { + "@nuxt/schema": "3.13.2", + "c12": "^1.11.2", + "consola": "^3.2.3", + "defu": "^6.1.4", + "destr": "^2.0.3", + "globby": "^14.0.2", + "hash-sum": "^2.0.0", + "ignore": "^5.3.2", + "jiti": "^1.21.6", + "klona": "^2.0.6", + "knitwork": "^1.1.0", + "mlly": "^1.7.1", + "pathe": "^1.1.2", + "pkg-types": "^1.2.0", + "scule": "^1.3.0", + "semver": "^7.6.3", + "ufo": "^1.5.4", + "unctx": "^2.3.1", + "unimport": "^3.12.0", + "untyped": "^1.4.2" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/loading-screen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nuxt/loading-screen/-/loading-screen-2.0.4.tgz", + "integrity": "sha512-xpEDAoRu75tLUYCkUJCIvJkWJSuwr8pqomvQ+fkXpSrkxZ/9OzlBFjAbVdOAWTMj4aV/LVQso4vcEdircKeFIQ==", + "license": "MIT", + "dependencies": { + "connect": "^3.7.0", + "defu": "^5.0.0", + "get-port-please": "^2.2.0", + "node-res": "^5.0.1", + "serve-static": "^1.14.1" + } + }, + "node_modules/@nuxt/loading-screen/node_modules/defu": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/defu/-/defu-5.0.1.tgz", + "integrity": "sha512-EPS1carKg+dkEVy3qNTqIdp2qV7mUP08nIsupfwQpz++slCVRw7qbQyWvSTig+kFPwz2XXp5/kIIkH+CwrJKkQ==", + "license": "MIT" + }, + "node_modules/@nuxt/loading-screen/node_modules/get-port-please": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-2.6.1.tgz", + "integrity": "sha512-4PDSrL6+cuMM1xs6w36ZIkaKzzE0xzfVBCfebHIJ3FE8iB9oic/ECwPw3iNiD4h1AoJ5XLLBhEviFAVrZsDC5A==", + "license": "MIT", + "dependencies": { + "fs-memo": "^1.2.0" + } + }, + "node_modules/@nuxt/opencollective": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.4.0.tgz", + "integrity": "sha512-uUsxOcO2lFeotV+BGOwNLeau+U17mhpaCRhE7v8nJLdWJ2iErQXadl28HaHe6btuT8RD0LDSpvwCiKrHznDxUA==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "consola": "^3.2.3", + "node-fetch-native": "^1.4.1" + }, + "bin": { + "opencollective": "bin/opencollective.js" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/@nuxt/opencollective/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@nuxt/opencollective/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@nuxt/opencollective/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@nuxt/opencollective/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nuxt/opencollective/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nuxt/schema": { + "version": "3.13.2", + "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.13.2.tgz", + "integrity": "sha512-CCZgpm+MkqtOMDEgF9SWgGPBXlQ01hV/6+2reDEpJuqFPGzV8HYKPBcIFvn7/z5ahtgutHLzjP71Na+hYcqSpw==", + "license": "MIT", + "dependencies": { + "compatx": "^0.1.8", + "consola": "^3.2.3", + "defu": "^6.1.4", + "hookable": "^5.5.3", + "pathe": "^1.1.2", + "pkg-types": "^1.2.0", + "scule": "^1.3.0", + "std-env": "^3.7.0", + "ufo": "^1.5.4", + "uncrypto": "^0.1.3", + "unimport": "^3.12.0", + "untyped": "^1.4.2" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/server": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/@nuxt/server/-/server-2.18.1.tgz", + "integrity": "sha512-4GHmgi1NS6uCL+3QzlxmHmEoKkejQKTDrKPtA16w8iw/8EBgCrAkvXukcIMxF7Of+IYi1I/duVmCyferxo7jyw==", + "license": "MIT", + "dependencies": { + "@nuxt/utils": "2.18.1", + "@nuxt/vue-renderer": "2.18.1", + "@nuxtjs/youch": "^4.2.3", + "compression": "^1.7.4", + "connect": "^3.7.0", + "consola": "^3.2.3", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "^11.2.0", + "ip": "^2.0.1", + "launch-editor-middleware": "^2.8.0", + "on-headers": "^1.0.2", + "pify": "^5.0.0", + "serve-placeholder": "^2.0.2", + "serve-static": "^1.15.0", + "server-destroy": "^1.0.1", + "ufo": "^1.5.3" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/telemetry": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@nuxt/telemetry/-/telemetry-1.5.0.tgz", + "integrity": "sha512-MhxiiYCFe0MayN2TvmpcsCV66zBePtrSVkFLJHwTFuneQ5Qma5x0NmCwdov7O4NSuTfgSZels9qPJh0zy0Kc4g==", + "license": "MIT", + "dependencies": { + "arg": "^5.0.2", + "chalk": "^4.1.1", + "ci-info": "^3.7.1", + "consola": "^3.2.3", + "create-require": "^1.1.1", + "defu": "^6.1.3", + "destr": "^2.0.2", + "dotenv": "^9.0.2", + "fs-extra": "^8.1.0", + "git-url-parse": "^13.1.1", + "inquirer": "^7.3.3", + "jiti": "^1.21.0", + "nanoid": "^3.1.23", + "node-fetch": "^2.6.1", + "parse-git-config": "^3.0.0", + "rc9": "^2.1.1", + "std-env": "^3.5.0" + }, + "bin": { + "nuxt-telemetry": "bin/nuxt-telemetry.js" + } + }, + "node_modules/@nuxt/telemetry/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@nuxt/telemetry/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@nuxt/telemetry/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@nuxt/telemetry/node_modules/dotenv": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", + "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/@nuxt/telemetry/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@nuxt/telemetry/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nuxt/telemetry/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@nuxt/telemetry/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" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/@nuxt/telemetry/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nuxt/telemetry/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@nuxt/utils": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/@nuxt/utils/-/utils-2.18.1.tgz", + "integrity": "sha512-aWeB8VMhtymo5zXUiQaohCu8IqJqENF9iCag3wyJpdhpNDVoghGUJAl0F6mQvNTJgQzseFtf4XKqTfvcgVzyGg==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3", + "create-require": "^1.1.1", + "fs-extra": "^11.2.0", + "hash-sum": "^2.0.0", + "jiti": "^1.21.6", + "lodash": "^4.17.21", + "proper-lockfile": "^4.1.2", + "semver": "^7.6.2", + "serialize-javascript": "^6.0.2", + "signal-exit": "^4.1.0", + "ua-parser-js": "^1.0.38", + "ufo": "^1.5.3" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/vue-app": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/@nuxt/vue-app/-/vue-app-2.18.1.tgz", + "integrity": "sha512-yxkunoTv6EVa42xM7qES0N1DNMo4UbP/s89L7HjqngQ4KzVWyyzK0qqJ9u3Gu4CabXhHFSquu11gtn+dylKyTA==", + "license": "MIT", + "dependencies": { + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.3", + "unfetch": "^5.0.0", + "vue": "^2.7.16", + "vue-client-only": "^2.1.0", + "vue-meta": "^2.4.0", + "vue-no-ssr": "^1.1.1", + "vue-router": "^3.6.5", + "vue-template-compiler": "^2.7.16", + "vuex": "^3.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/vue-renderer": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/@nuxt/vue-renderer/-/vue-renderer-2.18.1.tgz", + "integrity": "sha512-Nl8/IbV+sTEWCczHKcjLbZrFO6y5fCcFxZwd6Opatcbr2z380abwpDf3a9UjnVW3wPEM+/xoy1/MBCLY3VmWcw==", + "license": "MIT", + "dependencies": { + "@nuxt/devalue": "^2.0.2", + "@nuxt/utils": "2.18.1", + "consola": "^3.2.3", + "defu": "^6.1.4", + "fs-extra": "^11.2.0", + "lodash": "^4.17.21", + "lru-cache": "^5.1.1", + "ufo": "^1.5.3", + "vue": "^2.7.16", + "vue-meta": "^2.4.0", + "vue-server-renderer": "^2.7.16" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/webpack": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/@nuxt/webpack/-/webpack-2.18.1.tgz", + "integrity": "sha512-6EqbIoheLAJ0E7dfQB5ftOKL4d74N98dFMY3q89QTaoS9VXBFB5D1MLd27WuyfhChmzuHRwHfjaBW8QFdhjwew==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.7", + "@nuxt/babel-preset-app": "2.18.1", + "@nuxt/friendly-errors-webpack-plugin": "^2.6.0", + "@nuxt/utils": "2.18.1", + "babel-loader": "^8.3.0", + "cache-loader": "^4.1.0", + "caniuse-lite": "^1.0.30001638", + "consola": "^3.2.3", + "css-loader": "^5.2.7", + "cssnano": "^7.0.3", + "eventsource-polyfill": "^0.9.6", + "extract-css-chunks-webpack-plugin": "^4.10.0", + "file-loader": "^6.2.0", + "glob": "^8.1.0", + "hard-source-webpack-plugin": "^0.13.1", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^4.5.1", + "lodash": "^4.17.21", + "memfs": "^4.9.3", + "mkdirp": "^0.5.6", + "optimize-css-assets-webpack-plugin": "^6.0.1", + "pify": "^5.0.0", + "pnp-webpack-plugin": "^1.7.0", + "postcss": "^8.4.38", + "postcss-import": "^15.1.0", + "postcss-import-resolver": "^2.0.0", + "postcss-loader": "^4.3.0", + "postcss-preset-env": "^9.5.14", + "postcss-url": "^10.1.3", + "semver": "^7.6.2", + "std-env": "^3.7.0", + "style-resources-loader": "^1.5.0", + "terser-webpack-plugin": "^4.2.3", + "thread-loader": "^3.0.4", + "time-fix-plugin": "^2.0.7", + "ufo": "^1.5.3", + "upath": "^2.0.1", + "url-loader": "^4.1.1", + "vue-loader": "^15.11.1", + "vue-style-loader": "^4.1.3", + "vue-template-compiler": "^2.7.16", + "watchpack": "^2.4.1", + "webpack": "^4.47.0", + "webpack-bundle-analyzer": "^4.10.2", + "webpack-dev-middleware": "^5.3.4", + "webpack-hot-middleware": "^2.26.1", + "webpack-node-externals": "^3.0.0", + "webpackbar": "^6.0.1" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/webpack/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@nuxt/webpack/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nuxt/webpack/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nuxtjs/auth": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@nuxtjs/auth/-/auth-4.9.1.tgz", + "integrity": "sha512-h5VZanq2+P47jq3t0EnsZv800cg/ufOPC6JqvcyeDFJM99p58jHSODAjDuePo3PrZxd8hovMk7zusU5lOHgjvQ==", + "license": "MIT", + "dependencies": { + "@nuxtjs/axios": "^5.9.5", + "body-parser": "^1.19.0", + "consola": "^2.11.3", + "cookie": "^0.4.0", + "is-https": "^1.0.0", + "js-cookie": "^2.2.1", + "lodash": "^4.17.15", + "nanoid": "^2.1.11" + } + }, + "node_modules/@nuxtjs/auth-next": { + "version": "5.0.0-1618898588.9655d0e", + "resolved": "https://registry.npmjs.org/@nuxtjs/auth-next/-/auth-next-5.0.0-1618898588.9655d0e.tgz", + "integrity": "sha512-0dfz5pgDUiDaDOP7/BlEkycJ5nERbq4ED9GAX+cz5TWhKPmS6LMfta0pWPFY4Buk3SjzBXcy+Qto+VY7ErxAPA==", + "license": "MIT", + "dependencies": { + "@nuxtjs/axios": "^5.13.0", + "axios": "^0.21.1", + "body-parser": "^1.19.0", + "consola": "^2.15.3", + "cookie": "^0.4.1", + "defu": "^3.2.2", + "hasha": "^5.2.2", + "jwt-decode": "^3.1.2", + "requrl": "^3.0.2" + }, + "peerDependencies": { + "vue": "*" + } + }, + "node_modules/@nuxtjs/auth-next/node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "license": "MIT" + }, + "node_modules/@nuxtjs/auth-next/node_modules/defu": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/defu/-/defu-3.2.2.tgz", + "integrity": "sha512-8UWj5lNv7HD+kB0e9w77Z7TdQlbUYDVWqITLHNqFIn6khrNHv5WQo38Dcm1f6HeNyZf0U7UbPf6WeZDSdCzGDQ==", + "license": "MIT" + }, + "node_modules/@nuxtjs/auth/node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "license": "MIT" + }, + "node_modules/@nuxtjs/axios": { + "version": "5.13.6", + "resolved": "https://registry.npmjs.org/@nuxtjs/axios/-/axios-5.13.6.tgz", + "integrity": "sha512-XS+pOE0xsDODs1zAIbo95A0LKlilvJi8YW0NoXYuq3/jjxGgWDxizZ6Yx0AIIjZOoGsXJOPc0/BcnSEUQ2mFBA==", + "license": "MIT", + "dependencies": { + "@nuxtjs/proxy": "^2.1.0", + "axios": "^0.21.1", + "axios-retry": "^3.1.9", + "consola": "^2.15.3", + "defu": "^5.0.0" + } + }, + "node_modules/@nuxtjs/axios/node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "license": "MIT" + }, + "node_modules/@nuxtjs/axios/node_modules/defu": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/defu/-/defu-5.0.1.tgz", + "integrity": "sha512-EPS1carKg+dkEVy3qNTqIdp2qV7mUP08nIsupfwQpz++slCVRw7qbQyWvSTig+kFPwz2XXp5/kIIkH+CwrJKkQ==", + "license": "MIT" + }, + "node_modules/@nuxtjs/proxy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@nuxtjs/proxy/-/proxy-2.1.0.tgz", + "integrity": "sha512-/qtoeqXgZ4Mg6LRg/gDUZQrFpOlOdHrol/vQYMnKu3aN3bP90UfOUB3QSDghUUK7OISAJ0xp8Ld78aHyCTcKCQ==", + "license": "MIT", + "dependencies": { + "http-proxy-middleware": "^1.0.6" + } + }, + "node_modules/@nuxtjs/youch": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@nuxtjs/youch/-/youch-4.2.3.tgz", + "integrity": "sha512-XiTWdadTwtmL/IGkNqbVe+dOlT+IMvcBu7TvKI7plWhVQeBCQ9iKhk3jgvVWFyiwL2yHJDlEwOM5v9oVES5Xmw==", + "license": "MIT", + "dependencies": { + "cookie": "^0.3.1", + "mustache": "^2.3.0", + "stack-trace": "0.0.10" + } + }, + "node_modules/@nuxtjs/youch/node_modules/cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz", + "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.4.1", + "@parcel/watcher-darwin-arm64": "2.4.1", + "@parcel/watcher-darwin-x64": "2.4.1", + "@parcel/watcher-freebsd-x64": "2.4.1", + "@parcel/watcher-linux-arm-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-musl": "2.4.1", + "@parcel/watcher-linux-x64-glibc": "2.4.1", + "@parcel/watcher-linux-x64-musl": "2.4.1", + "@parcel/watcher-win32-arm64": "2.4.1", + "@parcel/watcher-win32-ia32": "2.4.1", + "@parcel/watcher-win32-x64": "2.4.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz", + "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz", + "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz", + "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz", + "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz", + "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz", + "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz", + "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz", + "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz", + "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-wasm": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.4.1.tgz", + "integrity": "sha512-/ZR0RxqxU/xxDGzbzosMjh4W6NdYFMqq2nvo2b8SLi7rsl/4jkL8S5stIikorNkdR50oVDvqb/3JT05WM+CRRA==", + "bundleDependencies": [ + "napi-wasm" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "napi-wasm": "^1.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-wasm/node_modules/napi-wasm": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz", + "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz", + "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz", + "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.28", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", + "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "license": "MIT" + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.2.tgz", + "integrity": "sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/bson": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.5.tgz", + "integrity": "sha512-vVLwMUqhYJSQ/WKcE60eFqcyuWse5fGH+NMAXHuKrUAPoryq3ATxk5o4bgYNtg5aOM4APVg7Hnb3ASqUYG0PKg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" + }, + "node_modules/@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.15", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", + "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/@types/mongodb": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.20.tgz", + "integrity": "sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ==", + "license": "MIT", + "dependencies": { + "@types/bson": "*", + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.7.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.7.tgz", + "integrity": "sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/source-list-map": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.6.tgz", + "integrity": "sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==", + "license": "MIT" + }, + "node_modules/@types/tapable": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.12.tgz", + "integrity": "sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==", + "license": "MIT" + }, + "node_modules/@types/uglify-js": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.5.tgz", + "integrity": "sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==", + "license": "MIT", + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/@types/webpack": { + "version": "4.41.39", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.39.tgz", + "integrity": "sha512-otxUJvoi6FbBq/64gGH34eblpKLgdi+gf08GaAh8Bx6So0ZZic028Ev/SUxD22gbthMKCkeeiXEat1kHLDJfYg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + } + }, + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz", + "integrity": "sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==", + "license": "MIT" + }, + "node_modules/@vue/babel-plugin-transform-vue-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz", + "integrity": "sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-preset-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz", + "integrity": "sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==", + "license": "MIT", + "dependencies": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "@vue/babel-sugar-composition-api-inject-h": "^1.4.0", + "@vue/babel-sugar-composition-api-render-instance": "^1.4.0", + "@vue/babel-sugar-functional-vue": "^1.4.0", + "@vue/babel-sugar-inject-h": "^1.4.0", + "@vue/babel-sugar-v-model": "^1.4.0", + "@vue/babel-sugar-v-on": "^1.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0", + "vue": "*" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/babel-sugar-composition-api-inject-h": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz", + "integrity": "sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-composition-api-render-instance": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz", + "integrity": "sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-functional-vue": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz", + "integrity": "sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-inject-h": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz", + "integrity": "sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-model": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz", + "integrity": "sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-on": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz", + "integrity": "sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "camelcase": "^5.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz", + "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==", + "dependencies": { + "@babel/parser": "^7.23.5", + "postcss": "^8.4.14", + "source-map": "^0.6.1" + }, + "optionalDependencies": { + "prettier": "^1.18.2 || ^2.0.0" + } + }, + "node_modules/@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "license": "MIT", + "dependencies": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "optionalDependencies": { + "prettier": "^1.18.2 || ^2.0.0" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "license": "MIT" + }, + "node_modules/@vue/component-compiler-utils/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "license": "ISC" + }, + "node_modules/@vue/component-compiler-utils/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "license": "MIT", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "license": "ISC" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "license": "ISC" + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "license": "MIT", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "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==", + "license": "BSD-3-Clause" + }, + "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==", + "license": "Apache-2.0" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz", + "integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "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/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "license": "MIT", + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "license": "ISC" + }, + "node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "license": "MIT", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/are-we-there-yet/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/are-we-there-yet/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz", + "integrity": "sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "license": "MIT" + }, + "node_modules/assert": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", + "license": "MIT", + "dependencies": { + "object.assign": "^4.1.4", + "util": "^0.10.4" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "license": "MIT", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/async-each": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "optional": true + }, + "node_modules/async-validator": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz", + "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==", + "dependencies": { + "babel-runtime": "6.x" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "license": "(MIT OR Apache-2.0)", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/axios-retry": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.9.1.tgz", + "integrity": "sha512-8PJDLJv7qTTMMwdnbMvrLYuvB47M81wRtxQmEdV5w4rgbTXTt+vtPkXwajOfOdSyv/wZICJOC+/UhXH4aQ/R+w==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.15.4", + "is-retry-allowed": "^2.2.0" + } + }, + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==", + "license": "MIT" + }, + "node_modules/babel-loader": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.4.1.tgz", + "integrity": "sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==", + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.4", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "license": "MIT", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-runtime/node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/bare-events": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/bare-fs": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", + "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.0.0", + "bare-path": "^2.0.0", + "bare-stream": "^2.0.0" + } + }, + "node_modules/bare-os": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz", + "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/bare-path": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^2.1.0" + } + }, + "node_modules/bare-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.3.1.tgz", + "integrity": "sha512-Vm8kAeOcfzHPTH8sq0tHBnUqYrkXdroaBVVylqFT4cF5wnMfKEIxxy2jIGu2zKVNl9P8MAP9XBWwXJ9N2+jfEw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.20.0" + } + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "license": "MIT", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/bl/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/bl/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/bl/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/boxen/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/boxen/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/boxen/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "license": "MIT" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "license": "MIT", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", + "license": "MIT", + "dependencies": { + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "license": "ISC", + "dependencies": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/browserify-sign/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "license": "MIT", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", + "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" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bson": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", + "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "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==", + "license": "MIT" + }, + "node_modules/buffer-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz", + "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==", + "license": "MIT" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "license": "MIT" + }, + "node_modules/buffer/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "license": "MIT" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/c12": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/c12/-/c12-1.11.2.tgz", + "integrity": "sha512-oBs8a4uvSDO9dm8b7OCFW7+dgtVrwmwnrVXYzLm43ta7ep2jCn/0MhoUFygIWtxhyy6+/MG7/agvpY0U1Iemew==", + "license": "MIT", + "dependencies": { + "chokidar": "^3.6.0", + "confbox": "^0.1.7", + "defu": "^6.1.4", + "dotenv": "^16.4.5", + "giget": "^1.2.3", + "jiti": "^1.21.6", + "mlly": "^1.7.1", + "ohash": "^1.1.3", + "pathe": "^1.1.2", + "perfect-debounce": "^1.0.0", + "pkg-types": "^1.2.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.4" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "license": "MIT", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz", + "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", + "license": "MIT", + "dependencies": { + "buffer-json": "^2.0.0", + "find-cache-dir": "^3.0.0", + "loader-utils": "^1.2.3", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "schema-utils": "^2.0.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/cache-loader/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/cache-loader/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "license": "MIT" + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001669", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz", + "integrity": "sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==", + "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" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "license": "MIT" + }, + "node_modules/chart.js": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", + "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==", + "license": "MIT", + "dependencies": { + "chartjs-color": "^2.1.0", + "moment": "^2.10.2" + } + }, + "node_modules/chartjs-color": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz", + "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", + "license": "MIT", + "dependencies": { + "chartjs-color-string": "^0.6.0", + "color-convert": "^1.9.3" + } + }, + "node_modules/chartjs-color-string": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", + "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "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/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/ckeditor4-integrations-common": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ckeditor4-integrations-common/-/ckeditor4-integrations-common-1.0.0.tgz", + "integrity": "sha512-OAoQT/gYrHkg0qgzf6MS/rndYhq3SScLVQ3rtXQeuCE8ju7nFHg3qZ7WGA2XpFxcZzsMP6hhugXqdel5vbcC3g==", + "license": "(GPL-2.0-or-later OR LGPL-2.1-or-later OR MPL-1.1-or-later)" + }, + "node_modules/ckeditor4-vue": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ckeditor4-vue/-/ckeditor4-vue-1.5.1.tgz", + "integrity": "sha512-2/Ot/MgVyTiXKMAPcxgghb1BodfqiAzNzMUGOB2dyOrFLCmIODbgrnfs+lutExQjBToXSzSJ0Ii3yCcKFpW92Q==", + "license": "(GPL-2.0-or-later OR LGPL-2.1-or-later OR MPL-1.1-or-later)", + "dependencies": { + "ckeditor4-integrations-common": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.7.1" + }, + "peerDependencies": { + "vue": "^2.5.17" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/clipboardy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-4.0.0.tgz", + "integrity": "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==", + "license": "MIT", + "optional": true, + "dependencies": { + "execa": "^8.0.1", + "is-wsl": "^3.1.0", + "is64bit": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "license": "MIT", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-convert/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "license": "MIT" + }, + "node_modules/compatx": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/compatx/-/compatx-0.1.8.tgz", + "integrity": "sha512-jcbsEAR81Bt5s1qOFymBufmCbXCXbk0Ql+K5ouj6gCyx2yHlu6AgmGIi9HxfKixpUDO5bCFJUHQ5uM6ecbTebw==", + "license": "MIT" + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/consola": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "license": "ISC" + }, + "node_modules/consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "deprecated": "Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog", + "license": "MIT", + "dependencies": { + "bluebird": "^3.1.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/convertapi": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/convertapi/-/convertapi-1.15.0.tgz", + "integrity": "sha512-wu1pJ27SuIc/mNlbjs8lP1hAsEN16AmKzMZNo9Qx/Z3CrH1ozGQYF2jGXaceXWSRNvKFoCuF0m5ek+vz8Nswrw==", + "license": "MIT", + "dependencies": { + "axios": "^1.6.2" + } + }, + "node_modules/convertapi/node_modules/axios": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/convertapi/node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "license": "MIT" + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "node_modules/copy-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", + "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cosmiconfig/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/crc": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/crc/-/crc-4.3.2.tgz", + "integrity": "sha512-uGDHf4KLLh2zsHa8D8hIQ1H/HtFQhyHrc0uhHBcoKGol/Xnb+MPYfUMw7cvON6ze/GUESTudKayDcJC5HnJv1A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "buffer": ">=6.0.3" + }, + "peerDependenciesMeta": { + "buffer": { + "optional": true + } + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "license": "MIT" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crossws": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.1.tgz", + "integrity": "sha512-HsZgeVYaG+b5zA+9PbIPGq4+J/CJynJuearykPsXx4V/eMhyQ5EDVg3Ak2FBZtVXCiOLu/U7IiwDHTr9MA+IKw==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "license": "MIT", + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/css-blank-pseudo": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-6.0.2.tgz", + "integrity": "sha512-J/6m+lsqpKPqWHOifAFtKFeGLOzw3jR92rxQcwRUfA/eTuZzKfKlxOmYDx2+tqOPQAueNvBiY8WhAeHu5qNmTg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", + "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", + "license": "ISC", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.5.tgz", + "integrity": "sha512-ZTv6RlvJJZKp32jPYnAJVhowDCrRrHUTAxsYSuUPBEDJjzws6neMnzkRblxtgmv1RgcV5dhH2gn7E3wA9Wt6lw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^3.1.1", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/css-loader/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==", + "license": "MIT", + "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/css-prefers-color-scheme": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-9.0.1.tgz", + "integrity": "sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssdb": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.1.2.tgz", + "integrity": "sha512-ba3HmHU/lxy9nfz/fQLA/Ul+/oSdSOXqoR53BDmRvXTfRbkGqHKqr2rSxADYMRF4uD8vZhMlCQ6c5TEfLLkkVA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ], + "license": "MIT-0" + }, + "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==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", + "license": "MIT", + "optional": true + }, + "node_modules/cssnano": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.6.tgz", + "integrity": "sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^7.0.6", + "lilconfig": "^3.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-preset-default": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.6.tgz", + "integrity": "sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.0", + "postcss-calc": "^10.0.2", + "postcss-colormin": "^7.0.2", + "postcss-convert-values": "^7.0.4", + "postcss-discard-comments": "^7.0.3", + "postcss-discard-duplicates": "^7.0.1", + "postcss-discard-empty": "^7.0.0", + "postcss-discard-overridden": "^7.0.0", + "postcss-merge-longhand": "^7.0.4", + "postcss-merge-rules": "^7.0.4", + "postcss-minify-font-values": "^7.0.0", + "postcss-minify-gradients": "^7.0.0", + "postcss-minify-params": "^7.0.2", + "postcss-minify-selectors": "^7.0.4", + "postcss-normalize-charset": "^7.0.0", + "postcss-normalize-display-values": "^7.0.0", + "postcss-normalize-positions": "^7.0.0", + "postcss-normalize-repeat-style": "^7.0.0", + "postcss-normalize-string": "^7.0.0", + "postcss-normalize-timing-functions": "^7.0.0", + "postcss-normalize-unicode": "^7.0.2", + "postcss-normalize-url": "^7.0.0", + "postcss-normalize-whitespace": "^7.0.0", + "postcss-ordered-values": "^7.0.1", + "postcss-reduce-initial": "^7.0.2", + "postcss-reduce-transforms": "^7.0.0", + "postcss-svgo": "^7.0.1", + "postcss-unique-selectors": "^7.0.3" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-utils": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", + "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "license": "MIT" + }, + "node_modules/cyclist": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", + "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", + "license": "MIT" + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "license": "MIT" + }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "license": "MIT", + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT" + }, + "node_modules/denque": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz", + "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==", + "license": "MIT" + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/devalue": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-2.0.1.tgz", + "integrity": "sha512-I2TiqT5iWBEyB8GRfTDP0hiLZ0YeDJZ+upDxjBfOC2lebO5LezQMv7QvIUTzdb64jQyAKLf1AHADtGN+jw6v8Q==", + "license": "MIT" + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "license": "MIT" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "license": "MIT", + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/duplexify/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/duplexify/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexify/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/duplexify/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.41", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.41.tgz", + "integrity": "sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ==", + "license": "ISC" + }, + "node_modules/element-ui": { + "version": "2.15.14", + "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.15.14.tgz", + "integrity": "sha512-2v9fHL0ZGINotOlRIAJD5YuVB8V7WKxrE9Qy7dXhRipa035+kF7WuU/z+tEmLVPBcJ0zt8mOu1DKpWcVzBK8IA==", + "license": "MIT", + "dependencies": { + "async-validator": "~1.8.1", + "babel-helper-vue-jsx-merge-props": "^2.0.0", + "deepmerge": "^1.2.0", + "normalize-wheel": "^1.0.1", + "resize-observer-polyfill": "^1.5.0", + "throttle-debounce": "^1.0.1" + }, + "peerDependencies": { + "vue": "^2.5.17" + } + }, + "node_modules/elliptic": { + "version": "6.5.7", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", + "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/enquire.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz", + "integrity": "sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "license": "MIT", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.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==", + "license": "BSD-2-Clause", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource-polyfill": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/eventsource-polyfill/-/eventsource-polyfill-0.9.6.tgz", + "integrity": "sha512-LyMFp2oPDGhum2lMvkjqKZEwWd2/AoXyt8aoyftTBMWwPHNgU+2tdxhTHPluDxoz+z4gNj0uHAPR9nqevATMbg==", + "license": "MIT" + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "license": "MIT", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-fileupload": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.5.1.tgz", + "integrity": "sha512-LsYG1ALXEB7vlmjuSw8ABeOctMp8a31aUC5ZF55zuz7O2jLFnmJYrCv10py357ky48aEoBQ/9bVXgFynjvaPmA==", + "license": "MIT", + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/express-validator": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-6.15.0.tgz", + "integrity": "sha512-r05VYoBL3i2pswuehoFSy+uM8NBuVaY7avp5qrYjQBDzagx2Z5A77FZqPT8/gNLF3HopWkIzaTFaC4JysWXLqg==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21", + "validator": "^13.9.0" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "license": "MIT", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extract-css-chunks-webpack-plugin": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/extract-css-chunks-webpack-plugin/-/extract-css-chunks-webpack-plugin-4.10.0.tgz", + "integrity": "sha512-D/wb/Tbexq8XMBl4uhthto25WBaHI9P8vucDdzwPtLTyVi4Rdw/aiRLSL2rHaF6jZfPAjThWXepFU9PXsdtIbA==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.4", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.0.0" + } + }, + "node_modules/extract-css-chunks-webpack-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "license": "MIT", + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT", + "optional": true + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "deprecated": "This module is no longer supported.", + "license": "ISC" + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/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==", + "license": "MIT", + "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/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT", + "optional": true + }, + "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==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/flush-write-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/flush-write-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/flush-write-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/flush-write-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/form-data": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz", + "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "license": "MIT", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/from2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-memo": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fs-memo/-/fs-memo-1.2.0.tgz", + "integrity": "sha512-YEexkCpL4j03jn5SxaMHqcO6IuWuqm8JFUYhyCep7Ao89JIYmB8xoKhK7zXXJ9cCaNXpyNH5L3QtAmoxjoHW2w==", + "license": "MIT" + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "license": "Unlicense" + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs-write-stream-atomic/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/fs-write-stream-atomic/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/fs-write-stream-atomic/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "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, + "license": "MIT", + "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==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-port-please": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.2.tgz", + "integrity": "sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==", + "license": "MIT", + "optional": true + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/giget": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz", + "integrity": "sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.2.3", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.3", + "nypm": "^0.3.8", + "ohash": "^1.1.3", + "pathe": "^1.1.2", + "tar": "^6.2.0" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, + "node_modules/git-config-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-config-path/-/git-config-path-2.0.0.tgz", + "integrity": "sha512-qc8h1KIQbJpp+241id3GuAtkdyJ+IK+LIVtkiFTRKRrmddDzs3SI9CvP1QYmWBFvm1I/PWRwj//of8bgAc0ltA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/git-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", + "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", + "license": "MIT", + "dependencies": { + "is-ssh": "^1.4.0", + "parse-url": "^8.1.0" + } + }, + "node_modules/git-url-parse": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.1.tgz", + "integrity": "sha512-PCFJyeSSdtnbfhSNRw9Wk96dDCNx+sogTe4YNXeXSJxt7xz5hvXekuRn9JX7m+Mf4OscCu8h+mtAl3+h5Fo8lQ==", + "license": "MIT", + "dependencies": { + "git-up": "^7.0.0" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "license": "ISC", + "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==", + "license": "BSD-2-Clause" + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "license": "MIT", + "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/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "ISC" + }, + "node_modules/gsap": { + "version": "3.12.5", + "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.12.5.tgz", + "integrity": "sha512-srBfnk4n+Oe/ZnMIOXt3gT605BX9x5+rh/prT2F1SsNJsU1XuMiP0E2aptW481OnonOGACZWBqseH5Z7csHxhQ==", + "license": "Standard 'no charge' license: https://gsap.com/standard-license. Club GSAP members get more: https://gsap.com/licensing/. Why GreenSock doesn't employ an MIT license: https://gsap.com/why-license/" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/h3": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.13.0.tgz", + "integrity": "sha512-vFEAu/yf8UMUcB4s43OaDaigcqpQd14yanmOsn+NcRX3/guSKncyE2rOYhq8RIchgJrPSs/QiIddnTTR1ddiAg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": ">=0.2.0 <0.4.0", + "defu": "^6.1.4", + "destr": "^2.0.3", + "iron-webcrypto": "^1.2.1", + "ohash": "^1.1.4", + "radix3": "^1.1.2", + "ufo": "^1.5.4", + "uncrypto": "^0.1.3", + "unenv": "^1.10.0" + } + }, + "node_modules/hard-source-webpack-plugin": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/hard-source-webpack-plugin/-/hard-source-webpack-plugin-0.13.1.tgz", + "integrity": "sha512-r9zf5Wq7IqJHdVAQsZ4OP+dcUSvoHqDMxJlIzaE2J0TZWn3UjMMrHqwDHR8Jr/pzPfG7XxSe36E7Y8QGNdtuAw==", + "license": "ISC", + "dependencies": { + "chalk": "^2.4.1", + "find-cache-dir": "^2.0.0", + "graceful-fs": "^4.1.11", + "lodash": "^4.15.0", + "mkdirp": "^0.5.1", + "node-object-hash": "^1.2.0", + "parse-json": "^4.0.0", + "pkg-dir": "^3.0.0", + "rimraf": "^2.6.2", + "semver": "^5.6.0", + "tapable": "^1.0.0-beta.5", + "webpack-sources": "^1.0.1", + "write-json-file": "^2.3.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "webpack": "*" + } + }, + "node_modules/hard-source-webpack-plugin/node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-source-webpack-plugin/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-source-webpack-plugin/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-source-webpack-plugin/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-source-webpack-plugin/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-source-webpack-plugin/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/hard-source-webpack-plugin/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-source-webpack-plugin/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-source-webpack-plugin/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/hard-source-webpack-plugin/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC" + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "license": "MIT", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "license": "MIT" + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/html-webpack-plugin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "engines": { + "node": ">=6.9" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/html-webpack-plugin/node_modules/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/html-webpack-plugin/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/html-webpack-plugin/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/html-webpack-plugin/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/html-webpack-plugin/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "license": "BSD-2-Clause", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/html-webpack-plugin/node_modules/terser/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==", + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/htmlparser2/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/htmlparser2/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/htmlparser2/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", + "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-shutdown": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz", + "integrity": "sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==", + "license": "MIT", + "optional": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", + "license": "MIT" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "license": "ISC" + }, + "node_modules/image-meta": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/image-meta/-/image-meta-0.2.1.tgz", + "integrity": "sha512-K6acvFaelNxx8wc2VjbIzXKDVB0Khs0QT35U6NkGfTdCmjLNcO2945m7RFNR9/RPVFm48hq7QPzK8uGH18HCGw==", + "license": "MIT" + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", + "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", + "license": "MIT" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ipx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipx/-/ipx-2.1.0.tgz", + "integrity": "sha512-AVnPGXJ8L41vjd11Z4akIF2yd14636Klxul3tBySxHA6PKfCOQPxBDkCFK5zcWh0z/keR6toh1eg8qzdBVUgdA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@fastify/accept-negotiator": "^1.1.0", + "citty": "^0.1.5", + "consola": "^3.2.3", + "defu": "^6.1.4", + "destr": "^2.0.2", + "etag": "^1.8.1", + "h3": "^1.10.0", + "image-meta": "^0.2.0", + "listhen": "^1.5.6", + "ofetch": "^1.3.3", + "pathe": "^1.1.2", + "sharp": "^0.32.6", + "svgo": "^3.2.0", + "ufo": "^1.3.2", + "unstorage": "^1.10.1", + "xss": "^1.0.14" + }, + "bin": { + "ipx": "bin/ipx.mjs" + } + }, + "node_modules/ipx/node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/ipx/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ipx/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ipx/node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ipx/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ipx/node_modules/node-abi": { + "version": "3.71.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz", + "integrity": "sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==", + "license": "MIT", + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ipx/node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "license": "MIT", + "optional": true + }, + "node_modules/ipx/node_modules/prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ipx/node_modules/sharp": { + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.2", + "node-addon-api": "^6.1.0", + "prebuild-install": "^7.1.1", + "semver": "^7.5.4", + "simple-get": "^4.0.1", + "tar-fs": "^3.0.4", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/ipx/node_modules/sharp/node_modules/tar-fs": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", + "license": "MIT", + "optional": true, + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0" + } + }, + "node_modules/ipx/node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/ipx/node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is_js": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/is_js/-/is_js-0.9.0.tgz", + "integrity": "sha512-8Y5EHSH+TonfUHX2g3pMJljdbGavg55q4jmHzghJCdqYDbdNROC8uw/YFQwIRCRqRJT1EY3pJefz+kglw+o7sg==", + "license": "MIT" + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "license": "MIT" + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "optional": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-https/-/is-https-1.0.0.tgz", + "integrity": "sha512-1adLLwZT9XEXjzhQhZxd75uxf0l+xI9uTSFaZeSESjL3E1eXSPpO+u5RcgqtzeZ1KCaNvtEwZSTO2P4U5erVqQ==", + "license": "MIT" + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-retry-allowed": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz", + "integrity": "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ssh": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", + "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", + "license": "MIT", + "dependencies": { + "protocols": "^2.0.1" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is64bit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz", + "integrity": "sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==", + "license": "MIT", + "optional": true, + "dependencies": { + "system-architecture": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jalaali-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/jalaali-js/-/jalaali-js-1.2.7.tgz", + "integrity": "sha512-gE+YHWSbygYAoJa+Xg8LWxGILqFOxZSBQQw39ghel01fVFUxV7bjL0x1JFsHcLQ3uPjvn81HQMa+kxwyPWnxGQ==", + "license": "MIT" + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "license": "MIT" + }, + "node_modules/js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "license": "MIT", + "dependencies": { + "string-convert": "^0.2.0" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==", + "license": "MIT" + }, + "node_modules/kareem": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", + "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==", + "license": "Apache-2.0" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/knitwork": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/knitwork/-/knitwork-1.1.0.tgz", + "integrity": "sha512-oHnmiBUVHz1V+URE77PNot2lv3QiYU2zQf1JjOVkMt3YDKGbu8NAFr+c4mcNOhdsGrB/VpVbRwPwhiXrPhxQbw==", + "license": "MIT" + }, + "node_modules/last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" + } + }, + "node_modules/launch-editor": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", + "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/launch-editor-middleware": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.9.1.tgz", + "integrity": "sha512-4wF6AtPtaIENiZdH/a+3yW8Xni7uxzTEDd1z+gH00hUWBCSmQknFohznMd9BWhLk8MXObeB5ir69GbIr9qFW1w==", + "license": "MIT", + "dependencies": { + "launch-editor": "^2.9.1" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/listhen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.9.0.tgz", + "integrity": "sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@parcel/watcher": "^2.4.1", + "@parcel/watcher-wasm": "^2.4.1", + "citty": "^0.1.6", + "clipboardy": "^4.0.0", + "consola": "^3.2.3", + "crossws": ">=0.2.0 <0.4.0", + "defu": "^6.1.4", + "get-port-please": "^3.1.2", + "h3": "^1.12.0", + "http-shutdown": "^1.2.2", + "jiti": "^2.1.2", + "mlly": "^1.7.1", + "node-forge": "^1.3.1", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "ufo": "^1.5.4", + "untun": "^0.1.3", + "uqr": "^0.1.2" + }, + "bin": { + "listen": "bin/listhen.mjs", + "listhen": "bin/listhen.mjs" + } + }, + "node_modules/listhen/node_modules/jiti": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.3.3.tgz", + "integrity": "sha512-EX4oNDwcXSivPrw2qKH2LB5PoFxEvgtv2JgwW0bU858HoLQ+kutSvjLMUqBd0PeJYEinLWhoI9Ol0eYMqj/wNQ==", + "license": "MIT", + "optional": true, + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "license": "MIT", + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/lodash-contrib": { + "version": "4.1200.1", + "resolved": "https://registry.npmjs.org/lodash-contrib/-/lodash-contrib-4.1200.1.tgz", + "integrity": "sha512-5QkRLyRLjc7J3BOqkqW5BkKXVUMhvlDZ5VqDSrGJnipIIY1KsW/vs3rrIzHg3XqBO6Hibc4o8JTLhdJIHr52Wg==", + "license": "MIT", + "dependencies": { + "lodash": "4.12.x" + } + }, + "node_modules/lodash-contrib/node_modules/lodash": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.12.0.tgz", + "integrity": "sha512-H7Y9y0h/WibZBZyt9IOEEDaNJCzmpEoUQNB6d/+sHuS6fKFWCRuYSAf5s2mfK3hYrPqHbosJI4/bv0HUf2OvVw==", + "license": "MIT" + }, + "node_modules/lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", + "license": "MIT" + }, + "node_modules/lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "license": "MIT" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "license": "MIT" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "license": "MIT" + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "license": "MIT" + }, + "node_modules/lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "license": "MIT", + "dependencies": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "node_modules/lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "license": "MIT", + "dependencies": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "license": "MIT", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "license": "MIT", + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.14.0.tgz", + "integrity": "sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/json-pack": "^1.0.3", + "@jsonjoy.com/util": "^1.3.0", + "tree-dump": "^1.0.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, + "node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "license": "MIT", + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/memory-fs/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/memory-fs/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/memory-fs/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/memory-fs/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "license": "MIT", + "optional": true + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "license": "MIT", + "dependencies": { + "source-map": "^0.6.1" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "license": "MIT" + }, + "node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "license": "BSD-2-Clause", + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "license": "MIT", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, + "node_modules/mlly": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.2.tgz", + "integrity": "sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==", + "license": "MIT", + "dependencies": { + "acorn": "^8.12.1", + "pathe": "^1.1.2", + "pkg-types": "^1.2.0", + "ufo": "^1.5.4" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/moment-jalaali": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/moment-jalaali/-/moment-jalaali-0.9.6.tgz", + "integrity": "sha512-v8wXjQplvk5ez+sUqgsWIrafwIf1BEXXvzTYwsg1wHcqh27nSgKPCJ6FnZRrCz03MoNyB9N31L0oms+vE8Rq7g==", + "license": "MIT", + "dependencies": { + "jalaali-js": "^1.1.0", + "moment": "^2.22.2", + "moment-timezone": "^0.5.21", + "rimraf": "^3.0.2" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.46", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.46.tgz", + "integrity": "sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw==", + "license": "MIT", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mongodb": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.4.tgz", + "integrity": "sha512-K5q8aBqEXMwWdVNh94UQTwZ6BejVbFhh1uB6c5FKtPE9eUMZPUO3sRZdgIEcHSrAWmxzpG/FeODDKL388sqRmw==", + "license": "Apache-2.0", + "dependencies": { + "bl": "^2.2.1", + "bson": "^1.1.4", + "denque": "^1.4.1", + "optional-require": "^1.1.8", + "safe-buffer": "^5.1.2" + }, + "engines": { + "node": ">=4" + }, + "optionalDependencies": { + "saslprep": "^1.0.0" + }, + "peerDependenciesMeta": { + "aws4": { + "optional": true + }, + "bson-ext": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "mongodb-extjson": { + "optional": true + }, + "snappy": { + "optional": true + } + } + }, + "node_modules/mongodb/node_modules/optional-require": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz", + "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==", + "license": "Apache-2.0", + "dependencies": { + "require-at": "^1.0.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mongoose": { + "version": "5.13.22", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.22.tgz", + "integrity": "sha512-p51k/c4X/MfqeQ3I1ranlDiggLzNumZrTDD9CeezHwZxt2/btf+YZD7MCe07RAY2NgFYVMayq6jMamw02Jmf9w==", + "license": "MIT", + "dependencies": { + "@types/bson": "1.x || 4.0.x", + "@types/mongodb": "^3.5.27", + "bson": "^1.1.4", + "kareem": "2.3.2", + "mongodb": "3.7.4", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.8.4", + "mquery": "3.2.5", + "ms": "2.1.2", + "optional-require": "1.0.x", + "regexp-clone": "1.0.0", + "safe-buffer": "5.2.1", + "sift": "13.5.2", + "sliced": "1.0.1" + }, + "engines": { + "node": ">=4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==", + "license": "Apache-2.0", + "peerDependencies": { + "mongoose": "*" + } + }, + "node_modules/mongoose-paginate-v2": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/mongoose-paginate-v2/-/mongoose-paginate-v2-1.8.5.tgz", + "integrity": "sha512-kFxhot+yw9KmpAGSSrF/o+f00aC2uawgNUbhyaM0USS9L7dln1NA77/pLg4lgOaRgXMtfgCENamjqZwIM1Zrig==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "node_modules/move-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/mpath": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", + "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.5.tgz", + "integrity": "sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A==", + "license": "MIT", + "dependencies": { + "bluebird": "3.5.1", + "debug": "3.1.0", + "regexp-clone": "^1.0.0", + "safe-buffer": "5.1.2", + "sliced": "1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/mquery/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/mustache": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz", + "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==", + "license": "MIT", + "bin": { + "mustache": "bin/mustache" + }, + "engines": { + "npm": ">=1.4.0" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC" + }, + "node_modules/nan": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", + "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", + "license": "MIT", + "optional": true + }, + "node_modules/nanoid": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", + "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==", + "license": "MIT" + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "license": "MIT", + "dependencies": { + "semver": "^5.4.1" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", + "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==", + "license": "MIT" + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "optional": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-html-parser": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz", + "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==", + "license": "MIT", + "dependencies": { + "css-select": "^5.1.0", + "he": "1.2.0" + } + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "license": "MIT", + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/node-libs-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "license": "MIT" + }, + "node_modules/node-libs-browser/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/node-libs-browser/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/node-object-hash": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/node-object-hash/-/node-object-hash-1.4.2.tgz", + "integrity": "sha512-UdS4swXs85fCGWWf6t6DMGgpN/vnlKeSGEQ7hJcrs7PBFoxoKLmibc3QRb7fwiYsjdL7PX8iI/TMSlZ90dgHhQ==", + "license": "ISC", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "license": "MIT" + }, + "node_modules/node-res": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/node-res/-/node-res-5.0.1.tgz", + "integrity": "sha512-YOleO9c7MAqoHC+Ccu2vzvV1fL6Ku49gShq3PIMKWHRgrMSih3XcwL05NbLBi6oU2J471gTBfdpVVxwT6Pfhxg==", + "license": "MIT", + "dependencies": { + "destroy": "^1.0.4", + "etag": "^1.8.1", + "mime-types": "^2.1.19", + "on-finished": "^2.3.0", + "vary": "^1.1.2" + } + }, + "node_modules/nodemailer": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.15.tgz", + "integrity": "sha512-AHf04ySLC6CIfuRtRiEYtGEXgRfa6INgWGluDhnxTZhHSKvrBu7lc1VVchQ0d8nPc4cFaZoPq8vkyNoZr0TpGQ==", + "license": "MIT-0", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/nodemon": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.7.tgz", + "integrity": "sha512-hLj7fuMow6f0lbB0cD14Lz2xNjwsyruH251Pk4t/yIitCFJbmY1myuLlHm/q06aST4jg6EgAh74PIBBrRqpVAQ==", + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==", + "license": "MIT", + "dependencies": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==", + "license": "BSD-3-Clause" + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nuxt": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-2.18.1.tgz", + "integrity": "sha512-SZFOLDKgCfLu23BrQE0YYNWeoi/h+fw07TNDNDzRfbmMvQlStgTBG7lqeELytXdQnaPKWjWAYo12K7pPPRZb9Q==", + "deprecated": "Nuxt 2 has reached EOL and is no longer actively maintained. See https://nuxt.com/blog/nuxt2-eol for more details.", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@nuxt/babel-preset-app": "2.18.1", + "@nuxt/builder": "2.18.1", + "@nuxt/cli": "2.18.1", + "@nuxt/components": "^2.2.1", + "@nuxt/config": "2.18.1", + "@nuxt/core": "2.18.1", + "@nuxt/generator": "2.18.1", + "@nuxt/loading-screen": "^2.0.4", + "@nuxt/opencollective": "^0.4.0", + "@nuxt/server": "2.18.1", + "@nuxt/telemetry": "^1.5.0", + "@nuxt/utils": "2.18.1", + "@nuxt/vue-app": "2.18.1", + "@nuxt/vue-renderer": "2.18.1", + "@nuxt/webpack": "2.18.1" + }, + "bin": { + "nuxt": "bin/nuxt.js" + } + }, + "node_modules/nuxt-video-player": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/nuxt-video-player/-/nuxt-video-player-1.0.17.tgz", + "integrity": "sha512-Oiu6HN+jnY22XhsC7bzim0Ubo4ZFD2Fv+fA2LvOqmOdAjasFV+4ltRiD7E4b1tx9R+KaGXcNIk7xSTIPl4Ks5Q==", + "license": "MIT", + "dependencies": { + "core-js": "^3.6.5", + "vue": "^2.6.11" + } + }, + "node_modules/nypm": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.12.tgz", + "integrity": "sha512-D3pzNDWIvgA+7IORhD/IuWzEk4uXv6GsgOxiid4UU3h9oq5IqV1KtPDi63n4sZJ/xcWlr88c0QM2RgN5VbOhFA==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.2.3", + "execa": "^8.0.1", + "pathe": "^1.1.2", + "pkg-types": "^1.2.0", + "ufo": "^1.5.4" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "license": "MIT", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", + "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", + "license": "MIT", + "dependencies": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "gopd": "^1.0.1", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ofetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", + "license": "MIT", + "optional": true, + "dependencies": { + "destr": "^2.0.3", + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.4" + } + }, + "node_modules/ohash": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz", + "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==", + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openapi-types": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", + "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", + "license": "MIT", + "peer": true + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/opentype.js": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/opentype.js/-/opentype.js-0.7.3.tgz", + "integrity": "sha512-Veui5vl2bLonFJ/SjX/WRWJT3SncgiZNnKUyahmXCc2sa1xXW15u3R/3TN5+JFiP7RsjK5ER4HA5eWaEmV9deA==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.2" + }, + "bin": { + "ot": "bin/ot" + } + }, + "node_modules/optimize-css-assets-webpack-plugin": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-6.0.1.tgz", + "integrity": "sha512-BshV2UZPfggZLdUfN3zFBbG4sl/DynUI+YCB6fRRDWaqO2OiWN8GPcp4Y0/fEV6B3k9Hzyk3czve3V/8B/SzKQ==", + "license": "MIT", + "dependencies": { + "cssnano": "^5.0.2", + "last-call-webpack-plugin": "^3.0.0", + "postcss": "^8.2.1" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "license": "MIT", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "license": "MIT", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "license": "CC0-1.0" + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "license": "MIT", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "license": "MIT", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/optimize-css-assets-webpack-plugin/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/optional-require": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.0.3.tgz", + "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA==", + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "license": "MIT" + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "license": "MIT", + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/parallel-transform/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/parallel-transform/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/parallel-transform/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/parallel-transform/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "license": "ISC", + "dependencies": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-git-config": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-3.0.0.tgz", + "integrity": "sha512-wXoQGL1D+2COYWCD35/xbiKma1Z15xvZL8cI25wvxzled58V51SJM04Urt/uznS900iQor7QO04SgdfT/XlbuA==", + "license": "MIT", + "dependencies": { + "git-config-path": "^2.0.0", + "ini": "^1.3.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-path": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", + "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", + "license": "MIT", + "dependencies": { + "protocols": "^2.0.0" + } + }, + "node_modules/parse-url": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", + "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", + "license": "MIT", + "dependencies": { + "parse-path": "^7.0.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "license": "MIT" + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "license": "MIT", + "optional": true + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "license": "MIT" + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "license": "MIT", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/perfect-scrollbar": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.5.tgz", + "integrity": "sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-types": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.1.tgz", + "integrity": "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.2", + "pathe": "^1.1.2" + } + }, + "node_modules/pnp-webpack-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz", + "integrity": "sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==", + "license": "MIT", + "dependencies": { + "ts-pnp": "^1.1.6" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", + "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "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" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.3.tgz", + "integrity": "sha512-KHkmCILThWBRtg+Jn1owTnHPnFit4OkqS+eKiGEOPIGke54DCeYGJ6r0Fx/HjfE9M9kznApCLcU0DvnPchazMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-calc": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.2.tgz", + "integrity": "sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12 || ^20.9 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.38" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "6.0.14", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.14.tgz", + "integrity": "sha512-dNUX+UH4dAozZ8uMHZ3CtCNYw8fyFAmqqdcyxMr7PEdM9jLXV19YscoYO0F25KqZYhmtWKQ+4tKrIZQrwzwg7A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.4.tgz", + "integrity": "sha512-XQZm4q4fNFqVCYMGPiBjcqDhuG7Ey2xrl99AnDJMyr5eDASsAGalndVgHZF8i97VFNy1GQeZc4q2ydagGmhelQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/utilities": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.3.tgz", + "integrity": "sha512-ruBqzEFDYHrcVq3FnW3XHgwRqVMrtEPLBtD7K2YmsLKVc2jbkxzzNEctJKsPCpDZ+LeMHLKRDoSShVefGc+CkQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-colormin": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz", + "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-convert-values": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.4.tgz", + "integrity": "sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-custom-media": { + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.8.tgz", + "integrity": "sha512-V1KgPcmvlGdxTel4/CyQtBJEFhMVpEmRGFrnVtgfGIHj5PJX9vO36eFBxKBeJn+aCDTed70cc+98Mz3J/uVdGQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^1.0.13", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/media-query-list-parser": "^2.1.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-properties": { + "version": "13.3.12", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.12.tgz", + "integrity": "sha512-oPn/OVqONB2ZLNqN185LDyaVByELAA/u3l2CS2TS16x2j2XsmV4kd8U49+TMxmUsEU9d8fB/I10E6U7kB0L1BA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^1.0.13", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/utilities": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "7.1.12", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.12.tgz", + "integrity": "sha512-ctIoprBMJwByYMGjXG0F7IT2iMF2hnamQ+aWZETyBM0aAlyaYdVZTeUkk8RB+9h9wP+NdN3f01lfvKl2ZSqC0g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^1.0.13", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "postcss-selector-parser": "^6.1.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-8.0.1.tgz", + "integrity": "sha512-uULohfWBBVoFiZXgsQA24JV6FdKIidQ+ZqxOouhWwdE+qJlALbkS5ScB43ZTjPK+xUZZhlaO/NjfCt5h4IKUfw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-discard-comments": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.3.tgz", + "integrity": "sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz", + "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-empty": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", + "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", + "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.7.tgz", + "integrity": "sha512-1xEhjV9u1s4l3iP5lRt1zvMjI/ya8492o9l/ivcxHhkO3nOz16moC4JpMxDUGrOs4R3hX+KWT7gKoV842cwRgg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^3.3.0", + "@csstools/utilities": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-9.0.1.tgz", + "integrity": "sha512-N2VQ5uPz3Z9ZcqI5tmeholn4d+1H14fKXszpjogZIrFbhaq0zNAtq8sAnw6VLiqGbL8YBzsnu7K9bBkTqaRimQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-8.0.1.tgz", + "integrity": "sha512-NFU3xcY/xwNaapVb+1uJ4n23XImoC86JNwkY/uduytSl2s9Ekc2EpzmRR63+ExitnW3Mab3Fba/wRPCT5oDILA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-5.0.1.tgz", + "integrity": "sha512-k2z9Cnngc24c0KF4MtMuDdToROYqGMMUQGcE6V0odwjHyOHtaDBlLeRBV70y9/vF7KIbShrTRZ70JjsI1BZyWw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-image-set-function": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-6.0.3.tgz", + "integrity": "sha512-i2bXrBYzfbRzFnm+pVuxVePSTCRiNmlfssGI4H0tJQvDue+yywXwUxe68VyzXs7cGtMaH6MCLY6IbCShrSroCw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-import-resolver": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-import-resolver/-/postcss-import-resolver-2.0.0.tgz", + "integrity": "sha512-y001XYgGvVwgxyxw9J1a5kqM/vtmIQGzx34g0A0Oy44MFcy/ZboZw1hu/iN3VYFjSTRzbvd7zZJJz0Kh0AGkTw==", + "license": "MIT", + "dependencies": { + "enhanced-resolve": "^4.1.1" + } + }, + "node_modules/postcss-lab-function": { + "version": "6.0.19", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.19.tgz", + "integrity": "sha512-vwln/mgvFrotJuGV8GFhpAOu9iGf3pvTBr6dLPDmUcqVD5OsQpEFyQMAFTxSxWXGEzBj6ld4pZ/9GDfEpXvo0g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", + "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/postcss-loader/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==", + "license": "MIT", + "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/postcss-logical": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-7.0.1.tgz", + "integrity": "sha512-8GwUQZE0ri0K0HJHkDv87XOLC8DE0msc+HoWLeKdtjDZEwpZ5xuK3QdV6FhmHSQW40LPkg43QzvATRAI3LsRkg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.4.tgz", + "integrity": "sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^7.0.4" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-merge-rules": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.4.tgz", + "integrity": "sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^5.0.0", + "postcss-selector-parser": "^6.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", + "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", + "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", + "license": "MIT", + "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-params": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz", + "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.4.tgz", + "integrity": "sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "postcss-selector-parser": "^6.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "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==", + "license": "ISC", + "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==", + "license": "MIT", + "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==", + "license": "ISC", + "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==", + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nesting": { + "version": "12.1.5", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.5.tgz", + "integrity": "sha512-N1NgI1PDCiAGWPTYrwqm8wpjv0bgDmkYHH72pNsqTCv9CObxjxftdYu6AKtGN+pnJa7FQjMm3v4sp8QJbFsYdQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-resolve-nested": "^1.1.0", + "@csstools/selector-specificity": "^3.1.1", + "postcss-selector-parser": "^6.1.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", + "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", + "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", + "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", + "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-string": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", + "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", + "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz", + "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", + "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", + "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz", + "integrity": "sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-ordered-values": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz", + "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-5.0.1.tgz", + "integrity": "sha512-XzjBYKLd1t6vHsaokMV9URBt2EwC9a7nDhpQpjoPk2HRTSQfokPfyAS/Q7AOrzUu6q+vp/GnrDBGuj/FCaRqrQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-9.0.1.tgz", + "integrity": "sha512-JfL+paQOgRQRMoYFc2f73pGuG/Aw3tt4vYMR6UA3cWVMxivviPTnMFnFTczUJOA4K2Zga6xgQVE+PcLs64WC8Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-preset-env": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.6.0.tgz", + "integrity": "sha512-Lxfk4RYjUdwPCYkc321QMdgtdCP34AeI94z+/8kVmqnTIlD4bMRQeGcMZgwz8BxHrzQiFXYIR5d7k/9JMs2MEA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-cascade-layers": "^4.0.6", + "@csstools/postcss-color-function": "^3.0.19", + "@csstools/postcss-color-mix-function": "^2.0.19", + "@csstools/postcss-content-alt-text": "^1.0.0", + "@csstools/postcss-exponential-functions": "^1.0.9", + "@csstools/postcss-font-format-keywords": "^3.0.2", + "@csstools/postcss-gamut-mapping": "^1.0.11", + "@csstools/postcss-gradients-interpolation-method": "^4.0.20", + "@csstools/postcss-hwb-function": "^3.0.18", + "@csstools/postcss-ic-unit": "^3.0.7", + "@csstools/postcss-initial": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^4.0.8", + "@csstools/postcss-light-dark-function": "^1.0.8", + "@csstools/postcss-logical-float-and-clear": "^2.0.1", + "@csstools/postcss-logical-overflow": "^1.0.1", + "@csstools/postcss-logical-overscroll-behavior": "^1.0.1", + "@csstools/postcss-logical-resize": "^2.0.1", + "@csstools/postcss-logical-viewport-units": "^2.0.11", + "@csstools/postcss-media-minmax": "^1.1.8", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.11", + "@csstools/postcss-nested-calc": "^3.0.2", + "@csstools/postcss-normalize-display-values": "^3.0.2", + "@csstools/postcss-oklab-function": "^3.0.19", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", + "@csstools/postcss-relative-color-syntax": "^2.0.19", + "@csstools/postcss-scope-pseudo-class": "^3.0.1", + "@csstools/postcss-stepped-value-functions": "^3.0.10", + "@csstools/postcss-text-decoration-shorthand": "^3.0.7", + "@csstools/postcss-trigonometric-functions": "^3.0.10", + "@csstools/postcss-unset-value": "^3.0.1", + "autoprefixer": "^10.4.19", + "browserslist": "^4.23.1", + "css-blank-pseudo": "^6.0.2", + "css-has-pseudo": "^6.0.5", + "css-prefers-color-scheme": "^9.0.1", + "cssdb": "^8.1.0", + "postcss-attribute-case-insensitive": "^6.0.3", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^6.0.14", + "postcss-color-hex-alpha": "^9.0.4", + "postcss-color-rebeccapurple": "^9.0.3", + "postcss-custom-media": "^10.0.8", + "postcss-custom-properties": "^13.3.12", + "postcss-custom-selectors": "^7.1.12", + "postcss-dir-pseudo-class": "^8.0.1", + "postcss-double-position-gradients": "^5.0.7", + "postcss-focus-visible": "^9.0.1", + "postcss-focus-within": "^8.0.1", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^5.0.1", + "postcss-image-set-function": "^6.0.3", + "postcss-lab-function": "^6.0.19", + "postcss-logical": "^7.0.1", + "postcss-nesting": "^12.1.5", + "postcss-opacity-percentage": "^2.0.0", + "postcss-overflow-shorthand": "^5.0.1", + "postcss-page-break": "^3.0.4", + "postcss-place": "^9.0.1", + "postcss-pseudo-class-any-link": "^9.0.2", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^7.0.2" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.2.tgz", + "integrity": "sha512-HFSsxIqQ9nA27ahyfH37cRWGk3SYyQLpk0LiWw/UGMV4VKT5YG2ONee4Pz/oFesnK0dn2AjcyequDbIjKJgB0g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz", + "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", + "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-7.0.2.tgz", + "integrity": "sha512-/SSxf/90Obye49VZIfc0ls4H0P6i6V1iHv0pzZH8SdgvZOPFkF37ef1r5cyWcMflJSFJ5bfuoluTnFnBBFiuSA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz", + "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^3.3.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.3.tgz", + "integrity": "sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-url": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", + "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", + "license": "MIT", + "dependencies": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-url/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/postcss/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" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/prebuild-install": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", + "license": "MIT", + "dependencies": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.21.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "license": "MIT", + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "license": "ISC" + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/proper-lockfile/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/protocols": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", + "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "license": "MIT" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "license": "ISC" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "license": "MIT" + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "license": "MIT", + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "engines": { + "node": ">=0.4.x" + } + }, + "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" + } + ], + "license": "MIT" + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "license": "MIT", + "optional": true + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "license": "MIT", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-cache/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", + "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.11.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz", + "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "license": "ISC", + "optional": true + }, + "node_modules/renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "node_modules/renderkid/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/renderkid/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request-ip": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/request-ip/-/request-ip-2.2.0.tgz", + "integrity": "sha512-Hn4zUAr+XHbUs2RrfHur62t7+UhvtevqK32ordFewguEfNHUkhSdYgbG7PDGmXZEzqEXll9bei0+VMe6gkmuUQ==", + "license": "MIT", + "dependencies": { + "is_js": "^0.9.0" + } + }, + "node_modules/require-at": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", + "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==", + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "node_modules/requrl": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/requrl/-/requrl-3.0.2.tgz", + "integrity": "sha512-f3gjR6d8MhOpn46PP+DSJywbmxi95fxQm3coXBFwognjFLla9X6tr8BdNyaIKNOEkaRbRcm0/zYAqN19N1oyhg==", + "license": "MIT" + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", + "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-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "license": "MIT" + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "license": "MIT", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "license": "MIT", + "engines": { + "node": ">=0.12.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" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", + "license": "ISC", + "dependencies": { + "aproba": "^1.1.1" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "license": "MIT", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "license": "MIT", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sass": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.3.tgz", + "integrity": "sha512-ptDWyVmDMVielpz/oWy3YP3nfs7LpJTHIJZboMVs8GEC9eUmtZTZhMHlTW98wY4aEorDfjN38+Wr/XjskFWcfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/watcher": "^2.4.1", + "chokidar": "^4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "10.5.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.5.2.tgz", + "integrity": "sha512-vMUoSNOUKJILHpcNCCyD23X34gve1TS7Rjd9uXHeKqhvBG39x6XbswFDtpbTElj6XdMFezoWhkh5vtKudf2cgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "webpack": "^4.36.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/sass-loader/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==", + "dev": true, + "license": "MIT", + "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/sass/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "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==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-placeholder": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/serve-placeholder/-/serve-placeholder-2.0.2.tgz", + "integrity": "sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==", + "license": "MIT", + "dependencies": { + "defu": "^6.1.4" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "license": "ISC" + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/sharp": { + "version": "0.28.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.28.3.tgz", + "integrity": "sha512-21GEP45Rmr7q2qcmdnjDkNP04Ooh5v0laGS5FDpojOO84D1DJwUijLiSq8XNNM6e8aGXYtoYRh3sVNdm8NodMA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^3.1.3", + "detect-libc": "^1.0.3", + "node-addon-api": "^3.2.0", + "prebuild-install": "^6.1.2", + "semver": "^7.3.5", + "simple-get": "^3.1.0", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/sharp/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sift": { + "version": "13.5.2", + "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", + "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==", + "license": "MIT" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "license": "MIT", + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA==", + "license": "MIT" + }, + "node_modules/slick-carousel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz", + "integrity": "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==", + "license": "MIT", + "peerDependencies": { + "jquery": ">=1.8.0" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "license": "MIT", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "license": "MIT", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "license": "MIT", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "license": "MIT", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "license": "MIT" + }, + "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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "license": "MIT", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.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==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "license": "MIT" + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/ssri/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ssri/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "license": "MIT" + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "license": "MIT" + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "license": "MIT" + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "license": "MIT", + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-browserify/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stream-browserify/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/stream-browserify/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "license": "MIT", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-http/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stream-http/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/stream-http/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "license": "MIT" + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/streamx": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.1.tgz", + "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==", + "license": "MIT", + "optional": true, + "dependencies": { + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.0.tgz", + "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==", + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.0.tgz", + "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==", + "license": "MIT" + }, + "node_modules/style-resources-loader": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/style-resources-loader/-/style-resources-loader-1.5.0.tgz", + "integrity": "sha512-fIfyvQ+uvXaCBGGAgfh+9v46ARQB1AWdaop2RpQw0PBVuROsTBqGvx8dj0kxwjGOAyq3vepe4AOK3M6+Q/q2jw==", + "license": "MIT", + "dependencies": { + "glob": "^7.2.0", + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=8.9" + }, + "peerDependencies": { + "webpack": "^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/stylehacks": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.4.tgz", + "integrity": "sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "postcss-selector-parser": "^6.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-captcha": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/svg-captcha/-/svg-captcha-1.4.0.tgz", + "integrity": "sha512-/fkkhavXPE57zRRCjNqAP3txRCSncpMx3NnNZL7iEoyAtYwUjPhJxW6FQTQPG5UPEmCrbFoXS10C3YdJlW7PDg==", + "license": "MIT", + "dependencies": { + "opentype.js": "^0.7.3" + }, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==" + }, + "node_modules/svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/swagger-jsdoc": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/swagger-jsdoc/-/swagger-jsdoc-6.2.8.tgz", + "integrity": "sha512-VPvil1+JRpmJ55CgAtn8DIcpBs0bL5L3q5bVQvF4tAW/k/9JYSj7dCpaYCAv5rufe0vcCbBRQXGvzpkWjvLklQ==", + "license": "MIT", + "dependencies": { + "commander": "6.2.0", + "doctrine": "3.0.0", + "glob": "7.1.6", + "lodash.mergewith": "^4.6.2", + "swagger-parser": "^10.0.3", + "yaml": "2.0.0-1" + }, + "bin": { + "swagger-jsdoc": "bin/swagger-jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/swagger-jsdoc/node_modules/commander": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", + "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/swagger-jsdoc/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/swagger-jsdoc/node_modules/yaml": { + "version": "2.0.0-1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.0.0-1.tgz", + "integrity": "sha512-W7h5dEhywMKenDJh2iX/LABkbFnBxasD27oyXWDS/feDsxiw0dD5ncXdYXgkvAsXIY2MpW/ZKkr9IU30DBdMNQ==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/swagger-parser": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/swagger-parser/-/swagger-parser-10.0.3.tgz", + "integrity": "sha512-nF7oMeL4KypldrQhac8RyHerJeGPD1p2xDh900GPvc+Nk7nWP6jX2FcC7WmkinMoAmoO774+AFXcWsW8gMWEIg==", + "license": "MIT", + "dependencies": { + "@apidevtools/swagger-parser": "10.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/swagger-ui-dist": { + "version": "5.17.14", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.17.14.tgz", + "integrity": "sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw==", + "license": "Apache-2.0" + }, + "node_modules/swagger-ui-express": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-5.0.1.tgz", + "integrity": "sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA==", + "license": "MIT", + "dependencies": { + "swagger-ui-dist": ">=5.0.0" + }, + "engines": { + "node": ">= v0.10.32" + }, + "peerDependencies": { + "express": ">=4.0.0 || >=5.0.0-beta" + } + }, + "node_modules/system-architecture": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz", + "integrity": "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/tar-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/terser": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", + "license": "BSD-2-Clause", + "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": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "license": "MIT", + "dependencies": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "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/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/terser/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==", + "license": "MIT" + }, + "node_modules/text-decoder": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.1.tgz", + "integrity": "sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/thingies": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "license": "Unlicense", + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/thread-loader": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz", + "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", + "license": "MIT", + "dependencies": { + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/thread-loader/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==", + "license": "MIT", + "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/throttle-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz", + "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/time-fix-plugin": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/time-fix-plugin/-/time-fix-plugin-2.0.7.tgz", + "integrity": "sha512-uVFet1LQToeUX0rTcSiYVYVoGuBpc8gP/2jnlUzuHMHe+gux6XLsNzxLUweabMwiUj5ejhoIMsUI55nVSEa/Vw==", + "license": "MIT", + "peerDependencies": { + "webpack": ">=4.0.0" + } + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "license": "MIT", + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", + "license": "MIT" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "license": "MIT", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tooltip.js": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tooltip.js/-/tooltip.js-1.3.3.tgz", + "integrity": "sha512-XWWuy/dBdF/F/YpRE955yqBZ4VdLfiTAUdOqoU+wJm6phJlMpEzl/iYHZ+qJswbeT9VG822bNfsETF9wzmoy5A==", + "deprecated": "Tooltip.js is not supported anymore, please migrate to tippy.js", + "license": "MIT", + "dependencies": { + "popper.js": "^1.0.2" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "license": "ISC", + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/tree-dump": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", + "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "license": "0BSD" + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", + "license": "MIT" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/turn.js": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/turn.js/-/turn.js-1.0.5.tgz", + "integrity": "sha512-36XRk5f6pm02AaPDEomJwfd7huc5U3SHv/ROBiL+rHBRuh1hkdxuuEwHiMW934lOJAsR+ML6XksPNUgRk1lPTQ==", + "license": "MIT", + "dependencies": { + "jquery": "1.12.0" + } + }, + "node_modules/turn.js/node_modules/jquery": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-1.12.0.tgz", + "integrity": "sha512-fnEEC7ylFkIKfOGvEky9Odcth1VYo61dfkQLxlDHjtNoIY9ssxybvTSG5xLDbutWdKn+grAu4EUJfhSUZODktQ==", + "license": "MIT" + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "node_modules/ua-parser-js": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", + "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "MIT", + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", + "license": "MIT" + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/unctx": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unctx/-/unctx-2.3.1.tgz", + "integrity": "sha512-PhKke8ZYauiqh3FEMVNm7ljvzQiph0Mt3GBRve03IJm7ukfaON2OBK795tLwhbyfzknuRRkW0+Ze+CQUmzOZ+A==", + "license": "MIT", + "dependencies": { + "acorn": "^8.8.2", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.0", + "unplugin": "^1.3.1" + } + }, + "node_modules/unctx/node_modules/unplugin": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.14.1.tgz", + "integrity": "sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==", + "license": "MIT", + "dependencies": { + "acorn": "^8.12.1", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "webpack-sources": "^3" + }, + "peerDependenciesMeta": { + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/unctx/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==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" + }, + "node_modules/unenv": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-1.10.0.tgz", + "integrity": "sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3", + "defu": "^6.1.4", + "mime": "^3.0.0", + "node-fetch-native": "^1.6.4", + "pathe": "^1.1.2" + } + }, + "node_modules/unenv/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/unfetch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-5.0.0.tgz", + "integrity": "sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==", + "license": "MIT", + "workspaces": [ + "./packages/isomorphic-unfetch" + ] + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unimport": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.13.1.tgz", + "integrity": "sha512-nNrVzcs93yrZQOW77qnyOVHtb68LegvhYFwxFMfuuWScmwQmyVCG/NBuN8tYsaGzgQUVYv34E/af+Cc9u4og4A==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.2", + "acorn": "^8.12.1", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "fast-glob": "^3.3.2", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.11", + "mlly": "^1.7.1", + "pathe": "^1.1.2", + "pkg-types": "^1.2.0", + "scule": "^1.3.0", + "strip-literal": "^2.1.0", + "unplugin": "^1.14.1" + } + }, + "node_modules/unimport/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unimport/node_modules/unplugin": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.14.1.tgz", + "integrity": "sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==", + "license": "MIT", + "dependencies": { + "acorn": "^8.12.1", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "webpack-sources": "^3" + }, + "peerDependenciesMeta": { + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/unimport/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==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "license": "ISC", + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "license": "MIT", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "license": "MIT", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/unstorage": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.12.0.tgz", + "integrity": "sha512-ARZYTXiC+e8z3lRM7/qY9oyaOkaozCeNd2xoz7sYK9fv7OLGhVsf+BZbmASqiK/HTZ7T6eAlnVq9JynZppyk3w==", + "license": "MIT", + "optional": true, + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^3.6.0", + "destr": "^2.0.3", + "h3": "^1.12.0", + "listhen": "^1.7.2", + "lru-cache": "^10.4.3", + "mri": "^1.2.0", + "node-fetch-native": "^1.6.4", + "ofetch": "^1.3.4", + "ufo": "^1.5.4" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.7.0", + "@azure/cosmos": "^4.1.1", + "@azure/data-tables": "^13.2.2", + "@azure/identity": "^4.4.1", + "@azure/keyvault-secrets": "^4.8.0", + "@azure/storage-blob": "^12.24.0", + "@capacitor/preferences": "^6.0.2", + "@netlify/blobs": "^6.5.0 || ^7.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.0", + "@vercel/kv": "^1.0.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.1" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + } + } + }, + "node_modules/unstorage/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC", + "optional": true + }, + "node_modules/untun": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/untun/-/untun-0.1.3.tgz", + "integrity": "sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "citty": "^0.1.5", + "consola": "^3.2.3", + "pathe": "^1.1.1" + }, + "bin": { + "untun": "bin/untun.mjs" + } + }, + "node_modules/untyped": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/untyped/-/untyped-1.5.1.tgz", + "integrity": "sha512-reBOnkJBFfBZ8pCKaeHgfZLcehXtM6UTxc+vqs1JvCps0c4amLNp3fhdGBZwYp+VLyoY9n3X5KOP7lCyWBUX9A==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.7", + "@babel/standalone": "^7.25.7", + "@babel/types": "^7.25.7", + "defu": "^6.1.4", + "jiti": "^2.3.1", + "mri": "^1.2.0", + "scule": "^1.3.0" + }, + "bin": { + "untyped": "dist/cli.mjs" + } + }, + "node_modules/untyped/node_modules/jiti": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.3.3.tgz", + "integrity": "sha512-EX4oNDwcXSivPrw2qKH2LB5PoFxEvgtv2JgwW0bU858HoLQ+kutSvjLMUqBd0PeJYEinLWhoI9Ol0eYMqj/wNQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "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" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uqr": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz", + "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==", + "license": "MIT", + "optional": true + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "license": "MIT" + }, + "node_modules/url": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", + "license": "MIT", + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-loader/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==", + "license": "MIT", + "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/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "license": "MIT" + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "license": "MIT", + "dependencies": { + "inherits": "2.0.3" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validator": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "license": "MIT" + }, + "node_modules/vue": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz", + "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==", + "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.", + "license": "MIT", + "dependencies": { + "@vue/compiler-sfc": "2.7.16", + "csstype": "^3.1.0" + } + }, + "node_modules/vue-client-only": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vue-client-only/-/vue-client-only-2.1.0.tgz", + "integrity": "sha512-vKl1skEKn8EK9f8P2ZzhRnuaRHLHrlt1sbRmazlvsx6EiC3A8oWF8YCBrMJzoN+W3OnElwIGbVjsx6/xelY1AA==", + "license": "MIT" + }, + "node_modules/vue-functional-data-merge": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz", + "integrity": "sha512-leT4kdJVQyeZNY1kmnS1xiUlQ9z1B/kdBFCILIjYYQDqZgLqCLa0UhjSSeRX6c3mUe6U5qYeM8LrEqkHJ1B4LA==", + "license": "MIT" + }, + "node_modules/vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "license": "MIT" + }, + "node_modules/vue-loader": { + "version": "15.11.1", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.11.1.tgz", + "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==", + "license": "MIT", + "dependencies": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "peerDependencies": { + "css-loader": "*", + "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "prettier": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/vue-loader/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "license": "MIT" + }, + "node_modules/vue-loader/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/vue-loader/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/vue-meta": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/vue-meta/-/vue-meta-2.4.0.tgz", + "integrity": "sha512-XEeZUmlVeODclAjCNpWDnjgw+t3WA6gdzs6ENoIAgwO1J1d5p1tezDhtteLUFwcaQaTtayRrsx7GL6oXp/m2Jw==", + "license": "MIT", + "dependencies": { + "deepmerge": "^4.2.2" + } + }, + "node_modules/vue-meta/node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vue-no-ssr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vue-no-ssr/-/vue-no-ssr-1.1.1.tgz", + "integrity": "sha512-ZMjqRpWabMPqPc7gIrG0Nw6vRf1+itwf0Itft7LbMXs2g3Zs/NFmevjZGN1x7K3Q95GmIjWbQZTVerxiBxI+0g==", + "license": "MIT" + }, + "node_modules/vue-persian-datetime-picker": { + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/vue-persian-datetime-picker/-/vue-persian-datetime-picker-2.10.4.tgz", + "integrity": "sha512-q/yyV15iDJE3diE7C+e6aF7EOMplze41V3UAFbvMgMiLzt/wDqD0OomgghKVhK6aJDUO7uW4q76Ihc7qntlorg==", + "license": "MIT", + "dependencies": { + "moment-jalaali": "^0.9.2" + } + }, + "node_modules/vue-router": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.6.5.tgz", + "integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==", + "license": "MIT" + }, + "node_modules/vue-server-renderer": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue-server-renderer/-/vue-server-renderer-2.7.16.tgz", + "integrity": "sha512-U7GgR4rYmHmbs3Z2gqsasfk7JNuTsy/xrR5EMMGRLkjN8+ryDlqQq6Uu3DcmbCATAei814YOxyl0eq2HNqgXyQ==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "hash-sum": "^2.0.0", + "he": "^1.2.0", + "lodash.template": "^4.5.0", + "lodash.uniq": "^4.5.0", + "resolve": "^1.22.0", + "serialize-javascript": "^6.0.0", + "source-map": "0.5.6" + } + }, + "node_modules/vue-server-renderer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/vue-server-renderer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/vue-server-renderer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/vue-server-renderer/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/vue-server-renderer/node_modules/source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vue-server-renderer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vue-slick-carousel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/vue-slick-carousel/-/vue-slick-carousel-1.0.6.tgz", + "integrity": "sha512-1CN/hpWC8m1U/eO7Kuc71jntJqdg6Z/ieLji21OPfQUhs8ZYnnGhQSu1covpa3IyuovM9T5puPCVgexs3DDF5A==", + "license": "MIT", + "dependencies": { + "enquire.js": "2.1.6", + "json2mq": "0.2.0", + "lodash.assign": "^4.2.0", + "lodash.debounce": "^4.0.8", + "lodash.get": "^4.4.2", + "lodash.pick": "^4.4.0", + "resize-observer-polyfill": "1.5.1", + "vue": "^2.6.10" + } + }, + "node_modules/vue-social-sharing": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/vue-social-sharing/-/vue-social-sharing-3.0.9.tgz", + "integrity": "sha512-Yg4oz5cSkr7ieMAgumwoRLnFhAaoUGCsN8lZE9yUkuQzbKid8yBOn4mLjfx/DA/E8nxYjunAfIUFs7eKIkBjPA==", + "license": "MIT", + "peerDependencies": { + "vue": "^2.6.10" + } + }, + "node_modules/vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "license": "MIT", + "dependencies": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "node_modules/vue-style-loader/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "license": "MIT" + }, + "node_modules/vue-style-loader/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/vue-style-loader/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/vue-template-compiler": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", + "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "license": "MIT" + }, + "node_modules/vue-tree-chart": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/vue-tree-chart/-/vue-tree-chart-1.2.9.tgz", + "integrity": "sha512-agPPR0cJwvQEH0iVN25zmQydGZSiYgqIxHqdzDOl3UuAG4iQoHbnBpoo1sSU+IvlUEEI+vuCZ3hDXad/pfQcew==", + "license": "MIT", + "dependencies": { + "vue": "^2.6.11" + } + }, + "node_modules/vue-turnjs": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/vue-turnjs/-/vue-turnjs-1.3.2.tgz", + "integrity": "sha512-g79Lgcgia3f8GYfiREWcmzIoBqeHk0RiVikN26rMPqqLF7CDIQc9b8ZUK8+8hI3kLWxtMz9OkzAqf6taMnxOvw==", + "license": "LGPL-3.0-only", + "dependencies": { + "jquery": "^3.5.0", + "nanoid": "^3.1.3" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "vue": "^2.6.11" + } + }, + "node_modules/vue-turnjs/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" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/vuex": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.2.tgz", + "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==", + "license": "MIT", + "peerDependencies": { + "vue": "^2.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "license": "MIT", + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "license": "ISC", + "optional": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "license": "MIT", + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "license": "MIT", + "optional": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "license": "MIT", + "optional": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "license": "ISC", + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "license": "MIT", + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT", + "optional": true + }, + "node_modules/watchpack-chokidar2/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "license": "MIT", + "optional": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/watchpack-chokidar2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT", + "optional": true + }, + "node_modules/watchpack-chokidar2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/webpack": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz", + "integrity": "sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "html-escaper": "^2.0.2", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/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==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/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==", + "license": "MIT" + }, + "node_modules/webpack-dev-middleware/node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/webpack-dev-middleware/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==", + "license": "MIT", + "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/webpack-hot-middleware": { + "version": "2.26.1", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz", + "integrity": "sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==", + "license": "MIT", + "dependencies": { + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/webpack-node-externals": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", + "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "license": "MIT" + }, + "node_modules/webpack/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack/node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" + }, + "node_modules/webpack/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "license": "ISC", + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/webpack/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/webpack/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==", + "license": "MIT" + }, + "node_modules/webpack/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/webpack/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/webpack/node_modules/loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "license": "MIT", + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/webpack/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack/node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", + "license": "MIT", + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/webpack/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/webpack/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/webpack/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "license": "MIT", + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/webpack/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/webpack/node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "license": "ISC", + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/webpack/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/webpack/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "license": "BSD-2-Clause", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/webpack/node_modules/terser-webpack-plugin": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.6.tgz", + "integrity": "sha512-2lBVf/VMVIddjSn3GqbT90GvIJ/eYXJkt8cTzU7NbjKqK8fwv18Ftr4PlbF46b/e88743iZFL5Dtr/rC4hjIeA==", + "license": "MIT", + "dependencies": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/webpack/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/webpackbar": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", + "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "consola": "^3.2.3", + "figures": "^3.2.0", + "markdown-table": "^2.0.0", + "pretty-time": "^1.1.0", + "std-env": "^3.7.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" + } + }, + "node_modules/webpackbar/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/webpackbar/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/webpackbar/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/webpackbar/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/webpackbar/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "license": "MIT", + "dependencies": { + "errno": "~0.1.7" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/write-json-file": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz", + "integrity": "sha512-84+F0igFp2dPD6UpAQjOUX3CdKUOqUzn6oE9sDBNzUXINR5VceJ1rauZltqQB/bcYsx3EpKys4C7/PivKUAiWQ==", + "license": "MIT", + "dependencies": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "pify": "^3.0.0", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/write-json-file/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/write-json-file/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/write-json-file/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/write-json-file/node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "license": "MIT", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xss": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz", + "integrity": "sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==", + "license": "MIT", + "optional": true, + "dependencies": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + }, + "bin": { + "xss": "bin/xss" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/xss/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==", + "license": "MIT", + "optional": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "license": "MIT", + "dependencies": { + "cuint": "^0.2.2" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "license": "ISC" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "license": "MIT", + "dependencies": { + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" + } + }, + "node_modules/z-schema/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "license": "MIT", + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..4e6bd76 --- /dev/null +++ b/package.json @@ -0,0 +1,67 @@ +{ + "name": "ostandari-portal", + "version": "1.0.0", + "private": false, + "scripts": { + "nodemon": "nodemon --watch server --exec \"nuxt start\"", + "nodemonDev": "nodemon --watch server --exec \"nuxt\"", + "dev": "nuxt", + "build": "nuxt build", + "start": "nuxt start", + "generate": "nuxt generate" + }, + "dependencies": { + "@coreui/coreui": "^3.2.2", + "@coreui/icons": "^2.0.0-beta.5", + "@coreui/utils": "^1.3.1", + "@coreui/vue": "^3.1.2", + "@coreui/vue-chartjs": "^1.0.5", + "@fingerprintjs/fingerprintjs": "^3.2.0", + "@ilovepdf/ilovepdf-nodejs": "^0.3.0", + "@nuxt/image": "^1.7.0", + "@nuxtjs/auth": "^4.9.1", + "@nuxtjs/auth-next": "5.0.0-1618898588.9655d0e", + "@nuxtjs/axios": "^5.13.1", + "archiver": "^5.3.0", + "axios": "^0.21.1", + "bcryptjs": "^2.4.3", + "ckeditor4-vue": "^1.3.0", + "convertapi": "^1.14.0", + "core-js": "^3.9.1", + "cors": "^2.8.5", + "element-ui": "^2.15.1", + "express": "^4.17.1", + "express-fileupload": "^1.2.1", + "express-validator": "^6.10.1", + "gsap": "^3.6.1", + "jquery": "^3.7.1", + "jsonwebtoken": "^8.5.1", + "lodash": "^4.17.21", + "lodash-contrib": "^4.1200.1", + "moment-jalaali": "^0.9.2", + "mongoose": "^5.12.5", + "mongoose-paginate-v2": "^1.3.18", + "nodemailer": "^6.6.0", + "nodemon": "^3.1.2", + "nuxt": "^2.15.3", + "nuxt-video-player": "^1.0.17", + "request-ip": "^2.1.3", + "sharp": "^0.28.1", + "slick-carousel": "^1.8.1", + "svg-captcha": "^1.4.0", + "swagger-jsdoc": "^6.2.8", + "swagger-ui-express": "^5.0.0", + "turn.js": "^1.0.5", + "uuid": "^8.3.2", + "vue-persian-datetime-picker": "^2.6.1", + "vue-slick-carousel": "^1.0.6", + "vue-social-sharing": "^3.0.8", + "vue-tree-chart": "^1.2.9", + "vue-turnjs": "^1.3.2" + }, + "devDependencies": { + "sass": "^1.77.3", + "sass-loader": "^10.1.0", + "webpack": "^4.46.0" + } +} diff --git a/pages/_portal/archive/index.vue b/pages/_portal/archive/index.vue new file mode 100644 index 0000000..1928489 --- /dev/null +++ b/pages/_portal/archive/index.vue @@ -0,0 +1,105 @@ + + + diff --git a/pages/_portal/category/_details.vue b/pages/_portal/category/_details.vue new file mode 100644 index 0000000..f521aee --- /dev/null +++ b/pages/_portal/category/_details.vue @@ -0,0 +1,643 @@ + + + diff --git a/pages/_portal/contact/index.vue b/pages/_portal/contact/index.vue new file mode 100644 index 0000000..7200821 --- /dev/null +++ b/pages/_portal/contact/index.vue @@ -0,0 +1,197 @@ + + + + + + diff --git a/pages/_portal/digital-books.vue b/pages/_portal/digital-books.vue new file mode 100644 index 0000000..14e5c2a --- /dev/null +++ b/pages/_portal/digital-books.vue @@ -0,0 +1,242 @@ + + + diff --git a/pages/_portal/feedback.vue b/pages/_portal/feedback.vue new file mode 100644 index 0000000..197fbd7 --- /dev/null +++ b/pages/_portal/feedback.vue @@ -0,0 +1,124 @@ + + + diff --git a/pages/_portal/newsfile/_details.vue b/pages/_portal/newsfile/_details.vue new file mode 100644 index 0000000..682913a --- /dev/null +++ b/pages/_portal/newsfile/_details.vue @@ -0,0 +1,182 @@ + + + + diff --git a/pages/_portal/pdfViewer/index.vue b/pages/_portal/pdfViewer/index.vue new file mode 100644 index 0000000..1cb2d22 --- /dev/null +++ b/pages/_portal/pdfViewer/index.vue @@ -0,0 +1,1367 @@ + + + + + diff --git a/pages/_portal/search/index.vue b/pages/_portal/search/index.vue new file mode 100644 index 0000000..de1bc0e --- /dev/null +++ b/pages/_portal/search/index.vue @@ -0,0 +1,266 @@ + + + + diff --git a/pages/_portal/services/election/index.vue b/pages/_portal/services/election/index.vue new file mode 100644 index 0000000..c98e1d0 --- /dev/null +++ b/pages/_portal/services/election/index.vue @@ -0,0 +1,217 @@ + + + + diff --git a/pages/_portal/services/index.vue b/pages/_portal/services/index.vue new file mode 100644 index 0000000..198736f --- /dev/null +++ b/pages/_portal/services/index.vue @@ -0,0 +1,33 @@ + + + diff --git a/pages/_portal/services/meeting/index.vue b/pages/_portal/services/meeting/index.vue new file mode 100644 index 0000000..8bfa933 --- /dev/null +++ b/pages/_portal/services/meeting/index.vue @@ -0,0 +1,138 @@ + + + + diff --git a/pages/_portal/videos/_video.vue b/pages/_portal/videos/_video.vue new file mode 100644 index 0000000..54037a0 --- /dev/null +++ b/pages/_portal/videos/_video.vue @@ -0,0 +1,149 @@ + + + + diff --git a/pages/_portal/videos/index.vue b/pages/_portal/videos/index.vue new file mode 100644 index 0000000..81cd04c --- /dev/null +++ b/pages/_portal/videos/index.vue @@ -0,0 +1,131 @@ + + + diff --git a/pages/admin/Login.vue b/pages/admin/Login.vue new file mode 100644 index 0000000..450f10c --- /dev/null +++ b/pages/admin/Login.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/pages/admin/backup/index.vue b/pages/admin/backup/index.vue new file mode 100644 index 0000000..219721b --- /dev/null +++ b/pages/admin/backup/index.vue @@ -0,0 +1,73 @@ + + + diff --git a/pages/admin/comments/_type/_details.vue b/pages/admin/comments/_type/_details.vue new file mode 100644 index 0000000..6634975 --- /dev/null +++ b/pages/admin/comments/_type/_details.vue @@ -0,0 +1,203 @@ + + + diff --git a/pages/admin/comments/_type/index.vue b/pages/admin/comments/_type/index.vue new file mode 100644 index 0000000..aca5355 --- /dev/null +++ b/pages/admin/comments/_type/index.vue @@ -0,0 +1,347 @@ + + + diff --git a/pages/admin/contactus/index.vue b/pages/admin/contactus/index.vue new file mode 100644 index 0000000..e7f3af3 --- /dev/null +++ b/pages/admin/contactus/index.vue @@ -0,0 +1,152 @@ + + + \ No newline at end of file diff --git a/pages/admin/contents/_details.vue b/pages/admin/contents/_details.vue new file mode 100644 index 0000000..9ec97fd --- /dev/null +++ b/pages/admin/contents/_details.vue @@ -0,0 +1,330 @@ + + + diff --git a/pages/admin/counterDay/index.vue b/pages/admin/counterDay/index.vue new file mode 100644 index 0000000..44a6f9b --- /dev/null +++ b/pages/admin/counterDay/index.vue @@ -0,0 +1,140 @@ + + + diff --git a/pages/admin/electionBtn/index.vue b/pages/admin/electionBtn/index.vue new file mode 100644 index 0000000..c326d35 --- /dev/null +++ b/pages/admin/electionBtn/index.vue @@ -0,0 +1,99 @@ + + + diff --git a/pages/admin/elections/_details.vue b/pages/admin/elections/_details.vue new file mode 100644 index 0000000..c039eba --- /dev/null +++ b/pages/admin/elections/_details.vue @@ -0,0 +1,875 @@ + + + + + + + + diff --git a/pages/admin/elections/index.vue b/pages/admin/elections/index.vue new file mode 100644 index 0000000..8757187 --- /dev/null +++ b/pages/admin/elections/index.vue @@ -0,0 +1,293 @@ + + + diff --git a/pages/admin/gallery/_details.vue b/pages/admin/gallery/_details.vue new file mode 100644 index 0000000..e412c06 --- /dev/null +++ b/pages/admin/gallery/_details.vue @@ -0,0 +1,792 @@ + + + diff --git a/pages/admin/gallery/index.vue b/pages/admin/gallery/index.vue new file mode 100644 index 0000000..f506a23 --- /dev/null +++ b/pages/admin/gallery/index.vue @@ -0,0 +1,436 @@ + + + diff --git a/pages/admin/homePageManagement/index.vue b/pages/admin/homePageManagement/index.vue new file mode 100644 index 0000000..e7edb70 --- /dev/null +++ b/pages/admin/homePageManagement/index.vue @@ -0,0 +1,440 @@ + + + diff --git a/pages/admin/homePageNews/index.vue b/pages/admin/homePageNews/index.vue new file mode 100644 index 0000000..5c6d5f2 --- /dev/null +++ b/pages/admin/homePageNews/index.vue @@ -0,0 +1,667 @@ + + + diff --git a/pages/admin/index.vue b/pages/admin/index.vue new file mode 100644 index 0000000..cc8e05d --- /dev/null +++ b/pages/admin/index.vue @@ -0,0 +1,159 @@ + + + diff --git a/pages/admin/links/_details.vue b/pages/admin/links/_details.vue new file mode 100644 index 0000000..b6eb5a4 --- /dev/null +++ b/pages/admin/links/_details.vue @@ -0,0 +1,334 @@ + + + diff --git a/pages/admin/links/index.vue b/pages/admin/links/index.vue new file mode 100644 index 0000000..31778d2 --- /dev/null +++ b/pages/admin/links/index.vue @@ -0,0 +1,204 @@ + + + \ No newline at end of file diff --git a/pages/admin/meeting/_details.vue b/pages/admin/meeting/_details.vue new file mode 100644 index 0000000..640cf67 --- /dev/null +++ b/pages/admin/meeting/_details.vue @@ -0,0 +1,172 @@ + + + diff --git a/pages/admin/meeting/index.vue b/pages/admin/meeting/index.vue new file mode 100644 index 0000000..fdf0f01 --- /dev/null +++ b/pages/admin/meeting/index.vue @@ -0,0 +1,327 @@ + + + diff --git a/pages/admin/news/_details.vue b/pages/admin/news/_details.vue new file mode 100644 index 0000000..c90ad53 --- /dev/null +++ b/pages/admin/news/_details.vue @@ -0,0 +1,794 @@ + + + diff --git a/pages/admin/news/index.vue b/pages/admin/news/index.vue new file mode 100644 index 0000000..87ce626 --- /dev/null +++ b/pages/admin/news/index.vue @@ -0,0 +1,490 @@ + + + diff --git a/pages/admin/newsFile/_details.vue b/pages/admin/newsFile/_details.vue new file mode 100644 index 0000000..4bf757c --- /dev/null +++ b/pages/admin/newsFile/_details.vue @@ -0,0 +1,378 @@ + + + diff --git a/pages/admin/newsFile/index.vue b/pages/admin/newsFile/index.vue new file mode 100644 index 0000000..4271186 --- /dev/null +++ b/pages/admin/newsFile/index.vue @@ -0,0 +1,327 @@ + + + diff --git a/pages/admin/occasion/_details.vue b/pages/admin/occasion/_details.vue new file mode 100644 index 0000000..de961a0 --- /dev/null +++ b/pages/admin/occasion/_details.vue @@ -0,0 +1,287 @@ + + + diff --git a/pages/admin/occasion/index.vue b/pages/admin/occasion/index.vue new file mode 100644 index 0000000..64832ab --- /dev/null +++ b/pages/admin/occasion/index.vue @@ -0,0 +1,320 @@ + + + diff --git a/pages/admin/pages/_details.vue b/pages/admin/pages/_details.vue new file mode 100644 index 0000000..a346b27 --- /dev/null +++ b/pages/admin/pages/_details.vue @@ -0,0 +1,694 @@ + + + diff --git a/pages/admin/pages/index.vue b/pages/admin/pages/index.vue new file mode 100644 index 0000000..fc391a3 --- /dev/null +++ b/pages/admin/pages/index.vue @@ -0,0 +1,202 @@ + + + diff --git a/pages/admin/pdfManagement/index.vue b/pages/admin/pdfManagement/index.vue new file mode 100644 index 0000000..8b7f936 --- /dev/null +++ b/pages/admin/pdfManagement/index.vue @@ -0,0 +1,265 @@ + + + + + diff --git a/pages/admin/polls/_details.vue b/pages/admin/polls/_details.vue new file mode 100644 index 0000000..109d287 --- /dev/null +++ b/pages/admin/polls/_details.vue @@ -0,0 +1,468 @@ + + + + + + diff --git a/pages/admin/polls/index.vue b/pages/admin/polls/index.vue new file mode 100644 index 0000000..92de880 --- /dev/null +++ b/pages/admin/polls/index.vue @@ -0,0 +1,289 @@ + + + diff --git a/pages/admin/slider/_details.vue b/pages/admin/slider/_details.vue new file mode 100644 index 0000000..63cd013 --- /dev/null +++ b/pages/admin/slider/_details.vue @@ -0,0 +1,382 @@ + + + diff --git a/pages/admin/slider/index.vue b/pages/admin/slider/index.vue new file mode 100644 index 0000000..80bb7f2 --- /dev/null +++ b/pages/admin/slider/index.vue @@ -0,0 +1,204 @@ + + + \ No newline at end of file diff --git a/pages/admin/socialLinks/index.vue b/pages/admin/socialLinks/index.vue new file mode 100644 index 0000000..beeddd2 --- /dev/null +++ b/pages/admin/socialLinks/index.vue @@ -0,0 +1,129 @@ + + + diff --git a/pages/admin/users/_profile.vue b/pages/admin/users/_profile.vue new file mode 100644 index 0000000..226d0a0 --- /dev/null +++ b/pages/admin/users/_profile.vue @@ -0,0 +1,584 @@ + + + diff --git a/pages/admin/users/index.vue b/pages/admin/users/index.vue new file mode 100644 index 0000000..4c82939 --- /dev/null +++ b/pages/admin/users/index.vue @@ -0,0 +1,307 @@ + + + diff --git a/pages/admin/yearBanner/index.vue b/pages/admin/yearBanner/index.vue new file mode 100644 index 0000000..a01eef7 --- /dev/null +++ b/pages/admin/yearBanner/index.vue @@ -0,0 +1,113 @@ + + + diff --git a/plugins/ckEditor.client.js b/plugins/ckEditor.client.js new file mode 100644 index 0000000..4c10cbb --- /dev/null +++ b/plugins/ckEditor.client.js @@ -0,0 +1,4 @@ +import Vue from 'vue' +import CKEditor from 'ckeditor4-vue' + +Vue.use(CKEditor) diff --git a/plugins/core-ui.client.js b/plugins/core-ui.client.js new file mode 100644 index 0000000..856feb5 --- /dev/null +++ b/plugins/core-ui.client.js @@ -0,0 +1,11 @@ +import Vue from 'vue' +import CoreUi from '@coreui/vue' +import CoreUiVueCharts from '@coreui/vue-chartjs' +import {iconsSet as icons} from '../assets/admin/icons/icons.js' + +Vue.use(CoreUiVueCharts) +Vue.use(CoreUi) + +export default ({app}) => { + app.icons = icons +} diff --git a/plugins/datePicker.client.js b/plugins/datePicker.client.js new file mode 100644 index 0000000..43fc1ad --- /dev/null +++ b/plugins/datePicker.client.js @@ -0,0 +1,18 @@ +import Vue from 'vue' +import VuePersianDatetimePicker from 'vue-persian-datetime-picker'; +Vue.use(VuePersianDatetimePicker , { + name : 'date-picker', + props: { + inputFormat: 'YYYY-MM-DD', + format: 'jYYYY-jMM-jDD', + editable: false, + inputClass: 'form-control my-custom-class-name', + placeholder: 'انتخاب تاریخ', + altFormat: 'YYYY-MM-DD', + color: '#409EFF', + autoSubmit: false, + //... + //... And whatever you want to set as default + //... + } +}); \ No newline at end of file diff --git a/plugins/element-ui.js b/plugins/element-ui.js new file mode 100644 index 0000000..4bbf940 --- /dev/null +++ b/plugins/element-ui.js @@ -0,0 +1,5 @@ +import Vue from 'vue' +import Element from 'element-ui' +import locale from 'element-ui/lib/locale/lang/fa' + +Vue.use(Element, { locale }) diff --git a/plugins/gsap.client.js b/plugins/gsap.client.js new file mode 100644 index 0000000..ac1089c --- /dev/null +++ b/plugins/gsap.client.js @@ -0,0 +1,11 @@ +import Vue from 'vue'; +import gsap from 'gsap'; +import ScrollToPlugin from 'gsap/src/ScrollToPlugin' + +gsap.registerPlugin(ScrollToPlugin) +Vue.prototype.$gsap = gsap + +export default (context, inject) => { + context.app.$gsap = gsap +} + diff --git a/plugins/jquery.js b/plugins/jquery.js new file mode 100644 index 0000000..55babc4 --- /dev/null +++ b/plugins/jquery.js @@ -0,0 +1,8 @@ +import Vue from 'vue'; + +if (process.client) { + const jQuery = require('jquery'); + global.$ = jQuery; + global.jQuery = jQuery; + Vue.prototype.$ = jQuery; +} diff --git a/plugins/vue-turnjs.client.js b/plugins/vue-turnjs.client.js new file mode 100644 index 0000000..12005e8 --- /dev/null +++ b/plugins/vue-turnjs.client.js @@ -0,0 +1,4 @@ +import Vue from "vue"; +import VueTurnJS from "vue-turnjs"; + +Vue.component("VueTurnJS", VueTurnJS); diff --git a/server/authentication.js b/server/authentication.js new file mode 100644 index 0000000..a9c91a2 --- /dev/null +++ b/server/authentication.js @@ -0,0 +1,166 @@ +const jwt = require('jsonwebtoken') +const User = require('./models/User'); +const {res500} = require('./plugins/controllersHelperFunctions'); +const Category = require('./models/Category'); +const Election = require('./models/Election'); + +const authentication = { + // secret for generating jwt token + secretKey: 'kyQa8pFI5BJnj7LCVPlSfoATTSZuS5DMSjgBPxQo2zkcdKnxKCPzWs1DEBgMfnXFsjgT0YWgqn8HgLLcmdIgSR6fSQpy6vchmY3kUSD564J', + // check if just logged in (admin-or-user) (middleware) + isLoggedIn: async function (req, res, next) { + try { + const token = req.headers.authorization?.replace(/^Bearer\s/, ''); + if (token) { + // check if token is not destroyed + var user = await User.findOne({token: token}); + + if (!user) { + return res.status(401).json({message: 'unauthorized'}); + } + + if (!user.registration_done) { + return res500(res, 'user is disable please contact to support'); + } + + //verifies secret and checks if the token is expired + try { + var checkToken = await jwt.verify(user.token.replace(/^Bearer\s/, ''), authentication.secretKey); + + if (!checkToken) { + return res.status(401).json({message: 'unauthorized'}); + } + } catch (error) { + return res.status(401).json({message: 'unauthorized'}); + } + + req.user = { + _id: user._id, + scope: user.scope, + portals: user.portals, + permissions: user.permissions, + specialPermissions: user.specialPermissions, + private: user.private + }; + + return next(); + } else { + return res.status(401).json({message: 'unauthorized'}); + } + } catch (error) { + return res500(res, error.message); + } + }, + // check if admin logged in (middleware) + isAdmin: async function (req, res, next) { + /** if req.user exist find user and check scope */ + /** req.user send from isLoggedIn */ + try { + if (req.user) { + const scope = req.user.scope; + + if (!scope.includes('admin')) { + return res.status(401).json({message: 'unauthorized'}); + } + + return next() + } else { + return res.status(401).json({message: 'unauthorized'}); + } + } catch (error) { + return res.status(401).json({message: 'unauthorized'}); + } + }, + // check if user has permission (middleware) + hasPermission: (permission) => { + return (req, res, next) => { + if (req.user && req.user.permissions) { + const permissions = req.user.permissions; + if (permissions.includes('superAdmin')) { + return next(); + } + if (!permissions.includes(permission)) { + return res.status(401).json({message: 'unauthorized'}); + } else { + return next(); + } + } else { + return res.status(401).json({message: 'unauthorized'}); + } + } + }, + // hasSpecPermission: () => { + // return async (req, res, next) => { + // if (req.user && req.user.specialPermissions.length) { + // const specialPermissions = req.user.specialPermissions; + // if (req.user.permissions.includes('superAdmin')) { + // return next(); + // } + // let tempSpec = []; + // for (const spec of specialPermissions) { + // const check = await Category.findById(spec); + // + // if (check){ + // tempSpec.push(check._id); + // } + // } + // + // if (tempSpec.length){ + // req.user.allSpecialPermissions = tempSpec; + // next(); + // }else { + // return res.status(401).json({message: 'unauthorized'}); + // } + // } else { + // return next(); + // } + // } + // }, + hasSubPermission: () => { + return (req, res, next, value) => { + if (req.user && req.user.permissions) { + var permissions = req.user.permissions; + if (permissions.includes('superAdmin')) { + return next(); + } + if (!permissions.some(item => new RegExp(value, 'i').test(item))) { + return res.status(401).json({message: 'unauthorized'}); + } else { + return next(); + } + } else { + return res.status(401).json({message: 'unauthorized'}); + } + } + }, + isVoter: async function (req, res, next) { + try { + const token = req.headers.authorization?.replace(/^Bearer\s/, ''); + if (token) { + // check if token is not destroyed + const user = await Election.findOne({'voters': {$elemMatch: {_id: token}}}); + + if (!user) { + return res.status(401).json({message: 'unauthorized'}); + } + + const voter = user.voters.id(token); + + req.voter = { + _id: voter._id, + username: voter.username, + password: voter.password, + voted: voter.voted + }; + + return next(); + } else { + return res.status(401).json({message: 'unauthorized'}); + } + } catch (error) { + return res500(res, error.message); + } + }, +} + +module.exports = authentication diff --git a/server/controllers/captchaController.js b/server/controllers/captchaController.js new file mode 100644 index 0000000..274aa84 --- /dev/null +++ b/server/controllers/captchaController.js @@ -0,0 +1,28 @@ +const Captcha = require('../models/Captcha'); +const svgCaptcha = require('svg-captcha'); +const {_sr} = require('../plugins/serverResponses'); +const {res404, res500, generateRandomDigits} = require('../plugins/controllersHelperFunctions'); + +const svgWidth = 50; +const svgHeight = 20; + +module.exports.getCaptcha = [ + async (req, res) => { + try { + const generateCaptcha = svgCaptcha.create({ + size : 6, + noise : 2 + }); + + const saveCaptcha = await Captcha.create({code : generateCaptcha.text}); + + if (saveCaptcha){ + return res.json(generateCaptcha.data); + }else { + return res500(res , `مشکلی در اجرای درخواست شما پیش آمده است`); + } + }catch (e) { + return res500(res , `مشکلی در اجرای درخواست شما پیش آمده است`); + } + } +] diff --git a/server/controllers/categoryController.js b/server/controllers/categoryController.js new file mode 100644 index 0000000..486ddbb --- /dev/null +++ b/server/controllers/categoryController.js @@ -0,0 +1,1140 @@ +const Category = require('../models/Category'); +const Content = require('../models/Content'); +const {body, validationResult} = require('express-validator'); +const {_sr} = require('../plugins/serverResponses'); +const {res404, res500, checkValidations} = require('../plugins/controllersHelperFunctions'); +const News = require('../models/News'); +const sharp = require('sharp') +const fs = require('fs') + + +// variables +const titleFilterRegex = new RegExp('/', 'g') +const noCover = '/img/no-cover.jpg' +const coverNewsWidth = 400; +const coverNewsHeight = 400; +const coverQuality = 100; +////////////////// functions +const _customTitle = async (categories) => { + try { + const newCatArr = []; + for (const item of categories) { + const title = []; + const treeCat = item.treeCat; + + for (let i = treeCat.length - 1; i >= 0; i--) { + title.push(treeCat[i].title); + } + + title.push(item.title); + + item.title = title.join(" >> "); + + newCatArr.push(item); + } + + return newCatArr; + } catch (error) { + console.log(error) + return [] + } +} + +/** یک آرایه داریم که خونه اول رو میگیریم و میریزیم داخل آرایه جدید بعد داخل فور دوم کل آرایه رو طی میکنیم + * و اونایی که قسمتی از تایتل دیتای پوش شده داخل آرایه جدید رو دارن داخل این آرایه جدید پوش میکنیم + */ + +// todo this is peace of shit please change it in future +const _sortedCategory = async (categories) => { + try { + let sortedArr = []; + + // let clone = JSON.parse(JSON.stringify(categories)); + // + // for (const cat of clone) { + // if (cat.parent){ + // let getParent = categories.find(item => item._id === cat.parent._id) + // } + // } + + for (let i = 0; i < categories.length; i++) { + if (!sortedArr.includes(categories[i]) && !categories[i].parent) { + sortedArr.push(categories[i]); + } + for (let j = 0; j < categories.length; j++) { + if (categories[i].childs.includes(categories[j]._id) && !sortedArr.includes(categories[j])) { + sortedArr.push(categories[j]); + } + } + } + + if (sortedArr.length !== categories.length) { + for (const cat of categories) { + if (!sortedArr.includes(cat)) { + sortedArr.push(cat); + } + } + } + + return sortedArr; + } catch (error) { + console.log(error) + return [] + } +} + +const _checkSpecPermission = async (req, category) => { + return !req.user.specialPermissions.includes(category._id) && //check parent id exist in special permissions or not + !req.user.specialPermissions.some(item => category?.treeCat?.join().includes(item)); +} +/////////////////////////////////////////////////////////////////////// admin +module.exports.addCategory = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title) + .custom((value, { + req + }) => { + return Category.findOne({ + title: value + }) + .then(category => { + if (category) return Promise.reject(_sr['fa'].duplicated.title); + else return true + }) + }), + + body('parent') + .optional().isString().withMessage(`parent ${_sr['fa'].optional.string}`), + + // body('showInMenu') + // .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('navIndex') + .optional().isNumeric().withMessage(_sr['fa'].format.number), + + body('priority') + .isNumeric().withMessage(_sr['fa'].format.number), + + // body('showInSectionOne') + // .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + // + // body('showInSectionTwo') + // .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + // + // body('showInSectionThree') + // .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('siteMap') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('special') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('url') + .optional().isString().withMessage(`url ${_sr['fa'].optional.string}`), + + body('pageContent') + .optional().isString().withMessage(`pageContent ${_sr['fa'].optional.string}`), + + body('news') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('child') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasNewsTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasContentTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasMediaTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasSubMenusTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasTermsTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasNotificationsTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasSpecNewsTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasNazarTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasNewsFileTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('modelType') + .custom((value, { + req + }) => { + if (req.user.portals.join() === portal.join()) { + if (!portal.includes(value)) { + return Promise.reject(_sr['fa'].required.field); + } else { + return true + } + } else { + return true + } + }) + + ], + checkValidations(validationResult), + async (req, res) => { + try { + let { + title, + parent, + // showInMenu, + navIndex, + priority, + // showInSectionOne, + // showInSectionTwo, + // showInSectionThree, + siteMap, + special, + modelType, + showInFooter, + url, + pageContent, + news, + child, + hasNewsTab, + hasContentTab, + hasMediaTab, + hasSubMenusTab, + hasTermsTab, + hasNotificationsTab, + hasSpecNewsTab, + hasNazarTab, + hasNewsFileTab, + defaultPageType, + hasManagerInfo, + managerName, + managerDescription + } = req.body; + + ///////////// permissions + if (req.user.specialPermissions.length && _.isEmpty(parent)) { + return res.status(403).json({ + message: `شما مجاز به اضافه کردن دسته بندی اصلی نیستید` + }); + } + + // if (req.user.specialPermissions.length && !_.isEmpty(parent) && !req.user.permissions.includes('categories-add')){ + // return res.status(403).json(`شما اجازه اضافه کردن یک دسته بندی جدید را ندارید`); + // } + + /** set portals */ + modelType = (req.user.portals.join() === portal.join()) ? modelType : req.user.portals[0]; + + /** only one category can be in to the section one and two */ + // if (showInSectionOne === true) { + // await _checkOtherSection('one'); + // } + // + // if (showInSectionTwo === true) { + // await _checkOtherSection('two'); + // } + + const catData = { + title: title.trim().replace(titleFilterRegex, '-'), + priority: priority, + parent: parent || null, + // showInMenu: showInMenu, + navIndex: navIndex, + siteMap: siteMap, + special: special, + showInFooter, + url, + // showInSectionOne, + // showInSectionTwo, + // showInSectionThree, + pageContent, + modelType, + news, + child, + hasNewsTab, + hasContentTab, + hasMediaTab, + hasSubMenusTab, + hasTermsTab, + hasNotificationsTab, + hasSpecNewsTab, + hasNazarTab, + hasNewsFileTab, + defaultPageType, + hasManagerInfo, + managerName, + managerDescription, + _creator: req.user._id, + _updatedBy: req.user._id + } + + let getParent; + + if (parent) { + /** + * check parent exist or not + */ + getParent = await Category.findById(parent) + // .populate({ + // path: 'parent', + // populate: { + // path: 'parent', + // model: 'Category' + // } + // }); + + /** + * if not found show error + */ + if (!getParent) return res404(res, `دسته بندی پدر پیدا نشد`); + + ////// start permissions + /** check special permission */ + if (req.user.specialPermissions.length && await _checkSpecPermission(req, getParent)) { + return res.status(403).json({ + message: `شما اجازه اضافه کردن فرزند جدید برای این دسته بندی را ندارید` + }); + } + + /** check can add child */ + if (!getParent.child) return res.status(403).json({message: `این دسته بندی نمی تواند زیرمجموعه داشته باشد`}); + + + /** check access portal */ + if (!req.user.portals.includes(getParent.modelType)) return res.status(403).json({ + message: `شما اجازه انتخاب این دسته بندی را ندارید` + }); + + + /** check type */ + if (getParent.modelType !== modelType) return res500(res, `شما اجازه استفاده این دسته بندی به عنوان سردسته را ندارید`); + ////// end permissions + + /** + * add level of new category + */ + catData.level = Number(getParent.level) + 1; + + + /** add tree cat */ + // catData.treeCat = await _makeTreeCat(getParent); + const treeCatClone = JSON.parse(JSON.stringify(getParent.treeCat)) + treeCatClone.push(getParent._id) + catData.treeCat = treeCatClone + catData.rootParent = getParent.rootParent || getParent._id + } + + /** + * add new category + */ + const create = await Category.create(catData); + /** + * check added or not + */ + if (!create) return res500(res, `مشکلی در ثبت اطلاعات پیش آمده لطفا دوباره تلاش کنید`); + + /** + * if have parent should added new category in child of parent category + * and set level for new category + */ + if (getParent) { + /** + * add new category for parent + */ + getParent.childs.push(create._id); + await getParent.save(); + } + + if (req.files?.managerCover) { + const image = req.files.managerCover; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { + cover: { + msg: _sr['fa'].format.image + } + } + }); + } + const imageName = `manager_${Date.now()}_${create._id}.${image.mimetype.split('/')[1]}`; + try { + const target = sharp(image.data) + await target + .resize(coverNewsWidth, coverNewsHeight, {fit: 'cover'}) + .jpeg({quality: coverQuality}) + .toFile(`./static/uploads/images/category/${imageName}`); + + + /** + * if exist old pic delete it from file + */ + // if (targetNews.cover !== noCover && !targetNews.imported) { + // let oldPic = `./static${targetNews.cover}`; + // + // if (await fs.existsSync(oldPic)) { + // fs.unlink(oldPic, (err) => { + // if (err) return res500(res, err?.message); + // }); + // } + // } + + // if (targetNews.thumbCover !== noCover && !targetNews.imported) { + // let oldPic = `./static${targetNews.thumbCover}`; + // + // if (await fs.existsSync(oldPic)) { + // fs.unlink(oldPic, (err) => { + // if (err) return res500(res, err?.message); + // }); + // } + // } + + create.managerCover = imageName; + await create.save() + } catch (e) { + return res500(res, e?.message); + } + } + + + /** + * show result + */ + return res.json(create); + } catch (error) { + console.log(error); + /** + * if we got unkown error show to client + */ + res500(res, error.message); + } + } +] + +module.exports.updateCategory = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title), + + // body('parent') + // .optional().isString().withMessage(`parent ${_sr['fa'].optional.string}`), + + // body('showInMenu') + // .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('navIndex') + .isNumeric().withMessage(_sr['fa'].format.number), + + body('priority') + .isNumeric().withMessage(_sr['fa'].format.number), + + // body('showInSectionOne') + // .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + // body('showInSectionTwo') + // .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + // body('showInSectionThree') + // .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('siteMap') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('special') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('showInFooter') + .isNumeric().withMessage(_sr['fa'].format.number) + .bail() + .isIn([0, 1, 2, 3]).withMessage(`از بین اعداد 1و2و3 یک عدد ارسال کنید`), + + body('url') + .optional().isString().withMessage(`url ${_sr['fa'].optional.string}`), + + body('pageContent') + .optional().isString().withMessage(`pageContent ${_sr['fa'].optional.string}`), + + body('news') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('child') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasNewsTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasContentTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasMediaTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasSubMenusTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasTermsTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasNotificationsTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasSpecNewsTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasNazarTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('hasNewsFileTab') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + ], + checkValidations(validationResult), + async (req, res) => { + try { + + /** + * get data from input + */ + let { + title, + parent, + // showInMenu, + navIndex, + priority, + // showInSectionOne, + // showInSectionTwo, + // showInSectionThree, + siteMap, + special, + showInFooter, + url, + pageContent, + news, + child, + hasNewsTab, + hasContentTab, + hasMediaTab, + hasSubMenusTab, + hasTermsTab, + hasNotificationsTab, + hasSpecNewsTab, + hasNazarTab, + hasNewsFileTab, + defaultPageType, + hasManagerInfo, + managerName, + managerDescription + } = req.body; + + /** + * get id + */ + const catId = req.params.id; + + ////////// permissions + // if (req.user.specialPermissions.length && !req.user.permissions.includes('categories-update')){ + // return res.status(403).json(`شما اجازه بروزرسانی این دسته بندی را ندارید`); + // } + + /** + * check category exist or not + */ + const targetCategory = await Category.findOne({ + _id: catId + }); + + if (!targetCategory) return res404(res, `دسته بندی مورد نظر پیدا نشد`); + + /** check special permission */ + if (req.user.specialPermissions.length && await _checkSpecPermission(req, targetCategory)) { + return res.status(403).json({ + message: `شما اجازه بروزرسانی این دسته بندی را ندارید` + }); + } + + /** check access portal */ + if (!req.user.portals.includes(targetCategory.modelType)) { + return res.status(403).json({ + message: `شما اجازه آپدیت این دسته بندی را ندارید` + }); + } + + /** only one category can be in to the section one and two */ + // if (showInSectionOne === 'true') { + // targetCategory.showInSectionOne = await _checkOtherSection('one'); + // } + + // if (showInSectionTwo === 'true') { + // targetCategory.showInSectionTwo = await _checkOtherSection('two'); + // } + + + if (targetCategory.title !== title) { + const checkDuppTitle = await Category.findOne({ + title: title + }); + + if (checkDuppTitle) { + return res.status(422).json({validation: {title: {msg: _sr['fa'].duplicated.title}}}); + } + } + + // if(parent != null && targetCategory.parent != null && parent != targetCategory.parent) { + + // /** check have news or not */ + // var checkHaveNews = await News.find({allCat : [targetCategory._id]}); + + // if(checkHaveNews.length){ + // return res.status(403).json({message :`این دسته بندی دارای اخبار می باشد و شما نمیتوانید دسته بندی والد آن را تغییر دهید لطفا ابتدا اخبار را حذف کرده سپس این کار را انجام دهید`}); + // } + + // /** + // * check new parent + // */ + // var newParentCategory = await Category.findOne({_id : parent}); + + // if(!newParentCategory){ + // return res404(res,`دسته بندی انتخاب شده پیدا نشد`); + // }; + + + // if(newParentCategory.treeCat.includes(targetCategory._id)){ + // return res.status(422).json({validation : {parent : {msg : ``}}}) + // } + + // /** + // * get category parent + // */ + // if(targetCategory.parent){ + // var parentCategory = await Category.findOne({_id : targetCategory.parent}); + + // if(parentCategory){ + // /** + // * delete catId from old category + // */ + // const index = parentCategory.childs.indexOf(targetCategory._id); + // if (index > -1) { + // parentCategory.childs.splice(index, 1); + + // await parentCategory.save(); + // } + // } + // } + + // if(!newParentCategory.child){ + // return res.status(403).json({message :`این دسته بندی اجازه داشتن زیرمجموعه ندارد`}); + // } + + // /** check access portal */ + // if(!req.user.portals.includes(newParentCategory.modelType)){ + // return res.status(403).json({message :`شما اجازه انتخاب این دسته بندی را ندارید`}); + // } + + // /** check type */ + // if(newParentCategory.modelType != modelType){ + // return res.status(403).json({message :`شما اجازه استفاده این دسته بندی به عنوان سردسته را ندارید`}); + // } + + // /** + // * add catId for new parnet + // */ + // newParentCategory.childs.push(targetCategory._id); + // await newParentCategory.save(); + + // /** + // * update level + // */ + // targetCategory.level = newParentCategory.level + 1; + // } + + /** + * make update object + */ + targetCategory.title = title.trim().replace(titleFilterRegex, '-'); + // targetCategory.showInMenu = showInMenu; + targetCategory.navIndex = navIndex; + targetCategory.priority = priority; + // targetCategory.showInSectionOne = showInSectionOne; + // targetCategory.showInSectionTwo = showInSectionTwo; + // targetCategory.showInSectionThree = showInSectionThree; + targetCategory.siteMap = siteMap; + targetCategory.special = special; + targetCategory._creator = req.user._id; + targetCategory._updatedBy = req.user._id; + targetCategory.showInFooter = showInFooter; + targetCategory.pageContent = pageContent; + targetCategory.child = child; + targetCategory.url = url; + targetCategory.news = news; + targetCategory.hasNewsTab = hasNewsTab; + targetCategory.hasContentTab = hasContentTab; + targetCategory.hasMediaTab = hasMediaTab; + targetCategory.hasSubMenusTab = hasSubMenusTab; + targetCategory.hasTermsTab = hasTermsTab; + targetCategory.hasNotificationsTab = hasNotificationsTab; + targetCategory.hasSpecNewsTab = hasSpecNewsTab; + targetCategory.hasNazarTab = hasNazarTab; + targetCategory.hasNewsFileTab = hasNewsFileTab; + targetCategory.defaultPageType = defaultPageType; + + targetCategory.hasManagerInfo = hasManagerInfo; + targetCategory.managerName = managerName; + targetCategory.managerDescription = managerDescription; + + + if (req.files?.managerCover) { + const image = req.files.managerCover; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { + cover: { + msg: _sr['fa'].format.image + } + } + }); + } + const imageName = `manager_${Date.now()}_${targetCategory._id}.${image.mimetype.split('/')[1]}`; + try { + const target = sharp(image.data) + await target + .resize(coverNewsWidth, coverNewsHeight, {fit: 'cover'}) + .jpeg({quality: coverQuality}) + .toFile(`./static/uploads/images/category/${imageName}`); + + + /** + * if exist old pic delete it from file + */ + if (targetCategory.managerCover !== noCover) { + let oldPic = `./static${targetCategory.managerCover}`; + + if (await fs.existsSync(oldPic)) { + fs.unlink(oldPic, (err) => { + if (err) return res500(res, err?.message); + }); + } + } + + targetCategory.managerCover = imageName; + } catch (e) { + return res500(res, e?.message); + } + } + + await targetCategory.save(); + + /** + * show result + */ + return res.json(targetCategory); + + } catch (error) { + return res500(res, error.message); + } + } +] + +module.exports.deletOneCategory = [ + async (req, res) => { + try { + const catId = req.params.id; + + /** + * check category + */ + const targetCategory = await Category.findOne({ + _id: catId + }); + + if (!targetCategory) { + return res404(res, `دسته بندی مورد نظر پیدا نشد`); + } + + /** check special permission */ + if (req.user.specialPermissions.length && await _checkSpecPermission(req, targetCategory)) { + return res.status(403).json({ + message: `شما اجازه حذف این دسته بندی را ندارید` + }); + } + + /** check access portal */ + if (!req.user.portals.includes(targetCategory.modelType)) { + return res.status(403).json({ + message: `شما اجازه حذف این دسته بندی را ندارید` + }); + } + + /** check special permissions */ + if (req.user.specialPermissions.includes(targetCategory._id) && !targetCategory.parent) { + return res.status(403).json({ + message: `شما اجازه حذف این دسته بندی را ندارید` + }); + } + + /** check owner ship */ + if (req.user.specialPermissions.includes(targetCategory._id) && targetCategory.parent !== req.user._id) { + return res.status(403).json({ + message: `شما اجازه حذف این دسته بندی را ندارید` + }); + } + + const checkHaveNews = await News.find({ + allCat: [targetCategory._id] + }); + + if (checkHaveNews.length) { + return res.status(403).json({ + message: `دسته بندی شما دارای خبر می باشد و قبل از حذف آن باید اخبار مربوط به این دسته بندی را حذف کنید` + }); + } + + if (targetCategory.childs.length) { + return res.status(403).json({ + message: `دسته بندی مورد نظر دارای زیرمجموعه می باشد ابتدا زیرمجوعه ها را حذف کنید` + }); + } + + /** + * get category parent + */ + if (targetCategory.parent) { + const categoryParent = await Category.findOne({ + _id: targetCategory.parent + }); + + if (categoryParent) { + /** + * delete catId from category parent + */ + const index = categoryParent.childs.indexOf(targetCategory._id); + if (index > -1) { + categoryParent.childs.splice(index, 1); + + await categoryParent.save(); + } + } + } + + /** + * delete category + */ + targetCategory.delete(); + + /** + * show result + */ + return res.json(targetCategory); + + } catch (error) { + /** + * if we got unkown error show to client + */ + res500(res, error); + } + } +] + +module.exports.deleteAllCategory = [ + async (req, res) => { + try { + + } catch (error) { + /** + * if we got unkown error show to client + */ + res500(res, error); + } + } +] + +module.exports.getOneCategory = [ + async (req, res) => { + try { + const catId = req.params.id; + + /** + * get category + */ + const targetCategory = await Category.findOne({ + _id: catId + }); + + /** + * if not exist + */ + if (!targetCategory) { + return res404(res, `دسته بندی مورد نظر پیدا نشد`); + } + + /** check access portal */ + if (!req.user.portals.includes(targetCategory.modelType)) { + return res.status(403).json({ + message: `شما اجازه دسترسی به اطلاعات این دسته بندی را ندارید` + }); + } + + /** + * show result + */ + return res.json(targetCategory); + } catch (error) { + /** + * if we got unkown error show to client + */ + res500(res, error); + } + } +] + +module.exports.getAll = [ + async (req, res) => { + try { + + const findQuery = {}; + let populate = {}; + + if (req.user.specialPermissions.length) { + findQuery._id = {$in: req.user.specialPermissions}; + } else { + findQuery.parent = null; + // populate = { + // path: 'childs', + // populate: { + // path: 'childs' + // } + // }; + } + + if (req.user.portals.join() !== portal.join()) { + findQuery.modelType = req.user.portals[0]; + } + + /** + * get all category + */ + const getAll = await Category.find(findQuery).populate('').sort({ + navIndex: 1 + }); + + /** + * این قسمت ابجکت های تکراری را از بین میبره + */ + // if (req.user.specialPermissions.length) { + // /** جدا کردن دسته بندی های اصلی */ + // const parents = getAll.filter((item) => !item.parent); + // /** جدا کردن دسته بندی های غیر اصلی */ + // const nonParents = getAll.filter((item) => item.parent); + // + // /** با یک لوپ تو در تو اگر دسته بندی غیر اصلی در فرزندان دسته بندی اصلی وجود داشت حذف میشه */ + // for (let i = 0; i < nonParents.length; i++) { + // for (let j = 0; j < parents.length; j++) { + // if (nonParents[i].treeCat.includes(parents[j]._id)) { + // getAll.splice(getAll.findIndex(item => item._id === nonParents[i]._id), 1); + // } + // } + // } + // } + + /** + * show result + */ + return res.json(getAll); + } catch (error) { + return res500(res, error.message); + } + } +] + +module.exports.search = [ + async (req, res) => { + try { + const term = req.body?.term?.toString().trim() || ''; + + /** + * search + */ + const search = await Category.find({ + title: { + $regex: '.*' + term + '.*', + $options: 'i' + }, + modelType: 'normal', + type: 'category' + }); + + /** + * show result + */ + return res.json(search); + } catch (error) { + return res500(res, error.message); + } + } +] + +module.exports.permissions = [ + async (req, res) => { + try { + const type = req.query.type; + + const findQuery = type ? { + modelType: type + } : {}; + + const categories = await Category.find(findQuery).populate('treeCat').sort({navIndex: 1}).lean(); + + let changeTitles = await _customTitle(categories); + + let sortedCats = await _sortedCategory(changeTitles); + + return res.json(sortedCats); + } catch (error) { + res500(res, error?.message); + } + } +] + +module.exports.getParent = [ + async (req, res) => { + try { + + const findQuery = {}; + + const type = req.query.type; + + // findQuery.parent = null; + + if (req.user.specialPermissions.length) { + findQuery.$or = [ + { + _id: { + $in: req.user.specialPermissions + } + } + ] + } + + if (req.user.portals.length) { + findQuery.modelType = { + $in: req.user.portals + }; + } + + if (type && type === 'news') { + findQuery.news = true; + } + + if (type && type === 'child') { + findQuery.child = true; + } + + /** + * get all category + */ + const getAll = await Category.find(findQuery).populate('parent').populate('treeCat').sort({navIndex: 1}); + + + let changeTitles = await _customTitle(getAll); + + let sortedCats = await _sortedCategory(changeTitles); + + /** + * show result + */ + return res.json(sortedCats); + } catch (error) { + return res500(res, error?.message); + } + } +] + +//////////// add attachment file to category +module.exports.addTermsFileToCategory = [ + [ + body('termsTitle') + .notEmpty().withMessage(_sr['fa'].required.title) + ], + checkValidations(validationResult), + (req, res) => { + if (!req.files?.file) return res.status(422).json({validation: {file: {msg: _sr['fa'].required.file}}}) + if (req.files?.file.mimetype.split('/')[1] !== 'pdf') return res.status(422).json({validation: {file: {msg: 'فقط فرمت PDF قابل قبول است'}}}) + + const data = {title: req.body.termsTitle} + const file = req.files.file + const fileName = req.body.termsTitle.replace(titleFilterRegex, '-') + '_' + Date.now() + '.pdf' + file.mv(`./static/uploads/files/terms/${fileName}`) + data.file = fileName + + Category.findById(req.params.categoryId, (err, category) => { + if (err || !category) return res404(res, err) + category.terms.push(data) + category.save(err => { + if (err) return res500(res, err) + else return res.json({message: _sr['fa'].response.success_save}) + }) + }) + } +] + +module.exports.removeTermsFileFromCategory = [ + (req, res) => { + Category.findOne({'terms._id': req.params.fileId}, (err, category) => { + if (err || !category) return res404(res, err) + const file = category.terms.id(req.params.fileId) + if (!file) return res404(res, 'not found') + file.remove() + fs.unlink(`./static/${file.file}`, err => { + if (err) console.log(err) + }) + category.save(err => { + if (err) return res500(res, err) + else return res.json({message: _sr['fa'].response.success_remove}) + }) + }) + } +] + +/////////////////////////////////////////////////////////////////////// public +module.exports.getMenu = [ + async (req, res) => { + try { + const portal = req.query?.portal || 'ostandari'; + + const findQuery = { + parent: null, + // showInMenu: true, + modelType: portal + }; + let result = {}; + /** + * get all category + */ + const getAll = await Category.find(findQuery).populate('treeCat').sort({ + navIndex: 1, + // created_at: 1 + }).select('title childs navIndex url modelType treeCat defaultPageType'); + + /// get all page content + const getContent = await Content.find({showInMenu : true}) + + result.categories = getAll; + result.staticContents = !!getContent.length; + + + /** + * show result + */ + return res.json(result) + } catch (error) { + return res500(res, error.message); + } + } +] diff --git a/server/controllers/commentController.js b/server/controllers/commentController.js new file mode 100644 index 0000000..a185977 --- /dev/null +++ b/server/controllers/commentController.js @@ -0,0 +1,459 @@ +const {body, validationResult} = require('express-validator'); +const {_sr} = require('../plugins/serverResponses'); +const {res404, res500} = require('../plugins/controllersHelperFunctions'); +const Comment = require('../models/Comment'); +const News = require('../models/News'); +const ContactUs = require('../models/ContactUs'); +const Category = require('../models/Category'); +const Captcha = require('../models/Captcha'); + + +const limit = 20; + + +/////////////////////////////////////////////////////////////////////// admin +module.exports.updateComment = [ + [ + body('name') + .notEmpty().withMessage(_sr['fa'].required.name), + + body('description') + .notEmpty().withMessage(_sr['fa'].required.description), + + body('email') + .isEmail().withMessage(_sr['fa'].format.email), + + body('allowShow') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + + /** + * get data from input + */ + var { + name, + description, + email, + allowShow + } = req.body; + + /** + * get id + */ + var commentId = req.params.id; + + /** + * check comment exist or not + */ + var targetComment = await Comment.findOne({_id : commentId}); + + if(!targetComment) return res404(res,`پیام مورد نظر پیدا نشد`); + + + /** + * make update object + */ + targetComment.name = name.trim(); + targetComment.description = description.trim(); + targetComment.email = email; + targetComment.allowShow = allowShow; + + await targetComment.save(); + + /** + * show result + */ + return res.json(targetComment); + + } catch (error) { + return res500(res , error?.message); + } + } +] + +module.exports.changeStatus = [ + async (req, res) => { + try { + /** + * get id + */ + var commentId = req.params.id; + + /** + * check comment exist or not + */ + var targetComment = await Comment.findOne({_id : commentId}); + + if(!targetComment) return res404(res,`پیام مورد نظر پیدا نشد`); + + + /** + * make update object + */ + targetComment.allowShow = !targetComment.allowShow; + + await targetComment.save(); + + /** + * show result + */ + return res.json(targetComment); + + } catch (error) { + return res500(res , error.message); + } + } +] + +module.exports.deletOneComment = [ + async (req, res) => { + try { + var commentId = req.params.id; + + /** + * check comment + */ + var targetComment = await Comment.findOne({_id : commentId}); + + if(!targetComment){ + return res404(res , `پیام مورد نظر پیدا نشد`); + } + + /** + * delete comment + */ + targetComment.deleteOne(); + + /** + * show result + */ + return res.json(targetComment); + + } catch (error) { + /** + * if we got unknown error show to client + */ + res500(res , error); + } + } +] + +module.exports.getOneComment = [ + async (req, res) => { + try { + const commentId = req.params.id; + + /** + * get comment + */ + const targetComment = await Comment.findOne({_id : commentId}).populate('modelRef'); + + /** + * if not exist + */ + if(!targetComment){ + return res404(res , `پیام مورد نظر پیدا نشد`); + } + + if(!targetComment.read){ + targetComment.read = true; + + await targetComment.save(); + } + + /** + * show result + */ + return res.json(targetComment); + } catch (error) { + /** + * if we got unknown error show to client + */ + res500(res , error); + } + } +] + +module.exports.getAll = [ + async (req, res) => { + try { + + let findQuery = {}; + + findQuery.modelName = req.params.model; + + if (req.params.model !== 'ContactUs'){ + if (req.user.specialPermissions.length) { + findQuery.catsId = {$in : req.user.specialPermissions}; + } + } + + /** + * get all comment + */ + const getAll = await Comment.paginate(findQuery , + {page: req.query.page || 1 , limit , populate : 'modelRef' , sort:{created_at : -1}}); + + /** + * show result + */ + return res.json(getAll); + } catch (error) { + return res500(res , error.message); + } + } +] + +module.exports.getAllforCount = [ + async (req, res) => { + try { + + let findQuery = {}; + + findQuery.modelName = req.params.model; + + if (req.params.model !== 'ContactUs'){ + if (req.user.specialPermissions.length) { + findQuery.catsId = {$in : req.user.specialPermissions}; + } + } + + /** + * get all comment + */ + const getAll = await Comment.find(findQuery).populate('modelRef'); + + /** + * show result + */ + return res.json(getAll); + } catch (error) { + return res500(res , error.message); + } + } +] + +module.exports.search = [ + async (req, res) => { + try { + var findQuery = {}; + findQuery['$and'] = []; + findQuery['$or'] = []; + + var { + name, + email, + read, + allowShow, + date + } = req.body; + + findQuery.modelName = req.params.model; + + if (req.params.model !== 'ContactUs'){ + if (req.user.specialPermissions.length) { + findQuery.catsId = {$in : req.user.specialPermissions}; + } + } + + /** search by term */ + if (name && !_.isEmpty(name)) { + findQuery['$or'].push( + { + name: { + $regex: '.*' + name + '.*' + }, + } + ); + } + /** search by email */ + if (email && !_.isEmpty(email)) { + findQuery['$and'].push({ + email + }); + } + /** search by read */ + if (!_.isUndefined(read) && _.isBoolean(read)) { + findQuery['$and'].push({ + read + }); + } + /** search by allowShow */ + if (!_.isUndefined(allowShow) && _.isBoolean(allowShow)) { + findQuery['$and'].push({ + allowShow + }) + } + + /** search by date */ + if (date && !_.isEmpty(date)) { + if(date.length === 1){ + findQuery['$and'].push({ + created_at: { + $gte: moment(date[0]).startOf('days'), + $lt: moment(date[0]).endOf('days') + } + }); + }else{ + findQuery['$and'].push({ + created_at: { + $gte: new Date(date[0]), + $lt: new Date(date[1]) + } + }); + } + } + + _.isEmpty(findQuery['$and']) && delete findQuery['$and']; + _.isEmpty(findQuery['$or']) && delete findQuery['$or']; + + /** get comments */ + var comments = await Comment.paginate(findQuery , {page : req.query.page , limit, populate : 'modelRef' , sort:{created_at : -1}}); + + /** show result */ + return res.json(comments); + } catch (error) { + return res500(res ,error?.message) + } + } +] + +/////////////////////////////////////////////////////////////////////// public +module.exports.addComment = [ + [ + body('name') + .notEmpty().withMessage(_sr['fa'].required.title), + + body('description') + .notEmpty().withMessage(_sr['fa'].required.description), + + body('email') + .isEmail().withMessage(_sr['fa'].format.email), + + body('modelId') + .if((value , {req}) => { + return req.body.modelName !== 'contactus'; + }) + .notEmpty().withMessage(`این فیلد ${_sr['fa'].optional.string}`), + + body('modelName') + .isString().withMessage(`این فیلد ${_sr['fa'].optional.string}`) + .bail() + .isIn(['news' , 'contactus' , 'category']).withMessage(`${_sr['fa'].optional.onlyValid} 'news' , 'contactus' , 'category'`), + + body('captcha') + .notEmpty().withMessage(_sr['fa'].required.field) + .custom((value , {req}) => { + return Captcha.findOne({code : value}).then(data => { + if (!data) return Promise.reject(`عبارت وارد شده صحیح نمیباشد`) + else return true + }) + }), + + ], + async (req, res) => { + + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + let { + name, + description, + email, + modelId, + modelName + } = req.body; + + let Model; + + switch (modelName) { + case 'news': + Model = News; + modelName = 'News'; + break; + case 'contactus': + Model = ContactUs + modelName = 'ContactUs'; + break; + case 'category': + Model = Category + modelName = 'Category'; + break; + } + + let checkParent = null; + + if(modelName !== 'ContactUs'){ + checkParent = await Model.findOne({_id : modelId}); + + if(!checkParent){ + return res404(res , `ای دی فرستاده شده وجود ندارد`); + } + + if(!checkParent?.allowComment){ + return res.status(403).json({message : `شما اجازه پیام گذاشتن برای این خبر یا صفحه را ندارید`}); + } + } + + const commentData = { + name : name.trim(), + description : description.trim(), + email : email.trim(), + modelRef : modelId || null, + modelName, + modelType : checkParent?.modelType || null, + _updatedBy : req.user?._id || null + }; + + if (modelName !== 'ContactUs'){ + commentData.catsId = modelName === 'Category' ? checkParent?.treeCat || [] : checkParent?.allCat || [] + } + /** + * add new comment + */ + const create = await Comment.create(commentData); + + /** + * check added or not + */ + if (!create) { + return res500(res, `مشکلی در اضافه کردن پیام پیش آمده است`); + } + + /** + * show result + */ + return res.json(create); + } catch (error) { + /** + * if we got unknown error show to client + */ + return res500(res , error?.message); + } + } +] + +module.exports.getCommentById = [ + async (req , res) => { + try { + const modelId = req.params.id; + + const getComments = await Comment.find({modelRef: modelId, allowShow: true}); + + return res.json(getComments); + } catch (error) { + return res500(res , error?.message); + } + } +] diff --git a/server/controllers/contactUsController.js b/server/controllers/contactUsController.js new file mode 100644 index 0000000..e2b27d7 --- /dev/null +++ b/server/controllers/contactUsController.js @@ -0,0 +1,140 @@ +const ContactUs = require('../models/ContactUs'); +const {body, validationResult , checkSchema} = require('express-validator'); +const {_sr} = require('../plugins/serverResponses'); +const {res404, res500, hasWhiteSpaces, isLatinCharactersWithSymbol, generateRandomDigits} = require('../plugins/controllersHelperFunctions'); + + +/////////////////////////////////////////////////////////////////////// admin +module.exports.updateContacUs = [ + checkSchema({ + description : { + notEmpty : true, + errorMessage : _sr['fa'].required.description + }, + email : { + isEmail : true, + errorMessage : _sr['fa'].format.email, + }, + phone : { + isNumeric : true, + errorMessage : `شماره تلفن ${_sr['fa'].optional.number}` + }, + address : { + isString : true, + errorMessage : `آدرس ${_sr['fa'].optional.string}` + }, + 'location.type' : { + isString : true, + }, + 'location.coordinates' : { + isArray : true + } + }), + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + + /** + * get data from input + */ + var { + description, + email, + phone, + address, + location, + } = req.body; + + /** + * get id + */ + // var contactUsId = req.params.id; + + var contactUs = await ContactUs.findOne(); + + if(!contactUs){ + return res404(res , `صفحه ارتباط با ما وجود ندارد`); + } + + /** + * make update object + */ + contactUs.title = contactUs.title.trim(); + contactUs.description = description.trim(); + contactUs.email = email.trim(); + contactUs.phone = phone.trim(); + contactUs.address = address.trim(); + contactUs.location = { + type : location.type, + coordinates : location.coordinates + }; + contactUs.main = contactUs.main; + contactUs.showInMenu = contactUs.showInMenu; + contactUs._creator = req.user?._id || null; + contactUs._updatedBy = req.user?._id || null; + contactUs.siteMap = contactUs.siteMap; + contactUs.showInFooter = contactUs.showInFooter; + + await contactUs.save(); + + /** + * show result + */ + return res.json(contactUs); + + } catch (error) { + return res500(res , error.message); + } + } +] + +module.exports.getOneContacUs = [ + async (req, res) => { + try { + + // var add = new ContactUs({ + // description: "توضیحات صفحه تماس با ما", + // showInMenu: true, + // main: true, + // email: 'test@gmail.com', + // phone: '08632222222', + // address: 'میدان فاطمیه', + // _creator: null, + // _updatedBy: null, + // location: { + // type: 'Point', + // coordinates: [-118.2870407961309, 33.93508571994455] + // }, + // siteMap: true, + // showInFooter: true + // }); + + // await add.save(); + /** + * get ContacUs + */ + const getContacUs = await ContactUs.find({}); + + /** + * if not exist + */ + if(!getContacUs.length){ + return res404(res , `صفحه ارتباط با ما وجود ندارد`); + } + + /** + * show result + */ + return res.json(getContacUs[0]); + } catch (error) { + /** + * if we got unkown error show to client + */ + res500(res , error); + } + } +] \ No newline at end of file diff --git a/server/controllers/contentController.js b/server/controllers/contentController.js new file mode 100644 index 0000000..1d38889 --- /dev/null +++ b/server/controllers/contentController.js @@ -0,0 +1,300 @@ +const {body, validationResult} = require('express-validator'); +const sharp = require('sharp'); +const {_sr} = require('../plugins/serverResponses'); +const {res404, res500, hasWhiteSpaces, isLatinCharactersWithSymbol, generateRandomDigits} = require('../plugins/controllersHelperFunctions'); +const Content = require('../models/Content'); +const fs = require('fs'); + + +////// variables +const profileWidth = 1000; +const profileHeight = 600; +const profileQuality = 100; + +const profileThumbWidth = 400; +const profileThumbHeight = 400; +const profileThumbQuality = 100; + +/////////////////////////////////////////////////////////////////////// admin +module.exports.addContent = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title), + + body('param') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('pageContent') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('showInMenu') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + ], + async (req, res) => { + + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + let { + title, + param, + pageContent, + email, + showInMenu + } = req.body; + + const catData = { + title: title.trim(), + param: param, + pageContent: pageContent, + showInMenu, + _creator: req.user._id, + _updatedBy: req.user._id + } + if (email) catData.email = email + + /** + * add new content + */ + let create = await Content.create(catData); + + /** + * check added or not + */ + if (!create) { + return res500(res, `مشکلی در اضافه کردن محتوا پیش آمده است`); + } + + /** + * if we have pic upload to server + */ + if (req.files && req.files.cover) { + const image = req.files.cover; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { + cover: { + msg: _sr['fa'].format.image + } + } + }); + } + const imageName = `manager_${Date.now()}_${create._id}.${image.mimetype.split('/')[1]}`; + const thumbName = 'thumb_' + imageName + try { + const target = sharp(image.data) + await target + .resize(profileWidth, profileHeight, { + fit: 'cover' + }) + .jpeg({ + quality: profileQuality + }) + .toFile(`./static/uploads/images/content/${imageName}`) + await target + .resize(profileThumbWidth, profileThumbHeight, { + fit: 'cover' + }) + .jpeg({ + quality: profileThumbQuality + }) + .toFile(`./static/uploads/images/content/${thumbName}`) + + create.cover = imageName; + create.thumb = imageName; + + await create.save(); + } catch (e) { + return res500(res, e?.message); + } + } + + /** + * show result + */ + return res.json(create); + } catch (error) { + res500(res, error.message); + } + } +] + +module.exports.updateContent = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title), + + body('pageContent') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('showInMenu') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + + /** + * get data from input + */ + let { + title, + pageContent, + email, + showInMenu + } = req.body; + + /** + * get id + */ + var contentParam = req.params.param; + + /** + * check content exist or not + */ + var targetContent = await Content.findOne({param: contentParam}); + + if (!targetContent) return res404(res, `صفحه ی مورد نظر پیدا نشد`); + + /** + * if we have pic upload to server + */ + if (req.files && req.files.cover) { + const image = req.files.cover; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { + cover: { + msg: _sr['fa'].format.image + } + } + }); + } + const imageName = `manager_${Date.now()}_${targetContent._id}.${image.mimetype.split('/')[1]}`; + const thumbName = 'thumb_' + imageName + try { + const target = sharp(image.data) + await target + .resize(profileWidth, profileHeight, { + fit: 'cover' + }) + .jpeg({ + quality: profileQuality + }) + .toFile(`./static/uploads/images/content/${imageName}`) + await target + .resize(profileThumbWidth, profileThumbHeight, { + fit: 'cover' + }) + .jpeg({ + quality: profileThumbQuality + }) + .toFile(`./static/uploads/images/content/${thumbName}`) + + /** + * if exist old pic delete it from file + */ + if (targetContent.cover) { + const oldPic = `./static${targetContent.cover}` + const oldThumb = `./static${targetContent.thumb}` + + if (fs.existsSync(oldPic)) { + fs.unlink(oldPic, (err) => { + if (err) return res500(res, err?.message); + }); + } + if (fs.existsSync(oldThumb)) { + fs.unlink(oldThumb, (err) => { + if (err) return res500(res, err?.message); + }); + } + } + + targetContent.cover = imageName; + targetContent.thumb = thumbName; + } catch (e) { + return res500(res, e?.message); + } + } + + + /** + * make update object + */ + targetContent.title = title.trim(); + targetContent._updatedBy = req.user._id; + targetContent.pageContent = pageContent; + targetContent.showInMenu = showInMenu || false; + if (email) targetContent.email = email + await targetContent.save(); + + /** + * show result + */ + return res.json(targetContent); + + } catch (error) { + return res500(res, error?.message); + } + } +] + +module.exports.getOneContent = [ + async (req, res) => { + try { + var contentParam = req.params.param; + + /** + * get content + */ + const targetContent = await Content.findOne({param: contentParam}); + + /** + * show result + */ + return res.json(targetContent); + } catch (error) { + return res500(res, error?.message); + } + } +] + +/////////////////////////////////////////////////////////////////////// public +module.exports.footer = [ + async (req, res) => { + try { + var findQuery = {showInFooter: {$ne: 0}}; + + var getContents = await Content.find(findQuery).sort({priority: -1}); + + return res.json(getContents); + } catch (error) { + return res500(res, error?.message); + } + } +] + +module.exports.viewContent = [ + async (req, res) => { + try { + var param = req.params.param; + + var getContent = await Content.findOne({param}); + + if (!getContent) { + return res404(res, `صفحه ی مورد نظر پیدا نشد`); + } + + return res.json(getContent); + } catch (error) { + return res500(res, error?.message); + } + } +] diff --git a/server/controllers/counterDayController.js b/server/controllers/counterDayController.js new file mode 100644 index 0000000..f6c6805 --- /dev/null +++ b/server/controllers/counterDayController.js @@ -0,0 +1,91 @@ +const CounterDay = require('../models/CounterDay'); +const {body, validationResult} = require('express-validator'); +const {_sr} = require('../plugins/serverResponses'); +const {res404, res500} = require('../plugins/controllersHelperFunctions'); +const fs = require('fs'); +const sharp = require('sharp'); +const moment = require('moment-jalaali'); + +/////////////////////////////////////////////////////////////////////// admin + +module.exports.updateCounterDay = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title), + + body('publish') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('expireDate') + .notEmpty().withMessage(`لطفا یک تاریخ تعیین کنید`), + + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + + try { + + const {title, publish , expireDate} = req.body; + + const targetCounterDay = await CounterDay.findOne(); + + if (targetCounterDay) { + targetCounterDay.title = title; + targetCounterDay.publish = publish; + targetCounterDay.expireDate = moment(expireDate).startOf('days'); + targetCounterDay._updatedBy = req.user._id; + + await targetCounterDay.save(); + + return res.json({message: _sr['fa'].response.success_save}); + }else { + const data = { + title, + publish, + expireDate : moment(expireDate).startOf('days'), + _creator : req.user._id, + _updatedBy: req.user._id + } + + await CounterDay.create(data); + + return res.json({message: _sr['fa'].response.success_save}); + } + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست پیش آمده است`); + } + } +] + +module.exports.getCounterDayByAdmin = [ + async (req, res) => { + try { + const targetCounterDay = await CounterDay.findOne(); + + if (!targetCounterDay) return res.json({title: '', publish: true , expireDate : ''}); + + return res.json(targetCounterDay); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما پیش آمده است`); + } + } +] + +////////////////////////////////////////////////////////////////// public +module.exports.getCounterDayByUser = [ + async (req, res) => { + try { + const targetCounterDay = await CounterDay.findOne({publish : true , expireDate : {$gte : new Date()}}); + + if (!targetCounterDay) return res.json(null); + + return res.json(targetCounterDay); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما پیش آمده است`); + } + } +] diff --git a/server/controllers/dataBackupController.js b/server/controllers/dataBackupController.js new file mode 100644 index 0000000..acc791b --- /dev/null +++ b/server/controllers/dataBackupController.js @@ -0,0 +1,187 @@ +const fs = require('fs') +const archiver = require('archiver') +const moment = require('moment') +const jwt = require('jsonwebtoken') +const {secretKey} = require('../authentication') +const {_sr} = require('../plugins/serverResponses') +// models +const Category = require('../models/Category') +const Comment = require('../models/Comment') +const ContactUs = require('../models/ContactUs') +const Content = require('../models/Content') +const Gallery = require('../models/Gallery') +const HomePage = require('../models/HomePage') +const Links = require('../models/Links') +const Meeting = require('../models/Meeting') +const News = require('../models/News') +const NewsFile = require('../models/NewsFile') +const Occasion = require('../models/Occasion') +const Services = require('../models/Services') +const Slider = require('../models/Slider') +const User = require('../models/User') +const YearBanner = require('../models/YearBanner') + +module.exports.createBackUp = [ + // check user token and permission to backup + async (req, res, next) => { + const token = req.params.token + if (!token) return res.status(401).json({message: 'unauthorized'}) + try { + // check if token is not destroyed + const user = await User.findOne({token: token}) + if (!user) return res.status(401).json({message: 'unauthorized'}) + + // verify token + const checkToken = await jwt.verify(user.token.replace(/^Bearer\s/, ''), secretKey) + if (!checkToken) return res.status(401).json({message: 'unauthorized'}) + + // check user permissions + const permissions = user.permissions + if (!permissions.includes('superAdmin')) res.status(401).json({message: 'unauthorized'}) + + return next() + + } catch (e) { + res.status(401).json({message: 'unauthorized'}) + } + }, + // do backup :) + async (req, res) => { + try { + console.log('backup started') + + const dataBaseQueries = [ + // categories + Category.find(), + // comments + Comment.find(), + // contact us + ContactUs.find(), + // content + Content.find(), + // gallery + Gallery.find(), + // home page + HomePage.find(), + // links + Links.find(), + // meetings + Meeting.find(), + // news + News.find(), + // newsFile + NewsFile.find(), + // services + Services.find(), + // sliders + Slider.find(), + // users + User.find(), + // year banner + YearBanner.find(), + // occasion + Occasion.find() + ] + + const [categories, comments, contactus, contents, galleries, homepage, links, meetings, news, newsFiles, services, sliders, users, yearBanner, occasion] = await Promise.all(dataBaseQueries) + + if (await !fs.existsSync('./backup/database')) await fs.mkdirSync('./backup/database') + + await Promise.all([ + fs.writeFileSync(`./backup/database/categories_${moment(Date.now()).format('YYYY-MM-DD')}.json`, JSON.stringify(categories)), + fs.writeFileSync(`./backup/database/comments_${moment(Date.now()).format('YYYY-MM-DD')}.json`, JSON.stringify(comments)), + fs.writeFileSync(`./backup/database/contactus_${moment(Date.now()).format('YYYY-MM-DD')}.json`, JSON.stringify(contactus)), + fs.writeFileSync(`./backup/database/contents_${moment(Date.now()).format('YYYY-MM-DD')}.json`, JSON.stringify(contents)), + fs.writeFileSync(`./backup/database/galleries_${moment(Date.now()).format('YYYY-MM-DD')}.json`, JSON.stringify(galleries)), + fs.writeFileSync(`./backup/database/homepage_${moment(Date.now()).format('YYYY-MM-DD')}.json`, JSON.stringify(homepage)), + fs.writeFileSync(`./backup/database/links_${moment(Date.now()).format('YYYY-MM-DD')}.json`, JSON.stringify(links)), + fs.writeFileSync(`./backup/database/meetings_${moment(Date.now()).format('YYYY-MM-DD')}.json`, JSON.stringify(meetings)), + fs.writeFileSync(`./backup/database/news_${moment(Date.now()).format('YYYY-MM-DD')}.json`, JSON.stringify(news)), + fs.writeFileSync(`./backup/database/newsFiles_${moment(Date.now()).format('YYYY-MM-DD')}.json`, JSON.stringify(newsFiles)), + fs.writeFileSync(`./backup/database/services_${moment(Date.now()).format('YYYY-MM-DD')}.json`, JSON.stringify(services)), + fs.writeFileSync(`./backup/database/sliders_${moment(Date.now()).format('YYYY-MM-DD')}.json`, JSON.stringify(sliders)), + fs.writeFileSync(`./backup/database/users_${moment(Date.now()).format('YYYY-MM-DD')}.json`, JSON.stringify(users)), + fs.writeFileSync(`./backup/database/yearBanner_${moment(Date.now()).format('YYYY-MM-DD')}.json`, JSON.stringify(yearBanner)), + fs.writeFileSync(`./backup/database/occasion_${moment(Date.now()).format('YYYY-MM-DD')}.json`, JSON.stringify(occasion)) + ]) + + /////////////////// create backup zip file + + const backupName = 'backup_' + moment(Date.now()).format('YYYY-MM-DD') + '.zip' + // create a file to stream archive data to. + const output = fs.createWriteStream(`./backup/${backupName}`) + const archive = archiver('zip', { + zlib: {level: 9} // Sets the compression level. + }) + + + // listen for all archive data to be written + // 'close' event is fired only when a file descriptor is involved + output.on('close', function () { + console.log(archive.pointer() + ' total bytes') + console.log('archiver has been finalized and the output file descriptor has closed.') + return res.download(`./backup/${backupName}`) + }) + + // This event is fired when the data source is drained no matter what was the data source. + // It is not part of this library but rather from the NodeJS Stream API. + // @see: https://nodejs.org/api/stream.html#stream_event_end + output.on('end', function () { + console.log('Data has been drained') + return res.status(500).send('

فضای هاست پر میباشد.لطفا نسبت به پاک کردن بکاپ های قبلی یا افزایش فضای هاست اقدام فرمایید.

') + }) + + // good practice to catch warnings (ie stat failures and other non-blocking errors) + archive.on('warning', function (err) { + + if (err.code === 'ENOENT') { + // log warning + console.log('On archiver warning -- ENOENT error code', err) + } else { + // throw error + console.log('On archiver warning -- other error codes ', err) + } + return res.status(500).send('

فضای هاست پر میباشد.لطفا نسبت به پاک کردن بکاپ های قبلی یا افزایش فضای هاست اقدام فرمایید.

') + }) + + // good practice to catch this error explicitly + archive.on('error', function (err) { + // throw err + console.log(err) + return res.status(500).json({message: 'مشکلی پیش آمده'}) + }) + + // pipe archive data to the file + await archive.pipe(output) + + // append files from a sub-directory and naming it `new-subdir` within the archive + await archive.directory(`./static/uploads/`, 'uploads') + await archive.directory(`./backup/database/`, 'database') + + // finalize the archive (ie we are done appending files but streams have to finish yet) + // 'close', 'end' or 'finish' may be fired right after calling this method so register to them beforehand + await archive.finalize() + + await fs.rmdirSync('./backup/database', {recursive: true}) + } catch (e) { + return res.status(500).send('

فضای هاست پر میباشد.لطفا نسبت به پاک کردن بکاپ های قبلی یا افزایش فضای هاست اقدام فرمایید.

') + } + } +] + + +module.exports.removeOldBackups = [ + async (req, res) => { + try { + const files = await fs.readdirSync('./backup') + for await (const file of files) { + const isDirectory = await fs.statSync(`./backup/${file}`).isDirectory() + if (isDirectory) await fs.rmdirSync(`./backup/${file}`, {recursive: true}) + else await fs.unlinkSync(`./backup/${file}`) + } + return res.json({message: _sr['fa'].response.success_remove}) + } catch (e) { + return res.status(500).json({message: e}) + } + } +] diff --git a/server/controllers/dynamicController.js b/server/controllers/dynamicController.js new file mode 100644 index 0000000..f86a6a5 --- /dev/null +++ b/server/controllers/dynamicController.js @@ -0,0 +1,51 @@ + +const mongoose = require('mongoose') +const dynamicModelSchema = new mongoose.Schema({}, { strict: false }); + + + +module.exports.CreateModel = [ + async (req, res, next) => { + try { + const { modelName, fields } = req.body; + + if (!modelName || !fields || !Array.isArray(fields)) { + return res.status(400).send('ورودی نامعتبر'); + } + + if (mongoose.modelNames().includes(modelName)) { + return res.status(400).json({ message: "مدل قبلا ایجاد شده" }); + } + + const schemaDefinition = {}; + fields.forEach(field => { + schemaDefinition[field] = { type: String }; + }); + + const schema = new mongoose.Schema(schemaDefinition); + mongoose.model(modelName, schema); + + return res.status(200).json(`مدل ${modelName} ایجاد شد با فیلد های: ${fields.join(', ')}`); + } catch (e) { + next(e); + } + } +]; + +module.exports.SaveDataModel = [ + async (req,res,next)=>{ + const { modelName, data } = req.body; + + if (!modelName || !data || typeof data !== 'object') { + return res.status(400).send('ورودی نامعتبر'); + } + try { + const DynamicModel = mongoose.model(modelName); + const instance = new DynamicModel(data); + await instance.save(); + res.send('داده فرم ذخیره شد'); + } catch (error) { + next(error) + } + } +] \ No newline at end of file diff --git a/server/controllers/electionController.js b/server/controllers/electionController.js new file mode 100644 index 0000000..4bc9f84 --- /dev/null +++ b/server/controllers/electionController.js @@ -0,0 +1,884 @@ +const Category = require('../models/Category'); +const Election = require('../models/Election'); +const {body, validationResult} = require('express-validator'); +const {_sr} = require('../plugins/serverResponses'); +const { + res404, + res500, + checkValidations, + generateRandomDigits, + hasWhiteSpaces, + isLatinCharactersWithSymbol +} = require('../plugins/controllersHelperFunctions'); +const fs = require('fs'); +const sharp = require('sharp'); + +////// variables +const profileWidth = 300; +const profileHeight = 400; +const profileQuality = 100; +const limit = 20; + +//// functions +const _checkSpecPermission = async (req, category) => { + return !req.user.specialPermissions.includes(category._id) && //check parent id exist in special permissions or not + !req.user.specialPermissions.some(item => category?.treeCat?.join().includes(item)); +} + +const _generatePass = async () => { + let pass = generateRandomDigits(8); + let checkPass = await Election.findOne({'voters.password': pass}); + + if (checkPass) return await _generatePass(); + + return pass; +} + +/////////////////////////////////////////////////////////////////////// admin election +module.exports.addElection = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('catId') + .isMongoId().withMessage(_sr['fa'].required.field) + .if((value, {req}) => { + return req.body.catId + }) + .custom((value) => { + return Category.findOne({ + _id: value + }) + .then(category => { + if (!category) return Promise.reject(_sr['fa'].not_found.category); + else return true + }) + }), + + body('startDate') + .notEmpty().withMessage(`لطفا یک تاریخ شروع تعیین کنید`), + + body('endDate') + .notEmpty().withMessage(`لطفا یک تاریخ پایان تعیین کنید`), + + body('publish') + .isBoolean().withMessage(_sr['fa'].format.boolean), + ], + checkValidations(validationResult), + async (req, res) => { + try { + + const { + title, + catId, + description, + startDate, + endDate, + publish + } = req.body; + + const data = { + title: title.trim(), + catId, + description, + startDate, + endDate, + publish, + _creator: req.user._id, + _updatedBy: req.user._id + } + + + const category = await Category.findOne({ + _id: catId + }).populate({ + path: 'parent', + populate: { + path: 'parent', + model: 'Category' + } + }); + + if (!category) return res404(res, 'دسته بندی مورد نظر پیدا نشد'); + + /** check special permission */ + if (req.user.specialPermissions.length && await _checkSpecPermission(req, category)) { + return res.status(403).json({ + message: `شما نمیتوانید این دسته بندی را انتخاب کنید` + }); + } + + data.allCat = category.treeCat; + data.rootParent = category.rootParent || category._id; + + const createElection = await Election.create(data); + + if (!createElection) return res500(res, `مشکلی در اجرای درخواست شما پیش آمده است`); + + return res.json(createElection); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +module.exports.updateElection = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('catId') + .isMongoId().withMessage(_sr['fa'].required.field) + .if((value, {req}) => { + return req.body.catId + }) + .custom((value) => { + return Category.findOne({ + _id: value + }) + .then(category => { + if (!category) return Promise.reject(_sr['fa'].not_found.category); + else return true + }) + }), + + body('startDate') + .notEmpty().withMessage(`لطفا یک تاریخ شروع تعیین کنید`), + + body('endDate') + .notEmpty().withMessage(`لطفا یک تاریخ پایان تعیین کنید`), + + body('publish') + .isBoolean().withMessage(_sr['fa'].format.boolean), + ], + checkValidations(validationResult), + async (req, res) => { + try { + + const electionId = req.params.id; + + const { + title, + catId, + description, + startDate, + endDate, + publish + } = req.body; + + //// check election + const targetElection = await Election.findById(electionId); + + if (!targetElection) return res404(res, `انتخابات مورد نظر پیدا نشد`); + + + if (catId && targetElection.catId !== catId) { + const category = await Category.findOne({ + _id: catId + }).populate({ + path: 'parent', + populate: { + path: 'parent', + model: 'Category' + } + }); + + if (!category) return res404(res, 'دسته بندی مورد نظر پیدا نشد'); + + /** check special permission */ + if (req.user.specialPermissions.length && await _checkSpecPermission(req, category)) { + return res.status(403).json({ + message: `شما نمیتوانید این دسته بندی را انتخاب کنید` + }); + } + + targetElection.catId = catId; + targetElection.allCat = category.treeCat; + targetElection.rootParent = category.rootParent || category._id; + } + + targetElection.title = title; + targetElection.description = description; + targetElection.startDate = startDate; + targetElection.endDate = endDate; + targetElection.publish = publish; + targetElection._updatedBy = req.user._id; + + await targetElection.save(); + + return res.json({message: _sr['fa'].response.success_save}); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +module.exports.getAllElection = [ + async (req, res) => { + try { + let findQuery = {}; + + if (req.user.specialPermissions.length) { + findQuery.catId = {$in: req.user.specialPermissions} + } + + const allElection = await Election.paginate(findQuery, { + page: req.query.page || 1, + populate: [ + {path: 'catId'}, + { + path: '_creator', + select: { + firstName: 1, + lastName: 1, + profilePic: 1 + } + } + ], + limit, + sort: {created_at: -1} + }); + + if (!allElection) return res500(res, `مشکلی در گرفتن اطلاعات پیش آمده است`); + + return res.json(allElection); + + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +module.exports.getOneElection = [ + async (req, res) => { + try { + const electionId = req.params.id; + + const findQuery = { + _id: electionId + }; + + const election = await Election.findOne(findQuery).populate('catId'); + + if (!election) return res404(res, `اطلاعات مورد نظر پیدا نشد`); + + if (req.user.specialPermissions.length && await _checkSpecPermission(req, election.catId)) { + return res.status(403).json({ + message: `شما مجاز به دیدن اطلاعات این انتخابات نمی باشید` + }); + } + + return res.json(election); + + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +module.exports.deletOneElection = [ + async (req, res) => { + try { + const electionId = req.params.id; + + const deleteElection = await Election.findById(electionId).populate('catId'); + + if (!deleteElection) return res404(res, `انتخابات مورد نظر پیدا نشد`); + + if (req.user.specialPermissions.length && await _checkSpecPermission(req, deleteElection.catId)) { + return res.status(403).json({ + message: `شما اجازه حذف این انتخابات را ندارید` + }); + } + + if (deleteElection.candidates.length) { + const targetDir = `./static/uploads/images/election/`; + + const getFiles = fs.readdirSync(targetDir); + + for (const file of getFiles) { + if (file.includes(deleteElection._id)) { + fs.unlink(`./static/uploads/images/election/${file}`, (err) => { + if (err) console.log(err) + }); + } + } + } + + await deleteElection.deleteOne(); + + return res.json({message: _sr['fa'].response.success_remove}); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +module.exports.search = [ + async (req, res) => { + try { + let query = {}; + let populate = [ + { + path: '_creator', + select: {firstName: 1, lastName: 1, profilePic: 1} + }, + { + path: 'catId' + } + ]; + + + query['$and'] = []; + + const { + term, + catId, + publish, + date + } = req.body; + + /** search by term */ + if (term && !_.isEmpty(term)) { + query['$and'].push({ + $or: [{ + title: { + $regex: '.*' + term + '.*' + } + }] + }); + } + + if (req.user.specialPermissions.length) { + query.catId = {$in: req.user.specialPermissions} + } else if (catId && !_.isEmpty(catId)) { + query['$and'].push({ + catId + }); + } + + /** search by publish */ + if (!_.isUndefined(publish) && _.isBoolean(publish)) { + query['$and'].push({ + publish + }); + } + + /** search by date */ + if (date && !_.isEmpty(date)) { + if (date.length === 1) { + query['$and'].push({ + startDate: {$lte: new Date(date[0])}, + endDate: {$gte: new Date(date[0])} + }); + } else { + query['$and'].push({ + startDate: {$lte: new Date(date[0])}, + endDate: {$gte: new Date(date[1])} + }); + } + } + + _.isEmpty(query['$and']) && delete query['$and']; + // _.isEmpty(input['$or']) && delete input['$or']; + + /** get elections */ + const elections = await Election.paginate(query, { + page: req.query.page || 1, + limit, + populate, + sort: {_id: -1} + }); + + /** show result */ + return res.json(elections); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +///////////////////////////////////////////////////////////////////// admin candidate +module.exports.addCandidate = [ + [ + body('firstName') + .notEmpty().withMessage(_sr['fa'].required.first_name), + + body('lastName') + .notEmpty().withMessage(_sr['fa'].required.last_name), + + body('nationalCode') + .optional().isNumeric().withMessage(_sr['fa'].required.national_code) + .bail() + .isLength({min: 10, max: 10}).withMessage('کد ملی 10 رقمی می باشد'), + ], + checkValidations(validationResult), + async (req, res) => { + try { + + const electionId = req.params.id; + + const { + firstName, + lastName, + bornDate, + education, + nationalCode, + resume + } = req.body; + + const data = { + firstName, + lastName, + bornDate, + education, + nationalCode, + resume, + _creator: req.user._id, + _updatedBy: req.user._id + } + + if (!req?.files?.profilePic) { + return res.status(422).json({ + validation: {profilePic: {msg: `لطفا یک فایل ارسال کنید`}} + }); + } + + + const targetElection = await Election.findById(electionId); + + if (!targetElection) return res404(res, 'انتخابات مورد نظر پیدا نشد'); + + + /////// add pic + const image = req.files.profilePic; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({validation: {profilePic: {msg: _sr['fa'].format.image}}}); + } + const imageName = 'candidate_' + Date.now() + '_' + targetElection._id + '.jpg'; + data.profilePic = imageName; + const target = sharp(image.data) + await target + .resize(profileWidth, profileHeight, { + fit: 'cover' + }) + .toFormat('jpg') + .jpeg({ + quality: profileQuality + }) + .toFile(`./static/uploads/images/election/${imageName}`) + + + targetElection.candidates.push(data); + + await targetElection.save(); + + return res.json({message: _sr['fa'].response.success_save}); + } catch (error) { + console.log(error.message) + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +module.exports.updateCandidate = [ + [ + body('candidateId') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('firstName') + .notEmpty().withMessage(_sr['fa'].required.first_name), + + body('lastName') + .notEmpty().withMessage(_sr['fa'].required.last_name), + + body('nationalCode') + .optional().isNumeric().withMessage(_sr['fa'].required.national_code) + .bail() + .isLength({min: 10, max: 10}).withMessage('کد ملی 10 رقمی می باشد'), + ], + checkValidations(validationResult), + async (req, res) => { + try { + + const electionId = req.params.id; + + const { + candidateId, + firstName, + lastName, + bornDate, + education, + nationalCode, + resume + } = req.body; + + + const targetElection = await Election.findById(electionId); + + if (!targetElection) return res404(res, 'انتخابات مورد نظر پیدا نشد'); + + let candidate = targetElection.candidates.id(candidateId); + + if (!candidate) return res404(res, `کاندید مورد نظر پیدا نشد`); + + if (req?.files?.profilePic) { + const image = req.files.profilePic; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({validation: {profilePic: {msg: _sr['fa'].format.image}}}); + } + const imageName = 'candidate_' + Date.now() + '_' + targetElection._id + '.jpg'; + const target = sharp(image.data) + await target + .resize(profileWidth, profileHeight, { + fit: 'cover' + }) + .toFormat('jpg') + .jpeg({ + quality: profileQuality + }) + .toFile(`./static/uploads/images/election/${imageName}`) + + /** + * if exist old pic delete it from file + */ + if (candidate.profilePic) { + const oldPic = `./static${candidate.profilePic}`; + + if (fs.existsSync(oldPic)) { + fs.unlink(oldPic, (err) => { + if (err) return res500(res, err?.message); + }); + } + } + candidate.profilePic = imageName; + } + + candidate.firstName = firstName; + candidate.lastName = lastName; + candidate.bornDate = bornDate; + candidate.education = education; + candidate.nationalCode = nationalCode; + candidate.resume = resume; + candidate._updatedBy = req.user._id; + + await targetElection.save(); + + return res.json({message: _sr['fa'].response.success_save}); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +module.exports.deleteCandidate = [ + async (req, res) => { + try { + + const electionId = req.params.id; + const candidateId = req.params.canId; + + const targetElection = await Election.findById(electionId); + + if (!targetElection) return res404(res, 'انتخابات مورد نظر پیدا نشد'); + + let candidate = targetElection.candidates.id(candidateId); + + if (!candidate) return res404(res, `کاندید مورد نظر پیدا نشد`); + + if (candidate.profilePic) { + const oldPic = `./static${candidate.profilePic}`; + + if (fs.existsSync(oldPic)) { + fs.unlink(oldPic, (err) => { + if (err) return res500(res, err?.message); + }); + } + } + + await targetElection.candidates.id(candidateId).remove(); + + await targetElection.save(); + + return res.json({message: _sr['fa'].response.success_remove}); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +///////////////////////////////////////////////////////////////////// admin voter +module.exports.addVoter = [ + [ + body('firstName') + .notEmpty().withMessage(_sr['fa'].required.first_name), + + body('lastName') + .notEmpty().withMessage(_sr['fa'].required.last_name), + + body('nationalCode') + .notEmpty().withMessage(_sr['fa'].required.national_code) + .bail() + .isLength({min: 10, max: 10}).withMessage('کد ملی 10 رقمی می باشد'), + + body('username') + .isLength({min: 4}).withMessage(_sr['fa'].min_char.min4) + .bail() + .custom((value, {req}) => { + if (hasWhiteSpaces(value)) return Promise.reject(_sr['fa'].response.whiteSpace) + else return true + }) + .bail() + .custom((value, {req}) => { + if (!isLatinCharactersWithSymbol(value)) return Promise.reject(_sr['fa'].response.latinChar) + else return true + }) + .bail() + .custom((value, {req}) => { + return Election.findOne({'voters.username': value}) + .then(user => { + if (user) return Promise.reject(_sr['fa'].duplicated.username) + else return true + }) + }), + ], + checkValidations(validationResult), + async (req, res) => { + try { + + const electionId = req.params.id; + + const { + firstName, + lastName, + username, + nationalCode, + mobileNumber, + job + } = req.body; + + //// generate password + // async function generatePass(){ + // let pass = generateRandomDigits(8); + // let checkPass = Election.findOne({'voters.password' : pass}); + // + // console.log(checkPass) + // + // if (checkPass) return await generatePass(); + // + // return pass; + // } + + const data = { + firstName, + lastName, + username, + password: await _generatePass(), + mobileNumber, + nationalCode, + job, + _creator: req.user._id, + _updatedBy: req.user._id + } + + const targetElection = await Election.findById(electionId); + + if (!targetElection) return res404(res, 'انتخابات مورد نظر پیدا نشد'); + + targetElection.voters.push(data); + + await targetElection.save(); + + return res.json({message: _sr['fa'].response.success_save}); + } catch (error) { + console.log(error.message) + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +module.exports.updateVoter = [ + [ + body('voterId') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('firstName') + .notEmpty().withMessage(_sr['fa'].required.first_name), + + body('lastName') + .notEmpty().withMessage(_sr['fa'].required.last_name), + + body('nationalCode') + .notEmpty().withMessage(_sr['fa'].required.national_code), + ], + checkValidations(validationResult), + async (req, res) => { + try { + + const electionId = req.params.id; + + const { + voterId, + firstName, + lastName, + nationalCode, + mobileNumber, + job + } = req.body; + + const targetElection = await Election.findById(electionId); + + if (!targetElection) return res404(res, 'انتخابات مورد نظر پیدا نشد'); + + let voter = targetElection.voters.id(voterId); + + if (!voter) return res404(res, `رای دهنده مورد نظر پیدا نشد`); + + voter.firstName = firstName; + voter.lastName = lastName; + voter.mobileNumber = mobileNumber; + voter.job = job; + voter.nationalCode = nationalCode; + voter._updatedBy = req.user._id; + + await targetElection.save(); + + return res.json({message: _sr['fa'].response.success_save}); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +module.exports.deleteVoter = [ + async (req, res) => { + try { + + const electionId = req.params.id; + const voterId = req.params.voterId; + + const targetElection = await Election.findById(electionId); + + if (!targetElection) return res404(res, 'انتخابات مورد نظر پیدا نشد'); + + let voter = targetElection.voters.id(voterId); + + if (!voter) return res404(res, `کاربر مورد نظر پیدا نشد`); + + await targetElection.voters.id(voterId).remove(); + + await targetElection.save(); + + return res.json({message: _sr['fa'].response.success_remove}); + + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +//////////////////////////////////////////////////////////////////// auth voter +module.exports.voterLogin = [ + [ + body('username') + .notEmpty().withMessage(_sr['fa'].required.username), + + body('password') + .notEmpty().withMessage(_sr['fa'].required.password) + ], + checkValidations(validationResult), + async (req, res) => { + try { + const {username, password} = req.body; + + const user = await Election.findOne({voters: {$elemMatch: {username, password, voted: false}}}) + + if (!user) return res.status(422).json({validation: {username: {msg: _sr['fa'].not_found.password}}}); + + return res.json({token: user.voters.find(item => item.password === password)._id}); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +module.exports.getVoterUser = [ + async (req, res) => { + try { + const token = req.headers.authorization?.replace(/^Bearer\s/, ''); + const election = await Election.findOne({'voters._id': token}); + + if (!election) return res.status(422).json({validation: {username: {msg: _sr['fa'].not_found.password}}}); + + const user = await election.voters.id(token); + + return res.json({user}); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +/////////////////////////////////////////////////////////////////////// public + +module.exports.getElectionByUser = [ + async (req, res) => { + try { + if (!req.voter) return res.status(403).json({message: 'شما اجازه دیدن این صفحه را ندارید'}); + + const targetElection = await Election.findOne({voters: {$elemMatch: {_id: req.voter._id, voted: false}}}) + + return res.json(targetElection); + + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +module.exports.addVote = [ + [ + body('electionId') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('candidateId') + .notEmpty().withMessage(_sr['fa'].required.field) + ], + checkValidations(validationResult), + async (req, res) => { + try { + if (!req.voter) return res.status(403).json({message: 'شما اجازه رای دادن ندارید'}); + + const {electionId, candidateId} = req.body; + + const targetElection = await Election.findById(electionId); + + if (!targetElection) return res404(res, 'انتخابات مورد نظر پیدا نشد'); + + const voter = await targetElection.voters.id(req.voter._id); + + if (!voter) return res.status(403).json({message: 'شما اجازه رای دادن ندارید'}); + + voter.voted = true; + + const candidate = await targetElection.candidates.id(candidateId); + + if (!candidate) return res404(res, 'کاندیدای انتخاب شده وجود ندارد'); + + const voteObj = { + voter: voter._id, + candidate: candidate._id + } + + targetElection.votes.push(voteObj); + + await targetElection.save(); + + return res.json({message: 'رای شما با موفقیت ثبت شد'}); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + + diff --git a/server/controllers/feedBackController.js b/server/controllers/feedBackController.js new file mode 100644 index 0000000..8e75884 --- /dev/null +++ b/server/controllers/feedBackController.js @@ -0,0 +1,461 @@ +const {body, validationResult} = require('express-validator'); +const {_sr} = require('../plugins/serverResponses'); +const {res404, res500} = require('../plugins/controllersHelperFunctions'); +const FeedBack = require('../models/FeedBack'); +const Captcha = require('../models/Captcha'); +const nodemailer = require("nodemailer"); + +const limit = 20; + + +/////////////////////////////////////////////////////////////////////// admin +module.exports.updateFeedBack = [ + [ + body('name') + .notEmpty().withMessage(_sr['fa'].required.title), + + body('description') + .notEmpty().withMessage(_sr['fa'].required.description), + + body('twitter').notEmpty() + .withMessage(_sr['fa'].required.Twitter), + + body('email') + .optional().isEmail().withMessage(_sr['fa'].format.email), + + body('phoneNumber') + .if((value, {req}) => { + return req.body.phoneNumber + }) + .custom((value, {req}) => { + if (!_.isEmpty(value) && !lodash.isNumeric(value)) { + return Promise.reject(_sr['fa'].format.number); + } else return true; + }), + + // body('cptcha') + // .notEmpty().withMessage(_sr['fa'].required.field) + // .custom((value , {req}) => { + // console.log(req.session); + // if(value != req.session.captcha){ + // return Promise.reject(`کپچا وارد شده صحیح نمی باشد`); + // }else{ + // return true + // } + // }), + + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + + /** + * get data from input + */ + const { + name, + subject, + description, + phoneNumber, + twitter, + email, + nationalCode + } = req.body; + + /** + * get id + */ + const meetingId = req.params.id; + + /** + * check meeting exist or not + */ + var targetFeedBack = await FeedBack.findById(meetingId); + + if (!targetFeedBack) return res404(res, `درخواست مورد نظر پیدا نشد`); + + + /** + * make update object + */ + targetFeedBack.name = name.trim(); + targetFeedBack.subject = subject.trim(); + targetFeedBack.description = description.trim(); + targetFeedBack.email = email; + targetFeedBack.twitter = twitter.trim() + targetFeedBack.phoneNumber = phoneNumber; + targetFeedBack.nationalCode = nationalCode; + + await targetFeedBack.save(); + + /** + * show result + */ + return res.json(targetFeedBack); + + } catch (error) { + return res500(res, error?.message); + } + } +] + +module.exports.deletOneFeedBack = [ + async (req, res) => { + try { + const meetingId = req.params.id; + + /** + * check meeting + */ + let targetFeedBack = await FeedBack.findByIdAndDelete(meetingId); + + if (!targetFeedBack) { + return res404(res, `درخواست مورد نظر پیدا نشد`); + } + + /** + * show result + */ + return res.json(targetFeedBack); + + } catch (error) { + /** + * if we got unknown error show to client + */ + res500(res, error); + } + } +] + +module.exports.getOneFeedBack = [ + async (req, res) => { + try { + const meetingId = req.params.id; + + /** + * get meeting + */ + const targetFeedBack = await FeedBack.findOne({_id: meetingId}); + + /** + * if not exist + */ + if (!targetFeedBack) { + return res404(res, `درخواست مورد نظر پیدا نشد`); + } + + if (!targetFeedBack.read) { + targetFeedBack.read = true; + + await targetFeedBack.save(); + } + + /** + * show result + */ + return res.json(targetFeedBack); + } catch (error) { + /** + * if we got unknown error show to client + */ + res500(res, error); + } + } +] + +module.exports.getAll = [ + async (req, res) => { + try { + + let findQuery = {}; + + /** + * get all meeting + */ + const getAll = await FeedBack.paginate(findQuery, + {page: req.query.page || 1, limit, sort: {created_at: -1}}); + + /** + * show result + */ + return res.json(getAll); + } catch (error) { + return res500(res, error.message); + } + } +] + +module.exports.getAllForCount = [ + async (req, res) => { + try { + + /** + * get all meeting + */ + const getAll = await FeedBack.find({}); + + /** + * show result + */ + return res.json(getAll); + } catch (error) { + return res500(res, error.message); + } + } +] + +module.exports.search = [ + async (req, res) => { + try { + let findQuery = {}; + findQuery['$and'] = []; + findQuery['$or'] = []; + + const { + name, + email, + terms, + phoneNumber, + nationalCode, + read, + date + } = req.body; + + findQuery.modelName = req.params.model; + + /** search by term */ + if (terms && !_.isEmpty(terms)) { + findQuery['$or'].push( + { + subject: { + $regex: '.*' + name + '.*' + }, + description: { + $regex: '.*' + name + '.*' + }, + } + ); + } + /** search by name */ + if (name && !_.isEmpty(name)) { + findQuery['$or'].push( + { + name: { + $regex: '.*' + name + '.*' + } + } + ); + } + /** search by email */ + if (email && !_.isEmpty(email)) { + findQuery['$and'].push({ + email + }); + } + /** search by phoneNumber */ + if (phoneNumber && !_.isEmpty(phoneNumber)) { + findQuery['$and'].push({ + phoneNumber + }); + } + /** search by nationalCode */ + if (nationalCode && !_.isEmpty(nationalCode)) { + findQuery['$and'].push({ + nationalCode + }); + } + /** search by read */ + if (!_.isUndefined(read) && _.isBoolean(read)) { + findQuery['$and'].push({ + read + }); + } + + /** search by date */ + if (date && !_.isEmpty(date)) { + if (date.length === 1) { + findQuery['$and'].push({ + created_at: { + $gte: moment(date[0]).startOf('days'), + $lt: moment(date[0]).endOf('days') + } + }); + } else { + findQuery['$and'].push({ + created_at: { + $gte: new Date(date[0]), + $lt: new Date(date[1]) + } + }); + } + } + + _.isEmpty(findQuery['$and']) && delete findQuery['$and']; + _.isEmpty(findQuery['$or']) && delete findQuery['$or']; + + /** get meetings */ + var meetings = await FeedBack.paginate(findQuery, { + page: req.query.page, + limit, + sort: {created_at: -1} + }); + + /** show result */ + return res.json(meetings); + } catch (error) { + return res500(res, error?.message) + } + } +] + +/////////////////////////////////////////////////////////////////////// public +module.exports.addFeedBack = [ + [ + body('name') + .notEmpty().withMessage(_sr['fa'].required.title), + + body('description') + .notEmpty().withMessage(_sr['fa'].required.description), + body('twitter') + .notEmpty().withMessage(_sr['fa'].required.Twitter), + + body('email') + .optional().isEmail().withMessage(_sr['fa'].format.email), + + body('phoneNumber') + .custom((value, {req}) => { + if (_.isEmpty(value)) return Promise.reject(_sr['fa'].required.phone_number); + if (!_.isEmpty(value) && !lodash.isNumeric(value)) { + return Promise.reject(_sr['fa'].format.number); + } else return true; + }), + + // body('captcha') + // .notEmpty().withMessage(_sr['fa'].required.field) + // .custom((value, {req}) => { + // return Captcha.findOne({code: value}).then(data => { + // if (!data) return Promise.reject(`عبارت وارد شده صحیح نمیباشد`) + // else return true + // }) + // }), + + ], + async (req, res) => { + + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + const { + name, + description, + twitter, + phoneNumber, + email + } = req.body; + + const data = { + name, + description, + twitter, + phoneNumber, + email + }; + + const createFeedBack = await FeedBack.create(data); + + if (!createFeedBack) return res500(res, `مشکلی در ثبت درخواست پیش آمده است`) + + let transporter = nodemailer.createTransport({ + host: "mail.ostan-mr.ir", + port: 465, + secure: true, // true for 465, false for other ports + auth: { + user: 'feedback@ostan-mr.ir', // generated ethereal user + pass: 'danak@ostan1400', // generated ethereal password + }, + }); + + let info = await transporter.sendMail({ + from: 'feedback@ostan-mr.ir', // sender address + to: "feedback@ostan-mr.ir", // list of receivers + subject: "نظر و پیشنهاد", // Subject line + text: data.description, // plain text body + html: ` + +نظر و پیشنهاد + + + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +`, // html body + }); + + /** + * show result + */ + return res.json({message:_sr['fa'].response.success_save}); + } catch (error) { + /** + * if we got unknown error show to client + */ + return res500(res, error?.message); + } + } +] + diff --git a/server/controllers/galleryController.js b/server/controllers/galleryController.js new file mode 100644 index 0000000..97bff16 --- /dev/null +++ b/server/controllers/galleryController.js @@ -0,0 +1,1803 @@ +const Gallery = require('../models/Gallery'); +const {body, validationResult} = require('express-validator'); +const sharp = require('sharp'); +const crypto = require('crypto') +const {_sr} = require('../plugins/serverResponses'); +const { + res404, + res500 +} = require('../plugins/controllersHelperFunctions'); +const fs = require('fs'); +const moment = require('moment-jalaali'); +const Category = require('./../models/Category') + +////// variables +const picsWidth = 1920; +const picsHeight = 1080; +const picsQuality = 100; +const limit = 5; + +const thumbPicsWidth = 600; +const thumbPicsHeight = 300; +const thumbPicsQuality = 80; + + +const coverQuality = 100; + +const coverWidth = 800; +const coverHeight = 600; +const thumbCoverWidth = 350; +const thumbCoverHeight = 262; +const thumbCoverQuality = 100; + +const graphicWidth = 1920; +const graphicHeight = 1080; +const graphicQuality = 100; + +const thumbGraphicWidth = 600; +const thumbGraphicHeight = 300; +const thumbGraphicQuality = 80; + +const shortTitleFront = 150 +const shortTitlePanel = 20 +const shortSumTitle = 250 + +const titleFilterRegex = new RegExp('/', 'g') + + +/////// limit +const imageLimit = 2; +const graphicLimit = 5; +const videoLimit = 20; +////// functions +const _upload = async (fileType, file, galleryId,Hash) => { + try { + + const fileName = `gallery_${galleryId}_${Date.now()}.${file.mimetype.split('/')[1]}`; + const uploadPath = `./static/uploads/${fileType}s/gallery/${fileName}`; + const thumbUploadPath = `./static/uploads/${fileType}s/gallery/thumb_${fileName}`; + + switch (fileType) { + case 'image' : + try { + const target = sharp(file.data) + await target + .resize(picsWidth, picsHeight, { + fit: 'cover' + }) + .toFormat('jpg') + .jpeg({ + quality: picsQuality + }) + .toFile(uploadPath) + + await target + .resize(thumbPicsWidth, thumbPicsHeight, { + fit: 'cover' + }) + .toFormat('jpg') + .jpeg({ + quality: thumbPicsQuality + }) + .toFile(thumbUploadPath) + } catch (error) { + console.log(error) + } + break + case 'graphic': + try { + const target = sharp(file.data) + await target + // .resize(graphicWidth, graphicHeight, { + // fit: 'cover' + // }) + .toFormat('jpg') + .jpeg({ + quality: graphicQuality + }) + .toFile(uploadPath) + + await target + .resize(thumbGraphicWidth, thumbGraphicHeight, { + fit: 'cover' + }) + .toFormat('jpg') + .jpeg({ + quality: thumbGraphicQuality + }) + .toFile(thumbUploadPath) + } catch (error) { + console.log(error) + } + break + case 'video': + await file.mv(uploadPath); + break + } + + return fileName; + + } catch (error) { + console.log(error); + return null + } +} + +const _deleteOne = async (fileType, name) => { + try { + let targetFile = `./static/uploads/${fileType}s/gallery/${name}`; + let thumbTargetFile = `./static/uploads/${fileType}s/gallery/thumb_${name}`; + + if (fs.existsSync(targetFile)) { + fs.unlink(targetFile, (err) => { + if (err) console.log(err) + }); + if (fileType !== 'video') { + fs.unlink(thumbTargetFile, (err) => { + if (err) console.log(err) + }); + } + return name; + } else { + return null; + } + + } catch (error) { + console.log(error); + return null + } +} + +const _deleteAll = async (galleryId, galleryType) => { + try { + const targetDir = `./static/uploads/${galleryType}s/gallery/`; + + const getFiles = fs.readdirSync(targetDir); + + for (const file of getFiles) { + if (file.includes(galleryId)) { + fs.unlink(`./static/uploads/${galleryType}s/gallery/${file}`, (err) => { + if (err) console.log(err); + }); + } + } + + } catch (error) { + console.log(error) + } +} + +const _deleteCover = async (galleryId) => { + try { + const targetDir = `./static/uploads/images/gallery/`; + + const getFiles = fs.readdirSync(targetDir); + + for (const file of getFiles) { + if (file.includes(galleryId) && file.includes('cover')) { + fs.unlink(`./static/uploads/images/gallery/${file}`, (err) => { + if (err) console.log(err) + }); + } + } + } catch (error) { + console.log(err) + } +} + +const _randomGallery = async (queryObject) => { + let setSkip; + try { + let temp = []; + const result = []; + /** total of gallery */ + const count = await Gallery.countDocuments(queryObject); + + if (count < 4) { + return await Gallery.find(queryObject); + } + + /** get random index number */ + while (temp.length < 4) { + setSkip = Math.floor(Math.random() * count); + temp.push(setSkip); + /** remove duplicate numbers */ + temp = [...new Set(temp)]; + } + + /** get news and push to result */ + for (let i = 0; i < 4; i++) { + const getGalley = await Gallery.findOne(queryObject).skip(temp[i]); + + if (getGalley) { + result.push(getGalley); + } + } + + /** return result */ + return result; + } catch (error) { + console.log(error) + /** return error */ + return [] + } +} + +const _checkSpecPermission = async (req, category) => { + return !req.user.specialPermissions.includes(category._id) && //check parent id exist in special permissions or not + !req.user.specialPermissions.some(item => category?.treeCat?.join().includes(item)); +} + + +/////////////////////////////////////////////////////////////////////// admin +module.exports.addGallery = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title) + .custom((value, {req}) => { + return Gallery.findOne({title: value}) + .then(gallery => { + if (gallery) return Promise.reject(_sr['fa'].duplicated.title); + else return true + }) + }), + + // body('summaryTitle') + // .notEmpty().withMessage(_sr['fa'].required.caption), + + body('leadTitle') + .notEmpty().withMessage(_sr['fa'].required.caption), + + body('catId') + .isMongoId().withMessage(_sr['fa'].required.field) + .if((value, { + req + }) => { + return req.body.catId + }) + .custom((value) => { + return Category.findOne({ + _id: value + }) + .then(category => { + if (!category) return Promise.reject(_sr['fa'].not_found.category); + else return true + }) + }), + + body('priority') + .isNumeric().withMessage(_sr['fa'].format.number), + + body('showInHome') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('special') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('siteMap') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('isEmbedded') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('publish') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('galleryType') + .notEmpty().withMessage(_sr['fa'].required.field) + .bail() + .isIn(['image', 'video', 'graphic']).withMessage(`${_sr['fa'].optional.onlyValid} => 'image' , 'video' , 'graphic`), + + body('keywords') + .if((value) => { + return value + }) + .custom((value) => { + const keywords = _.isString(value) ? JSON.parse(value) : value; + if (!_.isArray(keywords)) { + return Promise.reject(`این فیلد باید به صورت آرایه فرستاده شود`); + } + + return true; + }), + + body('modelType') + .custom((value, {req}) => { + if (req.user.portals.join() === portal.join()) { + if (!portal.includes(value)) { + return Promise.reject(_sr['fa'].required.field); + } else { + return true + } + } else { + return true + } + }), + + // body('metaTagDesc') + // .notEmpty().withMessage(_sr['fa'].required.field), + + body('newsFileId') + .optional().isMongoId().withMessage(`لطفا یک ای دی صحیح ارسال کنید`), + + ], + async (req, res) => { + + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + let { + title, + summaryTitle, + leadTitle, + isEmbedded, + catId, + priority, + showInHome, + special, + siteMap, + publish, + galleryType, + modelType, + keywords, + metaTagDesc, + newsFileId, + favorite + } = req.body; + + /** this code fix problem with array in form data */ + keywords = _.isString(keywords) ? JSON.parse(keywords) : keywords; + + /** set portals */ + modelType = (req.user.portals.join() === portal.join()) ? modelType : req.user.portals[0]; + + const galleryData = { + title: title?.trim()?.replace(titleFilterRegex, '-'), + summaryTitle: summaryTitle?.trim(), + leadTitle, + catId, + isEmbedded, + newsFileId, + priority, + showInHome, + special, + siteMap, + publish, + galleryType, + keywords, + metaTagDesc: metaTagDesc ? metaTagDesc?.trim() : leadTitle?.trim(), + favorite, + _creator: req.user._id, + modelType, + shortTitleFront: title?.trim()?.slice(0, shortTitleFront), + shortTitlePanel: title?.trim()?.slice(0, shortTitlePanel), + shortSummaryTitle: summaryTitle?.trim()?.slice(0, shortSumTitle) + }; + + if (catId) { + /** get category with populate parent */ + const category = await Category.findOne({ + _id: catId + }) + .populate({ + path: 'parent', + populate: { + path: 'parent', + model: 'Category' + } + }); + + /** if undefined we have error from database */ + if (!category) return res404(res, `دسته بندی انتخاب شده برای این خبر پیدا نشد`); + + /** check special permission */ + if (req.user.specialPermissions.length && await _checkSpecPermission(req, category)) { + return res.status(403).json({ + message: `شما نمیتوانید این دسته بندی را انتخاب کنید` + }); + } + + if (category.modelType !== modelType) { + return res.status(403).json({ + message: `شما اجازه استفاده از این دسته بندی را ندارید` + }); + } + + galleryData.allCat = category.treeCat; + galleryData.rootParent = category.rootParent || category._id; + } + + if (special){ + const getSpecGallery = await Gallery.find({special , modelType}) + + if (getSpecGallery.length){ + for (const item of getSpecGallery) { + item.special = false + await item.save() + } + } + } + + var createGallery = await Gallery.create(galleryData); + + if (!createGallery) { + return res500(res, `مشکلی در اجرای درخواست شما پیش آمده است`); + } + + + /** + * show result + */ + return res.json(createGallery); + } catch (error) { + console.log(error); + /** + * if we got unkown error show to client + */ + res500(res, error.message); + } + } +] + +module.exports.updateGallery = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title), + + // body('summaryTitle') + // .notEmpty().withMessage(_sr['fa'].required.caption), + + body('leadTitle') + .notEmpty().withMessage(_sr['fa'].required.caption), + + body('catId') + .isMongoId().withMessage(_sr['fa'].required.field) + .if((value, { + req + }) => { + return req.body.catId + }) + .custom((value) => { + return Category.findOne({ + _id: value + }) + .then(category => { + if (!category) return Promise.reject(_sr['fa'].not_found.category); + else return true + }) + }), + + // body('priority') + // .isNumeric().withMessage(_sr['fa'].format.number), + + + body('showInHome') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('special') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('isEmbedded') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + + body('embeddedCode') + .custom((value, {req}) => { + if (JSON.parse(req.body.isEmbedded) && _.isEmpty(value)) { + return Promise.reject(_sr['fa'].required.field); + } else { + return true; + } + }), + + body('siteMap') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('publish') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('newsFileId') + .optional().isMongoId().withMessage(`لطفا یک ای دی صحیح ارسال کنید`), + + body('galleryType') + .notEmpty().withMessage(_sr['fa'].required.field) + .bail() + .isIn(['image', 'video', 'graphic']).withMessage(`${_sr['fa'].optional.onlyValid} => 'image' , 'video' , 'graphic`), + + body('keywords') + .if((value) => { + return value + }) + .custom((value) => { + const keywords = _.isString(value) ? JSON.parse(value) : value; + if (!_.isArray(keywords)) { + return Promise.reject(`این فیلد باید به صورت آرایه فرستاده شود`); + } + + return true; + }), + + // body('metaTagDesc') + // .notEmpty().withMessage(_sr['fa'].required.field), + + body('modelType') + .custom((value, {req}) => { + if (req.user.portals.join() === portal.join()) { + if (!portal.includes(value)) { + return Promise.reject(_sr['fa'].required.field); + } else { + return true + } + } else { + return true + } + }), + + body('customDate') + .optional().isString().withMessage(`لطفا یک تاریخ صحیح وارد نمایید`) + + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + + /** + * get data from input + */ + let { + title, + summaryTitle, + leadTitle, + catId, + isEmbedded, + embeddedCode, + priority, + showInHome, + special, + siteMap, + publish, + galleryType, + modelType, + keywords, + metaTagDesc, + customDate, + newsFileId, + favorite + } = req.body; + + + /** this code fix problem with array in form data */ + keywords = _.isString(keywords) ? JSON.parse(keywords) : keywords; + + /** + * get id + */ + let galleryId = req.params.id; + + let targetGallery = await Gallery.findOne({_id: galleryId}); + + if (!targetGallery) { + return res404(res, `گالری مورد نظر پیدا نشد`); + } + + if (!req.user.portals.includes(targetGallery.modelType)) { + return res500(res, `شما اجازه آپدیت این گالری را ندارید`); + } + + if (targetGallery.title !== title) { + var checkDuppTitle = await Gallery.findOne({ + title: title + }); + + if (checkDuppTitle) { + return res.status(422).json({validation: {title: {msg: _sr['fa'].duplicated.title}}}); + } + } + + if (targetGallery.galleryType !== galleryType) { + await _deleteAll(targetGallery._id, targetGallery.galleryType); + targetGallery.images = []; + targetGallery.thumbImages = []; + targetGallery.video = null; + targetGallery.graphic = null; + targetGallery.thumbGraphic = null; + targetGallery.galleryType = galleryType; + targetGallery.galleryStatus = false; + } + + /** get category with populate parent */ + var category = await Category.findOne({ + _id: catId + }) + .populate({ + path: 'parent', + populate: { + path: 'parent', + model: 'Category' + } + }); + + /** if undefined we have error from database */ + if (!category) return res404(res, `دسته بندی انتخاب شده برای این رسانه پیدا نشد`); + + /** check special permission */ + if (req.user.specialPermissions.length && await _checkSpecPermission(req, category)) { + return res.status(403).json({ + message: `شما مجاز به انتخاب این دسته بندی نمی باشید` + }); + } + + if (category.modelType !== modelType) { + return res.status(403).json({ + message: `محدوده انتخاب شده شما با محدوده دسته بندی همخوانی ندارد` + }); + } + + if (catId && targetGallery.catId !== catId) { + targetGallery.allCat = category.treeCat; + targetGallery.rootParent = category.rootParent || category._id; + } + + if (isEmbedded === 'true' && galleryType === 'video') { + await _deleteOne(galleryType, targetGallery.video); + targetGallery.video = null + targetGallery.galleryStatus = false + } + + + if (special){ + const getSpecGallery = await Gallery.find({special , modelType}) + + if (getSpecGallery.length){ + for (const item of getSpecGallery) { + item.special = false + await item.save() + } + } + } + + targetGallery.title = title?.trim()?.replace(titleFilterRegex, '-'); + targetGallery.summaryTitle = summaryTitle?.trim(); + targetGallery.leadTitle = leadTitle + targetGallery.isEmbedded = isEmbedded; + targetGallery.embeddedCode = embeddedCode; + if (!_.isEmpty(embeddedCode) && targetGallery.galleryType === 'video') targetGallery.galleryStatus = true + targetGallery.catId = catId; + // targetGallery.priority = priority; + targetGallery.showInHome = showInHome; + targetGallery.special = special; + targetGallery.siteMap = siteMap; + targetGallery.publish = publish; + targetGallery.modelType = modelType; + targetGallery.keywords = keywords; + targetGallery.metaTagDesc = metaTagDesc?.trim() || leadTitle?.trim(); + targetGallery.favorite = favorite; + targetGallery.shortTitleFront = title?.slice(0, shortTitleFront) + targetGallery.shortTitlePanel = title?.slice(0, shortTitlePanel) + targetGallery.shortSummaryTitle = summaryTitle?.trim().slice(0, shortSumTitle) + targetGallery.customDate = customDate || targetGallery.created_at; + targetGallery.newsFileId = newsFileId; + targetGallery._updatedBy = req.user._id; + + if (customDate) targetGallery.customDateHistory.push({ + customDate, + _updatedBy: req.user._id + }) + + await targetGallery.save(); + + /** + * show result + */ + return res.json(targetGallery); + + } catch (error) { + return res500(res, error.message); + } + } +] + +module.exports.deletOneGallery = [ + async (req, res) => { + try { + var galleryId = req.params.id; + + var targetGallery = await Gallery.findOne({_id: galleryId}); + + /** check gallery exist or not */ + if (!targetGallery) { + return res404(res, `گالری مورد نظر پیدا نشد`); + } + + if (!req.user.portals.includes(targetGallery.modelType)) { + return res500(res, `شما اجازه پاک کردن این گالری را ندارید`); + } + + await _deleteAll(targetGallery._id, targetGallery.galleryType); + await _deleteCover(targetGallery._id); + + /** delete gallery */ + await targetGallery.deleteOne(); + + /** + * show result + */ + return res.json(targetGallery); + + } catch (error) { + /** + * if we got unkown error show to client + */ + return res500(res, error); + } + } +] + +module.exports.getOneGallery = [ + async (req, res) => { + try { + var galleryId = req.params.id; + + // var findQuery = req.user.portals.length == 2 ? {_id : galleryId} : {_id : galleryId , modelType : req.user.portals[0]}; + + var gallery = await Gallery.findOne({_id: galleryId}).populate('catId'); + + if (!gallery) { + return res404(res, `گالری مورد نظر پیدا نشد`); + } + + if (!req.user.portals.includes(gallery.modelType)) { + return res500(res, `شما اجازه دسترسی به اطلاعات این گالری را ندارید`); + } + + /** + * show result + */ + return res.json(gallery); + } catch (error) { + /** + * if we got unkown error show to client + */ + res500(res, error); + } + } +] + +module.exports.getAll = [ + async (req, res) => { + try { + + + var findQuery = req.user.portals.join() === portal.join() ? {} : {modelType: req.user.portals[0]}; + + // @todo can change it + if (req.user.specialPermissions.length) { + findQuery.catId = {$in: req.user.specialPermissions} + } + + /** get all gallery */ + var allGallery = await Gallery.paginate(findQuery, { + page: req.query.page, limit, populate: [{ + path: '_creator', + select: { + firstName: 1, + lastName: 1, + profilePic: 1 + } + }, {path: 'catId'}], + sort: { + customDate: -1 + } + }); + + /** if null we have error */ + if (!allGallery) { + return res500(res, `مشکلی در گرفتن گالری ها پیش آمده لطفا با پشتیبانی تماس بگیرید`); + } + + /** show result to client */ + return res.json(allGallery); + } catch (error) { + /** if we have unknown error show it */ + return res500(res, error.message); + } + } +] + +module.exports.search = [ + async (req, res) => { + try { + let findQuery = {}; + findQuery['$and'] = []; + findQuery['$or'] = []; + + if (req.user.portals.length) { + findQuery.modelType = { + $in: req.user.portals + }; + } + + var { + term, + catId, + showInHome, + portals, + galleryStatus, + publish, + galleryType, + date + } = req.body; + + /** search by term */ + if (term && !_.isEmpty(term)) { + findQuery['$or'].push( + { + title: { + $regex: '.*' + term + '.*' + }, + } + ); + } + /** search by catId */ + if (req.user.specialPermissions.length) { + findQuery.catId = {$in: req.user.specialPermissions} + } else if (catId && !_.isEmpty(catId)) { + findQuery['$and'].push({ + catId + }); + } + /** search by galleryType */ + if (galleryType && !_.isEmpty(galleryType)) { + findQuery['$and'].push({ + galleryType + }); + } + /** search by publish */ + if (!_.isUndefined(publish) && _.isBoolean(publish)) { + findQuery['$and'].push({ + publish + }); + } + /** search by portals */ + if (req.user.portals.length) { + findQuery.modelType = { + $in: req.user.portals + }; + } else if (portals && !_.isEmpty(portals)) { + findQuery['$and'].push({ + modelType: { + $in: portals + } + }) + } + /** search by galleryStatus */ + if (!_.isUndefined(galleryStatus) && _.isBoolean(galleryStatus)) { + findQuery['$and'].push({ + galleryStatus + }) + } + + /** search by date */ + if (date && !_.isEmpty(date)) { + if (date.length === 1) { + findQuery['$and'].push({ + created_at: { + $gte: moment(date[0]).startOf('days'), + $lt: moment(date[0]).endOf('days') + } + }); + } else { + findQuery['$and'].push({ + created_at: { + $gte: new Date(date[0]), + $lt: new Date(date[1]) + } + }); + } + } + + _.isEmpty(findQuery['$and']) && delete findQuery['$and']; + _.isEmpty(findQuery['$or']) && delete findQuery['$or']; + + /** get gallery */ + var gallery = await Gallery.paginate(findQuery, { + page: req.query.page, limit, populate: [{ + path: '_creator', + select: { + firstName: 1, + lastName: 1, + profilePic: 1 + } + },{path: 'catId'}], + sort: { + customDate: -1 + } + }); + + /** show result */ + return res.json(gallery); + } catch (error) { + return res500(res, error?.message) + } + } +] + +/////////////////////////////////////////////////////////////////////// manage gallery files +/// Develope + +module.exports.uploadPDF = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title) + .bail(), + body('pdf') + .notEmpty().withMessage(_sr['fa'].required.field) + .bail(), + ], + async (req, res) => { + const errors = validationResult(req); + if (!errors.isEmpty()) { + return res.status(422).json({ + validation: errors.mapped() + }); + } + try { + const { title, pdf } = req.body; + + if (!req.files || !req.files.file) { + return res.status(422).json({ + validation: { file: { msg: `لطفا یک فایل ارسال کنید` } } + }); + } + + const file = req.files.file; + + const mb = file.size / (1024 * 1024); + + if (fileType === 'image' && mb > imageLimit) { + return res.status(422).json({ + validation: { file: { msg: `${_sr['fa'].max_char.data_size} 5 مگابایت` } } + }); + } + + if (fileType === 'graphic' && mb > graphicLimit) { + return res.status(422).json({ + validation: { file: { msg: `${_sr['fa'].max_char.data_size} 10 مگابایت` } } + }); + } + + if (fileType === 'video' && mb > videoLimit) { + return res.status(422).json({ + validation: { file: { msg: `${_sr['fa'].max_char.data_size} 50 مگابایت` } } + }); + } + + if (fileType === 'image' && !_sr.supportedImageFormats.includes(file.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { file: { msg: _sr['fa'].format.image } } + }); + } + + if (fileType === 'video' && !_sr.supportedVideoFormats.includes(file.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { file: { msg: _sr['fa'].format.video } } + }); + } + + if (!req.user.portals.includes(targetGallery.modelType)) { + return res.status(500).json({ msg: `شما اجازه آپلود فایل برای این گالری را ندارید` }); + } + + if (targetGallery.galleryType !== fileType) { + return res.status(422).json({ + validation: { file: { msg: `شما اجازه آپلود فایل با تایپ متفاوت از گالری ندارید` } } + }); + } + + const fileName = await _upload(fileType, file, targetGallery._id); + + switch (fileType) { + case 'image': + targetGallery.uidImage.push(fileHash) + targetGallery.images.push(fileName); + targetGallery.thumbImages.push(`thumb_${fileName}`); + break; + case 'video': + if (targetGallery.video && await fs.existsSync(`./static/${targetGallery?.video}`)) { + fs.unlink(`./static/${targetGallery.video}`, (err) => { + if (err) return res.status(500).json({ msg: err.message }); + }); + } + targetGallery.video = fileName; + break; + case 'graphic': + if (targetGallery.graphic && await fs.existsSync(`./static/${targetGallery?.graphic}`)) { + fs.unlink(`./static/${targetGallery.graphic}`, (err) => { + if (err) return res.status(500).json({ msg: err.message }); + }); + fs.unlink(`./static/${targetGallery.thumbGraphic}`, (err) => { + if (err) return res.status(500).json({ msg: err.message }); + }); + } + targetGallery.graphic = fileName; + targetGallery.thumbGraphic = `thumb_${fileName}`; + break; + } + + targetGallery.galleryStatus = Boolean(targetGallery.cover); + targetGallery._updatedBy = req.user._id; + targetGallery.imageNames = req.files.file; + await targetGallery.save(); + + const gallery = await Gallery.findById(targetGallery._id); + + return res.json(gallery); + } catch (error) { + console.log(error.message); + + return res.status(500).json({ msg: error.message }); + } + } +]; + +module.exports.uploadFile = [ + [ + body('galleryId') + .notEmpty().withMessage(_sr['fa'].required.title) + .bail() + .custom((value, { req }) => { + return Gallery.findOne({ _id: value }) + .then(gallery => { + if (!gallery) return Promise.reject(_sr['fa'].not_found.item_id); + else return true; + }); + }), + body('fileType') + .notEmpty().withMessage(_sr['fa'].required.field) + .bail() + .isIn(['image', 'video', 'graphic']).withMessage(`${_sr['fa'].optional.onlyValid} => 'image' , 'video' , 'graphic'`), + ], + async (req, res) => { + const errors = validationResult(req); + if (!errors.isEmpty()) { + return res.status(422).json({ + validation: errors.mapped() + }); + } + + try { + const { galleryId, fileType } = req.body; + + if (!req.files || !req.files.file) { + return res.status(422).json({ + validation: { file: { msg: `لطفا یک فایل ارسال کنید` } } + }); + } + + const file = req.files.file; + const fileBuffer = file.data; + const fileHash = crypto.createHash('md5').update(fileBuffer).digest('hex'); + + const targetGallery = await Gallery.findOne({ _id: galleryId }); + if (!targetGallery) { + return res.status(404).json({ msg: `گالری پیدا نشد` }); + } + + const Hash = targetGallery.uidImage.map(path => path.replace("/uploads/images/gallery/", "")); + if (Hash.includes(fileHash)) { + return res.status(200).json({ msg: `این فایل قبلا بارگذاری شده` }); + } + + const mb = file.size / (1024 * 1024); + + if (fileType === 'image' && mb > imageLimit) { + return res.status(422).json({ + validation: { file: { msg: `${_sr['fa'].max_char.data_size} 5 مگابایت` } } + }); + } + + if (fileType === 'graphic' && mb > graphicLimit) { + return res.status(422).json({ + validation: { file: { msg: `${_sr['fa'].max_char.data_size} 10 مگابایت` } } + }); + } + + if (fileType === 'video' && mb > videoLimit) { + return res.status(422).json({ + validation: { file: { msg: `${_sr['fa'].max_char.data_size} 50 مگابایت` } } + }); + } + + if (fileType === 'image' && !_sr.supportedImageFormats.includes(file.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { file: { msg: _sr['fa'].format.image } } + }); + } + + if (fileType === 'video' && !_sr.supportedVideoFormats.includes(file.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { file: { msg: _sr['fa'].format.video } } + }); + } + + if (!req.user.portals.includes(targetGallery.modelType)) { + return res.status(500).json({ msg: `شما اجازه آپلود فایل برای این گالری را ندارید` }); + } + + if (targetGallery.galleryType !== fileType) { + return res.status(422).json({ + validation: { file: { msg: `شما اجازه آپلود فایل با تایپ متفاوت از گالری ندارید` } } + }); + } + + const fileName = await _upload(fileType, file, targetGallery._id); + + switch (fileType) { + case 'image': + targetGallery.uidImage.push(fileHash) + targetGallery.images.push(fileName); + targetGallery.thumbImages.push(`thumb_${fileName}`); + break; + case 'video': + if (targetGallery.video && await fs.existsSync(`./static/${targetGallery?.video}`)) { + fs.unlink(`./static/${targetGallery.video}`, (err) => { + if (err) return res.status(500).json({ msg: err.message }); + }); + } + targetGallery.video = fileName; + break; + case 'graphic': + if (targetGallery.graphic && await fs.existsSync(`./static/${targetGallery?.graphic}`)) { + fs.unlink(`./static/${targetGallery.graphic}`, (err) => { + if (err) return res.status(500).json({ msg: err.message }); + }); + fs.unlink(`./static/${targetGallery.thumbGraphic}`, (err) => { + if (err) return res.status(500).json({ msg: err.message }); + }); + } + targetGallery.graphic = fileName; + targetGallery.thumbGraphic = `thumb_${fileName}`; + break; + } + + // Update the uidImage with the new fileHash + targetGallery.galleryStatus = Boolean(targetGallery.cover); + targetGallery._updatedBy = req.user._id; + targetGallery.imageNames = req.files.file; + await targetGallery.save(); + + const gallery = await Gallery.findById(targetGallery._id); + + /** + * show result + */ + return res.json(gallery); + } catch (error) { + console.log(error.message); + /** + * if we got unknown error show to client + */ + return res.status(500).json({ msg: error.message }); + } + } +]; +// module.exports.uploadFile = [ +// [ +// body('galleryId') +// .notEmpty().withMessage(_sr['fa'].required.title) +// .bail() +// .custom((value, {req}) => { +// return Gallery.findOne({_id: value}) +// .then(gallery => { +// if (!gallery) return Promise.reject(_sr['fa'].not_found.item_id); +// else return true +// }) +// }), +// body('fileType') +// .notEmpty().withMessage(_sr['fa'].required.field) +// .bail() +// .isIn(['image', 'video', 'graphic']).withMessage(`${_sr['fa'].optional.onlyValid} => 'image' , 'video' , 'graphic'`), +// +// ], +// async (req, res) => { +// +// const errors = validationResult(req) +// if (!errors.isEmpty()) return res.status(422).json({ +// validation: errors.mapped() +// }); +// +// try { +// let { +// galleryId, +// fileType, +// } = req.body; +// +// if (!req.files || !req.files.file) { +// return res.status(422).json({ +// validation: {file: {msg: `لطفا یک فایل ارسال کنید`}} +// }); +// } +// +// var file = req.files.file; +// const fileBuffer = file.data; +// const fileHash = crypto.createHash('md5').update(fileBuffer).digest('hex'); +// +// const ImageValid = await Gallery.findOne({ _id: galleryId }); +// if (!ImageValid) return res404(res, `گالری پیدا نشد`); +// +// const existingFileHashes = ImageValid.fileHashes || []; +// if (existingFileHashes.includes(fileHash)) { +// return res.status(422).json({ +// validation: { file: { msg: `این فایل قبلاً آپلود شده است` } } +// }); +// } +// /** start convert byte to mb */ +// var mb = file.size / (1024 * 1024); +// +// /** check limit size of image */ +// if (fileType === 'image' && mb > imageLimit) { +// return res.status(422).json({ +// validation: {file: {msg: `${_sr['fa'].max_char.data_size} 5 مگابایت`}} +// }); +// } +// +// /** check limit size of graphics */ +// if (fileType === 'graphic' && mb > graphicLimit) { +// return res.status(422).json({ +// validation: {file: {msg: `${_sr['fa'].max_char.data_size} 10 مگابایت`}} +// }); +// } +// +// /** check limit size of video */ +// if (fileType === 'video' && mb > videoLimit) { +// return res.status(422).json({ +// validation: {file: {msg: `${_sr['fa'].max_char.data_size} 50 مگابایت`}} +// }); +// } +// +// /** check format of image */ +// if (fileType === 'image' && !_sr.supportedImageFormats.includes(file.mimetype.split('/')[1])) { +// return res.status(422).json({ +// validation: {file: {msg: _sr['fa'].format.image}} +// }); +// } +// +// /** check format of video */ +// if (fileType === 'video' && !_sr.supportedVideoFormats.includes(file.mimetype.split('/')[1])) { +// return res.status(422).json({ +// validation: {file: {msg: _sr['fa'].format.video}} +// }); +// } +// +// var targetGallery = await Gallery.findOne({_id: galleryId}); +// +// +// if (!targetGallery) return res404(res, `گالری پیدا نشد`); +// +// /** check portal type */ +// if (!req.user.portals.includes(targetGallery.modelType)) { +// return res500(res, `شما اجازه آپلود فایل برای این گالری را ندارید`); +// } +// +// /** check type of input with gallery type */ +// if (targetGallery.galleryType !== fileType) { +// return res.status(422).json({ +// validation: {file: {msg: `شما اجازه آپلود فایل با تایپ متفاوت از گالری ندارید`}} +// }); +// } +// +// /** upload pic or video get name */ +// var fileName = await _upload(fileType, file, targetGallery._id); +// +// +// // if(fileType == 'image'){ +// // targetGallery.images.push(fileName); +// // targetGallery.thumbImages.push(`thumb_${fileName}`); +// // }else{ +// // if(targetGallery.video){ +// // fs.unlink(`./static/${targetGallery.video}`, (err) => { +// // if (err) res500(res , err.message); +// // }); +// // } +// // targetGallery.video = fileName; +// // } +// +// switch (fileType) { +// case 'image': +// targetGallery.images.push(fileName); +// targetGallery.thumbImages.push(`thumb_${fileName}`); +// break; +// case 'video': +// if (targetGallery.video && await fs.existsSync(`./static/${targetGallery?.video}`)) { +// fs.unlink(`./static/${targetGallery.video}`, (err) => { +// if (err) return res500(res, err.message); +// }); +// } +// targetGallery.video = fileName; +// break; +// case 'graphic': +// if (targetGallery.graphic && await fs.existsSync(`./static/${targetGallery?.graphic}`)) { +// fs.unlink(`./static/${targetGallery.graphic}`, (err) => { +// if (err) return res500(res, err.message); +// }); +// fs.unlink(`./static/${targetGallery.thumbGraphic}`, (err) => { +// if (err) return res500(res, err.message); +// }); +// } +// targetGallery.graphic = fileName; +// targetGallery.thumbGraphic = `thumb_${fileName}`; +// break; +// } +// +// targetGallery.galleryStatus = Boolean(targetGallery.cover); +// targetGallery._updatedBy = req.user._id; +// targetGallery.imageNames = req.files.file +// await targetGallery.save(); +// +// var gallery = await Gallery.findById(targetGallery._id); +// +// /** +// * show result +// */ +// return res.json(gallery); +// } catch (error) { +// console.log(error.message); +// /** +// * if we got unkown error show to client +// */ +// return res500(res, error.message); +// } +// } +// ] + +module.exports.deleteFile = [ + [ + body('galleryId') + .notEmpty().withMessage(_sr['fa'].required.title) + .bail() + .custom((value, {req}) => { + return Gallery.findOne({_id: value}) + .then(gallery => { + if (!gallery) return Promise.reject(_sr['fa'].not_found.item_id); + else return true + }) + }), + + body('name') + .notEmpty().withMessage(_sr['fa'].required.field) + + ], + async (req, res) => { + + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + const {galleryId, name} = req.body; + + const targetGallery = await Gallery.findOne({_id: galleryId}).lean(); + + if (!targetGallery) return res404(res, `گالری مورد نظر پیدا نشد`); + + /** check portal type */ + if (!req.user.portals.includes(targetGallery.modelType)) return res500(res, `شما اجازه حذف فایل برای این گالری را ندارید`); + + if ( + (targetGallery.images.length === 0 && targetGallery.galleryType === 'image') || + (!targetGallery.video && targetGallery.galleryType === 'video') + ) return res404(res, `عکس یا فیلم درخواست شده پیدا نشد`) + + let deleteFile = await _deleteOne(targetGallery.galleryType, name); + + // if (!deleteFile) return res404(res, `عکس درخواست شده پیدا نشد`); + + /** update gallery after delete file */ + let imageArr = []; + if (targetGallery.galleryType === 'image' || targetGallery.galleryType === 'graphic') { + let index = targetGallery.images.findIndex((item) => { + return item.includes(deleteFile || name); + }); + + if (index > -1) { + targetGallery.images.splice(index, 1); + targetGallery.thumbImages.splice(index, 1) + } + + } else { + targetGallery.video = null; + } + + targetGallery.galleryStatus = !!targetGallery.images.length; + + var gallery = await Gallery.findByIdAndUpdate(targetGallery._id, targetGallery, {new: true}); + /** + * show result + */ + return res.json(gallery); + } catch (error) { + console.log(error); + /** + * if we got unkown error show to client + */ + return res500(res, error.message); + } + } +] + +// module.exports.uploadCover = [ +// [ +// body('galleryId') +// .notEmpty().withMessage(_sr['fa'].required.title) +// .bail() +// .custom((value, {req}) => { +// return Gallery.findOne({_id: value}) +// .then(gallery => { +// if (!gallery) return Promise.reject(_sr['fa'].not_found.item_id); +// else return true +// }) +// }), +// ], +// async (req, res) => { +// +// const errors = validationResult(req) +// if (!errors.isEmpty()) return res.status(422).json({ +// validation: errors.mapped() +// }); +// +// try { +// const { +// galleryId, +// } = req.body; +// +// if (!req.files || !req.files.file) { +// return res.status(422).json({ +// validation: {file: {msg: `لطفا یک فایل ارسال کنید`}} +// }); +// } +// +// const file = req.files.file; +// +// /** start convert byte to mb */ +// const mb = file.size ; +// +// /** check limit size of image */ +// if (mb > 5) { +// return res.status(422).json({ +// validation: {file: {msg: `${_sr['fa'].max_char.data_size} 5 مگابایت`}} +// }); +// } +// +// /** check format of image */ +// if (!_sr.supportedImageFormats.includes(file.mimetype.split('/')[1])) { +// return res.status(422).json({ +// validation: {file: {msg: _sr['fa'].format.image}} +// }); +// } +// +// let targetGallery = await Gallery.findOne({_id: galleryId}); +// +// +// if (!targetGallery) { +// return res404(res, `گالری پیدا نشد`); +// } +// +// /** check portal type */ +// if (!req.user.portals.includes(targetGallery.modelType)) { +// return res500(res, `شما اجازه آپلود فایل برای این گالری را ندارید`); +// } +// +// const imageName = `cover_gallery_${Date.now()}_${targetGallery._id}.jpg`; +// const thumbImg = `thumb_${imageName}`; +// try { +// const target = sharp(file.data) +// await target +// .resize(coverWidth, coverHeight, { +// fit: 'cover' +// }) +// .toFormat('jpg') +// .jpeg({ +// quality: coverQuality +// }) +// .toFile(`./static/uploads/images/gallery/${imageName}`); +// +// await target +// .resize(thumbCoverWidth, thumbCoverHeight, { +// fit: 'cover' +// }) +// .toFormat('jpg') +// .jpeg({ +// quality: thumbCoverQuality +// }) +// .toFile(`./static/uploads/images/gallery/${thumbImg}`); +// +// +// /** +// * if exist old pic delete it from file +// */ +// if (targetGallery.cover) { +// let oldPic = `./static${targetGallery.cover}`; +// +// if (fs.existsSync(oldPic)) { +// fs.unlink(oldPic, (err) => { +// if (err) return res500(res, err?.message); +// }); +// } +// } +// +// if (targetGallery.thumbCover) { +// let oldPic = `./static${targetGallery.thumbCover}`; +// +// if (fs.existsSync(oldPic)) { +// fs.unlink(oldPic, (err) => { +// if (err) return res500(res, err?.message); +// }); +// } +// } +// +// targetGallery.cover = imageName; +// targetGallery.thumbCover = thumbImg; +// +// targetGallery.galleryStatus = targetGallery.images.length || +// targetGallery.video || +// targetGallery.graphic ? true : false; +// +// } catch (e) { +// return res500(res, e?.message); +// } +// +// await targetGallery.save(); +// +// const gallery = await Gallery.findById(targetGallery._id); +// +// /** +// * show result +// */ +// return res.json(gallery); +// } catch (error) { +// console.log(error); +// /** +// * if we got unkown error show to client +// */ +// return res500(res, error.message); +// } +// } +// ] +// Prod +//Develope +module.exports.uploadCover = [ + [ + body('galleryId') + .notEmpty().withMessage(_sr['fa'].required.title) + ], + async (req, res) => { + const errors = validationResult(req); + if (!errors.isEmpty()) { + return res.status(422).json({ + validation: errors.mapped() + }); + } + try { + const { galleryId } = req.body; + + if (!req.files || !req.files.file) { + return res.status(422).json({ + validation: { file: { msg: `لطفا یک فایل ارسال کنید` } } + }); + } + + const file = req.files.file; + + /** start convert byte to mb */ + const mb = file.size / (1024 * 1024); // Convert bytes to megabytes + + /** check limit size of image */ + if (mb > 5) { + return res.status(422).json({ + validation: { file: { msg: `${_sr['fa'].max_char.data_size} 5 مگابایت` } } + }); + } + + /** check format of image */ + if (!_sr.supportedImageFormats.includes(file.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { file: { msg: _sr['fa'].format.image } } + }); + } + + const imageName = `cover_gallery_${Date.now()}.jpg`; + const thumbImg = `thumb_${imageName}`; + try { + const target = sharp(file.data); + + await target + .resize(coverWidth, coverHeight, { + fit: 'cover' + }) + .toFormat('jpg') + .jpeg({ + quality: coverQuality + }) + .toFile(`./static/uploads/images/gallery/${imageName}`); + + await target + .resize(thumbCoverWidth, thumbCoverHeight, { + fit: 'cover' + }) + .toFormat('jpg') + .jpeg({ + quality: thumbCoverQuality + }) + .toFile(`./static/uploads/images/gallery/${thumbImg}`); + + return res.json({ + cover: imageName, + thumbCover: thumbImg, + message: "Images uploaded successfully" + }); + } catch (e) { + return res500(res, e?.message); + } + } catch (error) { + console.log(error); + return res500(res, error.message); + } + } +]; +////////////////////////////////////////////////////////////////////// get gallery +module.exports.getGalleryPublic = [ + async (req, res) => { + try { + const {type, page} = req.query; + const catId = req.params.catId + const findQuery = {}; + + findQuery.galleryType = type; + findQuery.galleryStatus = true; + findQuery.catId = catId; + + let setLimit = 9; + + const getGallery = await Gallery.paginate(findQuery, { + page: page || 1, + limit: setLimit, + populate: { + path: '_creator', select: 'firstName lastName' + }, + sort: {customDate: -1} + }); + + const favorites = await Gallery.find({...findQuery, favorite: true}) + + const result = { + all: getGallery, + favorites: favorites + } + + return res.json(result); + } catch (error) { + return res500(res, error?.message); + } + } +] + + +module.exports.GetArchive = [ + async (req,res)=>{ + try { + const Archive = await Gallery.find({ images: { $exists: true } }); + res.status(200).json(Archive) + }catch (e) { + res.status(500).json({msg:e.message}) + } + } +] +module.exports.getAllGallery = [ + async (req, res) => { + try { + const {type, page, portal} = req.query; + let findQuery = {}; + + findQuery.galleryType = type; + findQuery.galleryStatus = true; + findQuery.publish = true; + findQuery.modelType = portal; + + let setLimit = 13; + + const getGallery = await Gallery.paginate(findQuery, { + page: page || 1, + limit: setLimit, + populate: { + path: '_creator', select: 'firstName lastName' + }, + sort: {customDate: -1} + }); + + const favorites = await Gallery.find({...findQuery, favorite: true}).sort({customDate: -1}) + const hero = await Gallery.findOne({...findQuery, special: true}).sort({customDate: -1}) + + const result = { + all: getGallery, + hero: hero, + favorites: favorites + } + + return res.json(result); + } catch (error) { + return res500(res, error?.message); + } + } +] + +module.exports.viewGallery = [ + async (req, res) => { + try { + const galleryTitle = req.params.title; + + let targetGallery = await Gallery.findOne({ + _id: galleryTitle, + galleryStatus: true, + publish: true + }) + .populate('_creator', {firstName: 1, lastName: 1, profilePic: 1}); + + if (!targetGallery) { + return res404(res, `گالری مورد نطر پیدا نشد`); + } + + ++targetGallery.userViews; + + await targetGallery.save(); + + return res.json(targetGallery); + } catch (error) { + return res500(res, error?.message); + } + } +] + +module.exports.getRelated = [ + async (req, res) => { + try { + const { + type, + title + } = req.query; + + const targetGallery = await Gallery.findById(title); + + if (!targetGallery) { + return res.json([]); + } + + let findQuery = {}; + + findQuery.galleryType = type; + findQuery._id = { + $ne: title + }; + findQuery.galleryStatus = true; + findQuery.publish = true; + + const getGallery = await Gallery.find(findQuery).populate({ + path: '_creator', + select: 'firstName lastName' + }).limit(4).sort({ + customDate: -1 + }); + + return res.json(getGallery); + } catch (error) { + return res500(res, error?.message); + } + } +] diff --git a/server/controllers/homeController.js b/server/controllers/homeController.js new file mode 100644 index 0000000..7e898cb --- /dev/null +++ b/server/controllers/homeController.js @@ -0,0 +1,413 @@ +const {body, validationResult} = require('express-validator'); +const mongoose = require('mongoose'); +const sharp = require('sharp'); +const {_sr} = require('../plugins/serverResponses'); +const allPortals = require('../plugins/portals'); +const {res404, res500} = require('../plugins/controllersHelperFunctions'); +const fs = require('fs'); +const moment = require('moment-jalaali'); +const axios = require('axios'); + +const HomePage = require('../models/HomePage'); +const News = require('./../models/News'); +const Gallery = require('./../models/Gallery'); +const Category = require('./../models/Category'); +const NewsFile = require('./../models/NewsFile'); +const Slider = require('./../models/Slider'); +const Links = require('./../models/Links'); +const Content = require('./../models/Content'); +const Occasion = require('./../models/Occasion'); + +/////////////////////////////////////////////////////// admin + +module.exports.updateHomePage = [ + async (req, res) => { + try { + const { + s2, + s3, + s4, + s5, + s6, + s2Side, + s3Side, + s4Side, + s5Side, + s6Side + } = req.body; + + const portal = req.query.portal ? 'ostandari' : req.query.portal; + + if (!req.user.portals.includes(portal)) { + return res.status(403).json({message: `شما اجازه دسترسی به اطلاعات این صفحه را ندارید`}); + } + + if (!allPortals.some(item => item.value === portal)) { + return res.status(403).json(`پرتال ارسال شده وجود ندارد`); + } + + const addHome = await HomePage.findOne({modelType: portal}); + if (addHome) { + const oldData = addHome + oldData.s2 = s2 || null + oldData.s3 = s3 || null + oldData.s4 = s4 || null + oldData.s5 = s5 || null + oldData.s6 = s6 || null + // side bar + oldData.s2Side = s2Side || null + oldData.s3Side = s3Side || null + oldData.s4Side = s4Side || null + oldData.s5Side = s5Side || null + oldData.s6Side = s6Side || null + await oldData.save(); + + return res.json({message: _sr['fa'].response.success_save}) + } else { + const data = { + s2: s2 || null, + s3: s3 || null, + s4: s4 || null, + s5: s5 || null, + s6: s6 || null, + s2Side: s2Side || null, + s3Side: s3Side || null, + s4Side: s4Side || null, + s5Side: s5Side || null, + s6Side: s6Side || null, + modelType: portal + } + + const addHome = await HomePage.create(data); + + if (!addHome) return res500(res, `مشکلی در اجرای درخواست شما به وجود آمده است`); + + return res.json({message: _sr['fa'].response.success_save}) + } + + } catch (e) { + console.log(e) + return res500(res, 'مشکلی در گرفتن اطلاعات پیش آمده است'); + } + } +] + +module.exports.getHomePage = [ + async (req, res) => { + try { + const portal = req?.query?.portal ? req.query.portal : 'ostandari'; + + if (!req.user.portals.includes(portal)) { + return res.status(403).json(`شما اجازه دسترسی به اطلاعات این صفحه را ندارید`); + } + + const getHome = await HomePage.find({modelType: portal}); + if (getHome.length) return res.json(getHome[0]) + else return res.json({ + s2: '', + s3: '', + s4: '', + s5: [], + s6: '', + s2Side: '', + s3Side: '', + s4Side: '', + s5Side: '', + s6Side: '' + }) + } catch (e) { + return res500(res, 'مشکلی در گرفتن اطلاعات پیش آمده است'); + } + } +] + +module.exports.changeShowInHome = [ + [ + body('id') + .notEmpty().withMessage(_sr['fa'].required.title), + + body('modelName') + .custom((value, {req}) => { + const models = ['news', 'newsFile', 'gallery'] + if (!models.includes(value)) { + return Promise.reject(_sr['fa'].required.field); + } else { + return true + } + }) + + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + try { + const {id, modelName} = req.body; + + let Model; + + switch (modelName) { + case 'news': + Model = News; + break; + case 'newsFile' : + Model = NewsFile; + break; + case 'gallery': + Model = Gallery; + break; + } + + const targetModel = await Model.findById(id) + + if (!targetModel) return res404(res, `اطلاعات مورد یافت نشد`); + + targetModel.showInHome = !targetModel.showInHome; + + await targetModel.save(); + + return res.json(targetModel); + } catch (e) { + return res500(res, 'مشکلی در گرفتن اطلاعات پیش آمده است'); + } + } +] + +module.exports.getAllShowInHomeFalse = [ + async (req, res) => { + try { + const portal = req?.query?.portal ? req.query.portal : 'ostandari'; + + const requests = [ + News.find({modelType: portal, showInHome: false}), + NewsFile.find({modelType: portal, showInHome: false}), + Gallery.find({modelType: portal, showInHome: false}), + ] + + let fetch = await Promise.all(requests); + + const [news, newsFile, media] = fetch; + + return res.json({ + news, + newsFile, + media + }) + } catch (e) { + return res500(res, 'مشکلی در گرفتن اطلاعات پیش آمده است'); + } + } +] + +/////////////////////////////////////////////////////// public +module.exports.getHomeByUser = [ + async (req, res) => { + try { + const homeSetting = await HomePage.find(); + + const data = { + occasion: [], + s1: [], + s2: [], + s3: [], + s4: [], + s5: [], + s6: [], + s2Side: [], + s3Side: [], + s4Side: [], + s5Side: [], + s6Side: [], + }; + + const portal = req?.query?.portal ? req.query.portal : 'ostandari' + + const settings = homeSetting[0] + const query = {publish: true, showInHome: true, modelType: portal} + + + const request = [ + // Occasion + Occasion.find({ + publish: true, + status: true, + startDate: {$lte: new Date()}, + endDate: {$gte: new Date()} + }), + // s1 + Slider.find({modelType: portal}), + // s2 + News.find(settings?.s2 ? { + ...query, + catId: settings?.s2, + newsStatus: true + } : {...query, newsStatus: true}).populate('catId', 'title').limit(8).sort({customDate: -1}), + // s3 + NewsFile.find(settings?.s3 ? { + ...query, + catId: settings?.s3 + } : query).populate('catId', 'title').limit(4).sort({_id: -1}), + // s6 + News.find(settings?.s6 ? { + ...query, + catId: settings?.s6, + newsStatus: true + } : {...query, newsStatus: true}).limit(8).sort({userViews: -1}), + // s1Side + Content.find({param: 'manager'}), + // s2Side + Gallery.find(settings?.s2Side ? { + ...query, + catId: settings?.s2Side, + galleryType: 'image', + galleryStatus: true + } : {...query, galleryType: 'image', galleryStatus: true}).populate('catId', 'title').limit(4).sort({customDate: -1}), + // s3Side + Gallery.find(settings?.s3Side ? { + ...query, + catId: settings?.s3Side, + galleryType: 'video', + galleryStatus: true + } : {...query, galleryType: 'video', galleryStatus: true}).populate('catId', 'title').limit(4).sort({customDate: -1}), + // s4Side + Gallery.find(settings?.s4Side ? { + ...query, + catId: settings?.s4Side, + galleryType: 'graphic', + galleryStatus: true + } : {...query, galleryType: 'graphic', galleryStatus: true}).populate('catId', 'title').limit(4).sort({customDate: -1}), + // s5Side + News.find(settings?.s5Side ? { + ...query, + catId: settings?.s5Side, + special: true, + newsStatus: true + } : {...query, newsStatus: true, special: true}).limit(4).sort({customDate: -1}), + // s6Side + News.find(settings?.s6Side ? { + ...query, + catId: settings?.s6Side, + newsStatus: true + } : {...query, newsStatus: true}).limit(6).sort({customDate: -1}), + // s7Side + Links.find({modelType: portal, showInHome: true}), + // notifications-side + News.find(settings?.s6Side ? { + ...query, + catId: settings?.s5Side, + newsStatus: true, + notifications: true + } : {...query, newsStatus: true, notifications: true}).limit(6).sort({customDate: -1}), + ] + + + const fetch = await Promise.all(request) + + const [occasion, s1, s2, s3, s6, s1Side, s2Side, s3Side, s4Side, s5Side, s6Side, s7Side, notificationsSide] = fetch; + + data.occasion = occasion + data.s1 = s1 + data.s2 = s2 + data.s3 = s3 + data.s6 = s6 + data.s1Side = s1Side + data.s2Side = s2Side + data.s3Side = s3Side + data.s4Side = s4Side + data.s5Side = s5Side + data.s6Side = s6Side + data.s7Side = s7Side + data.notificationsSide = notificationsSide + + ////////////////// computed main news + const nameTag = await Category.findById(settings?.s4); + const s4Categories = await Category.find(settings?.s4 ? {parent: settings?.s4} : {}) + + const s4Obj = {}; + + s4Obj.nameTag = nameTag ? nameTag.title : ''; + + let s4News = []; + if (settings?.s4) { + for await (const cat of s4Categories) { + const getNew = await News.find({...query, catId: cat._id , newsStatus : true}).sort({customDate: -1}) + if (getNew.length) s4News.push(getNew[0]) + } + if (s4Categories.length !== 4) { + const getNews = await News.find({...query, catId: settings?.s4 , newsStatus : true}).populate('catId', 'title').limit(4 - s4News.length).sort({customDate: -1}) + for (const item of getNews) { + s4News.push(item); + } + } + } else { + s4News = await News.find({...query,newsStatus : true}).populate('catId', 'title').limit(4).sort({customDate: -1}); + } + + s4Obj.news = s4News + data.s4 = s4Obj; + + //// s5 + if (settings?.s5?.length) { + const s5News = [] + for await (const id of settings?.s5) { + const item = {} + const nameTag = await Category.findById(id) + item.nameTag = nameTag ? nameTag.title : ''; + item.news = await News.find({...query, rootParent: id , newsStatus : true}).limit(10).sort({_id: -1}) + s5News.push(item) + } + data.s5 = s5News + } + + return res.json(data); + } catch (e) { + return res500(res, 'مشکلی در گرفتن اطلاعات پیش آمده است'); + } + } +] + +module.exports.search = [ + async (req, res) => { + const {portal, terms} = req.query; + + try { + const requests = [ + News.find({ + newsStatus: true, publish: true, $or: [ + {title: {$regex: terms, $options: 'i'}}, + {summaryTitle: {$regex: terms, $options: 'i'}}, + {keywords: {$in: terms}} + ] + }), + Gallery.find({ + galleryStatus: true, publish: true, $or: [ + {title: {$regex: terms, $options: 'i'}}, + {summaryTitle: {$regex: terms, $options: 'i'}}, + {keywords: {$in: terms}} + ] + }), + Category.find({ + $or: [ + {title: {$regex: terms, $options: 'i'}}, + {pageContent: {$regex: terms, $options: 'i'}} + ] + }) + ] + + const getData = await Promise.all(requests); + + let [news, gallery, category] = getData; + + return res.json({ + news, + media: gallery, + pages: category + }); + + } catch (e) { + return res500(res, 'مشکلی در گرفتن اطلاعات پیش آمده است'); + } + + } +] diff --git a/server/controllers/linksController.js b/server/controllers/linksController.js new file mode 100644 index 0000000..3e3902a --- /dev/null +++ b/server/controllers/linksController.js @@ -0,0 +1,430 @@ +const Links = require('../models/Links'); +const { + body, + validationResult +} = require('express-validator'); +const sharp = require('sharp'); +const { + _sr +} = require('../plugins/serverResponses'); +const { + res404, + res500, + hasWhiteSpaces, + isLatinCharactersWithSymbol, + generateRandomDigits +} = require('../plugins/controllersHelperFunctions'); +const fs = require('fs'); + +////// variables +const profileWidth = 50; +const profileHeight = 50; +const profileQuality = 100; + + +/////////////////////////////////////////////////////////////////////// admin +module.exports.addLinks = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title), + + body('url') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('index') + .optional().isNumeric().withMessage(_sr['fa'].format.number), + + body('showInHome') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('siteMap') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('modelType') + .custom((value, { + req + }) => { + if (req.user.portals.join() === portal.join()) { + if (!portal.includes(value)) { + return Promise.reject(_sr['fa'].required.field); + } else { + return true + } + } else { + return true + } + }) + ], + async (req, res) => { + + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + let { + title, + url, + index, + showInHome, + siteMap, + modelType, + } = req.body; + + /** set portals */ + modelType = (req.user.portals.join() === portal.join()) ? modelType : req.user.portals[0]; + + const linksData = { + title : title.trim(), + url : url.trim(), + index, + showInHome, + siteMap, + _creator: req.user._id, + _updatedBy: req.user._id, + modelType, + }; + + var createLinks = await Links.create(linksData); + + if (!createLinks) { + res500(res, `error in add links to data base`); + } + + /** + * if we have pic upload to server + */ + if (req.files && req.files.icon) { + const image = req.files.icon; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { + cover: { + msg: _sr['fa'].format.image + } + } + }); + } + const imageName = `links_${Date.now()}_${createLinks._id}.${image.mimetype.split('/')[1]}`; + try { + const target = sharp(image.data) + await target + .resize(profileWidth, profileHeight, { + fit: 'cover' + }) + .jpeg({ + quality: profileQuality + }) + .toFile(`./static/uploads/images/links/${imageName}`); + + createLinks.icon = imageName; + + await createLinks.save(); + } catch (e) { + return res500(res, e?.message); + } + } + + + /** + * show result + */ + return res.json(createLinks); + } catch (error) { + /** + * if we got unkown error show to client + */ + res500(res, error.message); + } + } +] + +module.exports.updateLinks = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title), + + body('url') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('index') + .optional().isNumeric().withMessage(_sr['fa'].format.number), + + body('showInHome') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('siteMap') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('modelType') + .custom((value, { + req + }) => { + if (req.user.portals.join() === portal.join()) { + if (!portal.includes(value)) { + return Promise.reject(_sr['fa'].required.field); + } else { + return true + } + } else { + return true + } + }) + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + + /** + * get data from input + */ + let { + title, + url, + index, + showInHome, + siteMap, + modelType, + } = req.body; + + /** + * get id + */ + var linksId = req.params.id; + + var targetLinks = await Links.findOne({ + _id: linksId + }); + + /** check links exist or not */ + if (!targetLinks) { + return res404(res, `پیوند مورد نظر پیدا نشد`); + } + + /** check access portal */ + if (!req.user.portals.includes(targetLinks.modelType)) { + return res500(res, `شما اجازه آپدیت این پیوند را ندارید`); + } + + if (targetLinks.title !== title) { + var checkDuppTitle = await Links.findOne({ + title: title + }); + + if (checkDuppTitle) { + return res.status(422).json({ + validation: { + title: { + msg: _sr['fa'].duplicated.title + } + } + }); + } + } + + /** + * if we have pic upload to server + */ + if (req.files && req.files.icon) { + const image = req.files.icon; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { + cover: { + msg: _sr['fa'].format.image + } + } + }); + } + const imageName = `links_${Date.now()}_${targetLinks._id}.${image.mimetype.split('/')[1]}`; + try { + const target = sharp(image.data) + await target + .resize(profileWidth, profileHeight, { + fit: 'cover' + }) + .jpeg({ + quality: profileQuality + }) + .toFile(`./static/uploads/images/links/${imageName}`); + + /** + * if exist old pic delete it from file + */ + if (targetLinks.icon) { + var oldPic = `./static${targetLinks.icon}`; + + if (fs.existsSync(oldPic)) { + fs.unlink(oldPic, (err) => { + if (err) return res500(res, err?.message); + }); + } + } + + targetLinks.icon = imageName; + targetLinks.linksStatus = true; + } catch (e) { + return res500(res, e?.message); + } + } + + targetLinks.title = title.trim(); + targetLinks.url = url.trim(); + targetLinks.index = index; + targetLinks.showInHome = showInHome; + targetLinks.siteMap = siteMap; + targetLinks.modelType = modelType; + + await targetLinks.save(); + + /** + * show result + */ + return res.json(targetLinks); + + } catch (error) { + return res500(res, error.message); + } + } +] + +module.exports.deletOneLinks = [ + async (req, res) => { + try { + var linksId = req.params.id; + + var targetLinks = await Links.findOne({ + _id: linksId + }); + + /** check links exist or not */ + if (!targetLinks) { + return res404(res, `پیوند مورد نظر پیدا نشد`); + } + + /** check access portal */ + if (!req.user.portals.includes(targetLinks.modelType)) { + return res500(res, `شما اجازه حذف این پیوند را ندارید`); + } + + if (targetLinks.icon) { + var oldPic = `./static${targetLinks.icon}`; + + if (fs.existsSync(oldPic)) { + fs.unlink(oldPic, (error) => { + if (error) return res500(res, error?.message); + }); + } + } + + /** delete links */ + await targetLinks.deleteOne(); + + /** + * show result + */ + return res.json(targetLinks); + + } catch (error) { + /** + * if we got unkown error show to client + */ + res500(res, error); + } + } +] + +module.exports.getOneLinks = [ + async (req, res) => { + try { + var linksId = req.params.id; + + var findQuery = { + _id: linksId + }; + + var links = await Links.findOne(findQuery); + + if (!links) { + return res404(res, `پیوند مورد نظر پیدا نشد`); + } + + /** check access portal */ + if (!req.user.portals.includes(links.modelType)) { + return res.status(403).json({ + message: `شما اجازه دسترسی به اطلاعات این پیوند را ندارید` + }); + } + + /** + * show result + */ + return res.json(links); + } catch (error) { + /** + * if we got unkown error show to client + */ + res500(res, error); + } + } +] + +module.exports.getAll = [ + async (req, res) => { + try { + + var findQuery = {}; + + if (req.user.portals.length) { + findQuery.modelType = { + $in: req.user.portals + }; + } + + /** get all links */ + const allLinks = await Links.find(findQuery).sort({ + index: 1 + }); + + /** if null we have error */ + if (!allLinks) { + return res500(res, `مشکلی در گرفتن اطلاعات پیش آمده است`); + } + + /** show result to client */ + return res.json(allLinks); + } catch (error) { + /** if we have unkown error show it */ + return res500(res, error?.message); + } + } +] + +/////////////////////////////////////////////////////////////////////// public +module.exports.getAllLinks = [ + async (req, res) => { + try { + const { + portal, + } = req.query; + + let findQuery = {}; + + const setSort = {index: 1}; + + findQuery.modelType = !portal ? 'ostandari' : portal; + findQuery.showInHome = true; + + const getLinks = await Links.find(findQuery).sort(setSort); + + return res.json(getLinks); + } catch (error) { + return res500(res, error?.message); + } + } +] diff --git a/server/controllers/meetingController.js b/server/controllers/meetingController.js new file mode 100644 index 0000000..cc3945f --- /dev/null +++ b/server/controllers/meetingController.js @@ -0,0 +1,396 @@ +const {body, validationResult} = require('express-validator'); +const {_sr} = require('../plugins/serverResponses'); +const {res404, res500} = require('../plugins/controllersHelperFunctions'); +const Meeting = require('../models/Meeting'); +const Captcha = require('../models/Captcha'); + + +const limit = 20; + + +/////////////////////////////////////////////////////////////////////// admin +module.exports.updateMeeting = [ + [ + body('name') + .notEmpty().withMessage(_sr['fa'].required.title), + + body('subject') + .notEmpty().withMessage(_sr['fa'].required.description), + + body('description') + .notEmpty().withMessage(_sr['fa'].required.description), + + body('email') + .optional().isEmail().withMessage(_sr['fa'].format.email), + + body('phoneNumber') + .if((value, {req}) => { + return req.body.phoneNumber + }) + .custom((value, {req}) => { + if (!_.isEmpty(value) && !lodash.isNumeric(value)) { + return Promise.reject(_sr['fa'].format.number); + } else return true; + }), + + body('nationalCode') + .notEmpty().withMessage(_sr['fa'].format.national_code) + + // body('cptcha') + // .notEmpty().withMessage(_sr['fa'].required.field) + // .custom((value , {req}) => { + // console.log(req.session); + // if(value != req.session.captcha){ + // return Promise.reject(`کپچا وارد شده صحیح نمی باشد`); + // }else{ + // return true + // } + // }), + + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + + /** + * get data from input + */ + const { + name, + subject, + description, + phoneNumber, + email, + nationalCode + } = req.body; + + /** + * get id + */ + const meetingId = req.params.id; + + /** + * check meeting exist or not + */ + var targetMeeting = await Meeting.findById(meetingId); + + if (!targetMeeting) return res404(res, `درخواست مورد نظر پیدا نشد`); + + + /** + * make update object + */ + targetMeeting.name = name.trim(); + targetMeeting.subject = subject.trim(); + targetMeeting.description = description.trim(); + targetMeeting.email = email; + targetMeeting.phoneNumber = phoneNumber; + targetMeeting.nationalCode = nationalCode; + + await targetMeeting.save(); + + /** + * show result + */ + return res.json(targetMeeting); + + } catch (error) { + return res500(res, error?.message); + } + } +] + +module.exports.deletOneMeeting = [ + async (req, res) => { + try { + const meetingId = req.params.id; + + /** + * check meeting + */ + let targetMeeting = await Meeting.findByIdAndDelete(meetingId); + + if (!targetMeeting) { + return res404(res, `درخواست مورد نظر پیدا نشد`); + } + + /** + * show result + */ + return res.json(targetMeeting); + + } catch (error) { + /** + * if we got unknown error show to client + */ + res500(res, error); + } + } +] + +module.exports.getOneMeeting = [ + async (req, res) => { + try { + const meetingId = req.params.id; + + /** + * get meeting + */ + const targetMeeting = await Meeting.findOne({_id: meetingId}); + + /** + * if not exist + */ + if (!targetMeeting) { + return res404(res, `درخواست مورد نظر پیدا نشد`); + } + + if (!targetMeeting.read) { + targetMeeting.read = true; + + await targetMeeting.save(); + } + + /** + * show result + */ + return res.json(targetMeeting); + } catch (error) { + /** + * if we got unknown error show to client + */ + res500(res, error); + } + } +] + +module.exports.getAll = [ + async (req, res) => { + try { + + let findQuery = {}; + + /** + * get all meeting + */ + const getAll = await Meeting.paginate(findQuery, + {page: req.query.page || 1, limit, sort: {created_at: -1}}); + + /** + * show result + */ + return res.json(getAll); + } catch (error) { + return res500(res, error.message); + } + } +] + +module.exports.getAllForCount = [ + async (req, res) => { + try { + + /** + * get all meeting + */ + const getAll = await Meeting.find({}); + + /** + * show result + */ + return res.json(getAll); + } catch (error) { + return res500(res, error.message); + } + } +] + +module.exports.search = [ + async (req, res) => { + try { + let findQuery = {}; + findQuery['$and'] = []; + findQuery['$or'] = []; + + const { + name, + email, + terms, + phoneNumber, + nationalCode, + read, + date + } = req.body; + + findQuery.modelName = req.params.model; + + /** search by term */ + if (terms && !_.isEmpty(terms)) { + findQuery['$or'].push( + { + subject: { + $regex: '.*' + name + '.*' + }, + description: { + $regex: '.*' + name + '.*' + }, + } + ); + } + /** search by name */ + if (name && !_.isEmpty(name)) { + findQuery['$or'].push( + { + name: { + $regex: '.*' + name + '.*' + } + } + ); + } + /** search by email */ + if (email && !_.isEmpty(email)) { + findQuery['$and'].push({ + email + }); + } + /** search by phoneNumber */ + if (phoneNumber && !_.isEmpty(phoneNumber)) { + findQuery['$and'].push({ + phoneNumber + }); + } + /** search by nationalCode */ + if (nationalCode && !_.isEmpty(nationalCode)) { + findQuery['$and'].push({ + nationalCode + }); + } + /** search by read */ + if (!_.isUndefined(read) && _.isBoolean(read)) { + findQuery['$and'].push({ + read + }); + } + + /** search by date */ + if (date && !_.isEmpty(date)) { + if (date.length === 1) { + findQuery['$and'].push({ + created_at: { + $gte: moment(date[0]).startOf('days'), + $lt: moment(date[0]).endOf('days') + } + }); + } else { + findQuery['$and'].push({ + created_at: { + $gte: new Date(date[0]), + $lt: new Date(date[1]) + } + }); + } + } + + _.isEmpty(findQuery['$and']) && delete findQuery['$and']; + _.isEmpty(findQuery['$or']) && delete findQuery['$or']; + + /** get meetings */ + var meetings = await Meeting.paginate(findQuery, { + page: req.query.page, + limit, + sort: {created_at: -1} + }); + + /** show result */ + return res.json(meetings); + } catch (error) { + return res500(res, error?.message) + } + } +] + +/////////////////////////////////////////////////////////////////////// public +module.exports.addMeeting = [ + [ + body('name') + .notEmpty().withMessage(_sr['fa'].required.title), + + body('subject') + .notEmpty().withMessage(_sr['fa'].required.description), + + body('description') + .notEmpty().withMessage(_sr['fa'].required.description), + + body('email') + .optional().isEmail().withMessage(_sr['fa'].format.email), + + body('phoneNumber') + .custom((value, {req}) => { + if (_.isEmpty(value)) return Promise.reject(_sr['fa'].required.phone_number); + if (!_.isEmpty(value) && !lodash.isNumeric(value)) { + return Promise.reject(_sr['fa'].format.number); + } else return true; + }), + + body('nationalCode') + .notEmpty().withMessage(_sr['fa'].format.national_code), + + body('captcha') + .notEmpty().withMessage(_sr['fa'].required.field) + .custom((value, {req}) => { + return Captcha.findOne({code: value}).then(data => { + if (!data) return Promise.reject(`عبارت وارد شده صحیح نمیباشد`) + else return true + }) + }), + + ], + async (req, res) => { + + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + let { + name, + subject, + description, + phoneNumber, + email, + nationalCode + } = req.body; + + const data = { + name, + subject, + description, + phoneNumber, + email, + nationalCode + }; + + const createMeeting = await Meeting.create(data); + + if (!createMeeting) { + return res500(res, `مشکلی در ثبت درخواست پیش آمده است`); + } + + /** + * show result + */ + return res.json(createMeeting); + } catch (error) { + /** + * if we got unknown error show to client + */ + return res500(res, error?.message); + } + } +] + diff --git a/server/controllers/newsController.js b/server/controllers/newsController.js new file mode 100644 index 0000000..41f4e5e --- /dev/null +++ b/server/controllers/newsController.js @@ -0,0 +1,1474 @@ +const News = require('../models/News'); +const {body, validationResult} = require('express-validator'); +const sharp = require('sharp'); +const {_sr} = require('../plugins/serverResponses'); +const {res404, res500, checkValidations} = require('../plugins/controllersHelperFunctions'); +const Category = require('../models/Category'); +const Comment = require('../models/Comment'); +const User = require('../models/User') +const fs = require('fs'); +const NewsFile = require('../models/NewsFile'); +const Polls = require('../models/Polls'); +const moment = require('moment-jalaali'); + +////// variables +const noCover = '/img/no-cover.jpg' +const coverNewsWidth = 1920; +const coverNewsHeight = 1080; +const coverQuality = 100; + +const thumbCoverNewsWidth = 600; +const thumbCoverNewsHeight = 300; +const thumbCoverQuality = 100; + +const limit = 20; +const newsPerPageLimit = 16; +const galleryPerPageLimit = 5; + +const shortTitleFront = 150 +const shortTitlePanel = 20 +const shortSumTitle = 250 + +const titleFilterRegex = new RegExp('/', 'g') + +// helper functions + +const changePriority = async (catId, modelType) => { + try { + const getAllNews = await News.find({ + catId, + modelType, + priority: true + }); + + for (const item of getAllNews) { + item.priority = false; + await item.save(); + } + + return true + } catch (error) { + console.log(error) + return false + } +} + +const randomNews = async (queryObject) => { + let setSkip; + try { + let temp = []; + const result = []; + /** total of news */ + const count = await News.countDocuments(queryObject); + + if (count < 3) { + return await News.find(queryObject); + } + + /** get random index number */ + while (temp.length < 3) { + setSkip = Math.floor(Math.random() * count); + temp.push(setSkip); + /** remove duplicate numbers */ + temp = [...new Set(temp)]; + } + + /** get news and push to result */ + for (let i = 0; i < 3; i++) { + const getNews = await News.findOne(queryObject).skip(temp[i]); + + if (getNews) { + result.push(getNews); + } + } + + /** return result */ + return result; + } catch (error) { + console.log(error) + /** return error */ + return [] + } +} + +const _checkSpecPermission = async (req, category) => { + return !req.user.specialPermissions.includes(category._id) && //check parent id exist in special permissions or not + !req.user.specialPermissions.some(item => category?.treeCat?.join().includes(item)); +} + +/////////////////////////////////////////////////////////////////////// admin +module.exports.addNews = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title) + .custom((value) => { + return News.findOne({ + title: value + }) + .then(news => { + if (news) return Promise.reject(_sr['fa'].duplicated.title); + else return true + }) + }), + + // body('summaryTitle') + // .notEmpty().withMessage(_sr['fa'].required.caption), + + body('leadTitle') + .notEmpty().withMessage(_sr['fa'].required.caption), + + body('catId') + .isMongoId().withMessage(_sr['fa'].required.field) + .if((value, { + req + }) => { + return req.body.catId + }) + .custom((value) => { + return Category.findOne({ + _id: value + }) + .then(category => { + if (!category) return Promise.reject(_sr['fa'].not_found.category); + else return true + }) + }), + + body('priority') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('allowComment') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('showInHome') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('notifications') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + // body('slider') + // .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('special') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('siteMap') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('publish') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('keywords') + .if((value) => { + return value + }) + .custom((value) => { + const keywords = _.isString(value) ? JSON.parse(value) : value; + if (!_.isArray(keywords)) { + return Promise.reject(`این فیلد باید به صورت آرایه فرستاده شود`); + } + + return true; + }), + + body('metaTagDesc') + .optional(), + + body('modelType') + .custom((value, { + req + }) => { + if (req.user.portals.join() === portal.join()) { + if (!portal.includes(value)) { + return Promise.reject(`${_sr['fa'].optional.onlyValid} => ${portal}`); + } else { + return true + } + } else { + return true + } + }), + + body('newsFileId') + .optional().isMongoId().withMessage(`لطفا یک ای دی صحیح ارسال کنید`), + ], + async (req, res) => { + + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + let { + title, + summaryTitle, + leadTitle, + catId, + PublisherId, + priority, + allowComment, + showInHome, + special, + notifications, + siteMap, + publish, + pageContent, + content, + keywords, + metaTagDesc, + modelType, + // slider, + newsFileId + } = req.body; + + keywords = _.isString(keywords) ? JSON.parse(keywords) : keywords; + + /** set portals */ + modelType = (req.user.portals.join() === portal.join()) ? modelType : req.user.portals[0]; + // const isPublisher = await User.findById(PublisherId) + // if(!isPublisher){ + // return res.status(404).json({message:"کاربر وجود ندارد"}) + // } + // if(!isPublisher.scope.includes('PublisherNews')){ + // return res.status(401).json({message:"شما دسترسی برای انتشار را ندارید"}) + // } + if (newsFileId) { + let checkNewsFile = await NewsFile.findOne({ + _id: newsFileId + }); + + if (!checkNewsFile) { + return res404(res, `پرونده خبری انخاب شده وجود ندارد`); + } + + if (checkNewsFile.modelType !== modelType) { + return res.status(422).json({ + validation: { + newsFileId: { + msg: `نوع خبر مورد نظر با نوع پرونده خبری متفاوت است` + } + } + }); + } + } + + const newsData = { + title: title?.trim()?.replace(titleFilterRegex, '/'), + summaryTitle: summaryTitle?.trim(), + leadTitle: leadTitle?.trim(), + catId, + priority, + showInHome, + publish, + pageContent, + PublisherId, + special, + content, + allowComment, + notifications, + siteMap, + keywords, + // slider, + _creator: req.user._id, + _updatedBy: req.user._id, + metaTagDesc: metaTagDesc ? metaTagDesc : leadTitle, + modelType, + newsFileId, + shortTitleFront: title?.trim()?.slice(0, shortTitleFront), + shortTitlePanel: title?.trim()?.slice(0, shortTitlePanel), + shortSummaryTitle: summaryTitle?.trim()?.slice(0, shortSumTitle) + }; + + if (catId) { + /** get category with populate parent */ + const category = await Category.findOne({ + _id: catId + }) + .populate({ + path: 'parent', + populate: { + path: 'parent', + model: 'Category' + } + }); + + /** if undefined we have error from database */ + if (!category) { + return res404(res, `دسته بندی انتخاب شده برای این خبر پیدا نشد`); + } + + /** check special permission */ + if (req.user.specialPermissions.length && await _checkSpecPermission(req, category)) { + return res.status(403).json({ + message: `شما نمیتوانید این دسته بندی را انتخاب کنید` + }); + } + + if (category.modelType !== modelType) { + return res.status(403).json({ + message: `شما اجازه استفاده از این دسته بندی را ندارید` + }); + } + + newsData.allCat = category.treeCat; + newsData.rootParent = category.rootParent || category._id; + + if (priority === 'true') { + await changePriority(category._id, modelType); + } + } + + const createNews = await News.create(newsData); + + if (!createNews) { + return res500(res, `error in add news to data base`); + } + + + /** + * if we have pic upload to server + */ + if (req.files) { + let flagCover = false + let flagThumb = false + if (req.files.cover) { + const image = req.files.cover; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { + cover: { + msg: _sr['fa'].format.image + } + } + }); + } + const imageName = `news_${Date.now()}_${createNews._id}.${image.mimetype.split('/')[1]}`; + try { + const target = sharp(image.data) + await target + .resize(coverNewsWidth, coverNewsHeight, { + fit: 'cover' + }) + .jpeg({ + quality: coverQuality + }) + .toFile(`./static/uploads/images/news/${imageName}`); + + createNews.cover = imageName; + flagCover = true + } catch (e) { + return res500(res, e?.message); + } + + if (!req.files.thumbCover){ + const imageName = `news_${Date.now()}_${createNews._id}.${image.mimetype.split('/')[1]}`; + try { + const target = sharp(image.data) + await target + .resize(thumbCoverNewsWidth, thumbCoverNewsHeight, { + fit: 'cover' + }) + .jpeg({ + quality: thumbCoverQuality + }) + .toFile(`./static/uploads/images/news/thumb_${imageName}`); + + createNews.thumbCover = `thumb_${imageName}`; + flagThumb = true + } catch (e) { + return res500(res, e?.message); + } + } + } + if (req.files.thumbCover) { + const image = req.files.thumbCover; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { + thumbCover: { + msg: _sr['fa'].format.image + } + } + }); + } + const imageName = `news_${Date.now()}_${createNews._id}.${image.mimetype.split('/')[1]}`; + try { + const target = sharp(image.data) + + await target + .jpeg({ + quality: thumbCoverQuality + }) + .toFile(`./static/uploads/images/news/thumb_${imageName}`); + + createNews.thumbCover = `thumb_${imageName}`; + flagThumb = true + } catch (e) { + return res500(res, e?.message); + } + + if (!req.files.cover){ + const imageName = `news_${Date.now()}_${createNews._id}.${image.mimetype.split('/')[1]}`; + try { + const target = sharp(image.data) + await target + .jpeg({ + quality: coverQuality + }) + .toFile(`./static/uploads/images/news/${imageName}`); + + createNews.cover = imageName; + flagCover = true + } catch (e) { + return res500(res, e?.message); + } + } + } + + createNews.newsStatus = (flagCover && flagThumb) + await createNews.save(); + } + + + /** + * show result + */ + return res.json(createNews); + } catch (error) { + console.log(error); + /** + * if we got unkown error show to client + */ + res500(res, error.message); + } + } +] + +module.exports.addAllNews = [ + async (req, res) => { + try { + // // const parsedData = req.files.file + // const {rootParent, category, creator, catIdOstan} = req.body + // const rawFile = await fs.readFileSync(`./server/csvjson.json`) + // const parsedData = await JSON.parse(rawFile) + // + // // console.log(parsedData) + // + // const posts = [] + // + // // dynamic + // // const rootParent = '60e95a43111ba696ea3d5171' // فرمانداری ها + // // const category = '60e95c7d111ba696ea3d5301' // فرماندای شهرستان خنداب + // + // // static + // // const creator = '60eaaf8db36930ef88d3d377' + // + // const newArray = [] + // + // for (const item of parsedData) { + // if (item.term_taxonomy_id.toString() === catIdOstan) { + // // console.log(item.term_taxonomy_id) + // newArray.push(item) + // } + // } + // + // console.log('-- posts length: ', newArray.length) + // + // let index = 0 + // for (const item of newArray) { + // const newPost = new News({ + // title: item.post_title, + // shortTitlePanel: item.post_title, + // shortTitleFront: item.post_title, + // summaryTitle: item.post_title, + // leadTitle: '', + // shortSummaryTitle: item.post_title, + // customDate: item.post_date, + // /// **************************************** + // catId: category, + // /// **************************************** + // allCat: [], + // newsFileId: null, + // /// **************************************** + // rootParent: rootParent, + // /// **************************************** + // priority: false, + // allowComment: false, + // showInHome: false, + // slider: false, + // publish: true, + // pageContent: item.post_content, + // cover: null, + // thumbCover: null, + // userViews: 200, + // special: false, + // notifications: false, + // _creator: creator, + // _updatedBy: creator, + // siteMap: true, + // keywords: [], + // metaTagDesc: item.post_title, + // newsStatus: true, + // modelType: 'ostandari', + // attachments: [], + // imported: true + // }) + // await newPost.save() + // if (index === newArray.length - 1) console.log('---- data entry finished') + // index++ + // } + + const news = await News.find({catId : '60e931d5111ba696ea3d483b'}) + // const regex = new RegExp('/', 'g') + let index = 0 + for await (const item of news) { + console.log(index) + // item.title = item.title.replace(regex, ',') + item.catId = '60e931fc111ba696ea3d485b' + item.allCat = ['60e931d5111ba696ea3d483b'] + await item.save() + if (index === news.length - 1) console.log('update finished') + index++ + + } + + /** + * show result + */ + return res.json(news); + } catch (error) { + console.log(error); + /** + * if we got unkown error show to client + */ + return res500(res, error.message); + } + } +] + +module.exports.updateNews = [ + [ + body('title').notEmpty().withMessage(_sr['fa'].required.title), + body('leadTitle').notEmpty().withMessage(_sr['fa'].required.field), + body('catId') + .notEmpty().withMessage(_sr['fa'].required.field) + .bail() + .isMongoId().withMessage('شناسه دسته بندی معتبر نیست') + .bail() + .custom(value => { + return Category.findById(value).then(category => { + if (!category) { + return Promise.reject(_sr['fa'].not_found.category); + } + }); + }), + body('priority').optional().isBoolean().withMessage(_sr['fa'].format.boolean), + body('allowComment').optional().isBoolean().withMessage(_sr['fa'].format.boolean), + body('notifications').isBoolean().withMessage(_sr['fa'].format.boolean), + body('showInHome').isBoolean().withMessage(_sr['fa'].format.boolean), + body('special').isBoolean().withMessage(_sr['fa'].format.boolean), + body('siteMap').optional().isBoolean().withMessage(_sr['fa'].format.boolean), + body('publish').isBoolean().withMessage(_sr['fa'].format.boolean), + body('keywords') + .optional() + .custom(value => { + try { + const keywords = _.isString(value) ? JSON.parse(value) : value; + if (!Array.isArray(keywords)) { + throw new Error('این فیلد باید به صورت آرایه فرستاده شود'); + } + return true; + } catch (error) { + throw new Error('این فیلد باید به صورت آرایه فرستاده شود'); + } + }), + body('metaTagDesc').optional(), + body('modelType').custom((value, { req }) => { + if (req.user.portals.join() === portal.join()) { + if (!portal.includes(value)) { + return Promise.reject(`${_sr['fa'].optional.onlyValid} => ${portal}`); + } + } + return true; + }), + body('newsFileId').optional().isMongoId().withMessage('شناسه فایل خبری معتبر نیست'), + body('customDate').optional().isString().withMessage('لطفا یک تاریخ صحیح وارد نمایید'), + ], + async (req, res) => { + const errors = validationResult(req); + if (!errors.isEmpty()) { + return res.status(422).json({ validation: errors.mapped() }); + } + + try { + const { title, summaryTitle, leadTitle, catId, priority, notifications, showInHome, special, siteMap, content, publish, pageContent, allowComment, keywords, metaTagDesc, modelType, newsFileId, customDate } = req.body; + + let parsedKeywords = keywords; + if (_.isString(keywords)) { + parsedKeywords = JSON.parse(keywords); + } + + const newsId = req.params.id; + const targetNews = await News.findById(newsId).populate('catId'); + + if (!targetNews) { + return res404(res, 'خبر مورد نظر پیدا نشد'); + } + + if (req.user.specialPermissions.length && await _checkSpecPermission(req, targetNews.catId)) { + return res.status(403).json({ message: 'شما اجازه بروزرسانی این خبر را ندارید' }); + } + + if (!req.user.portals.includes(targetNews.modelType)) { + return res500(res, 'شما اجازه آپدیت این خبر را ندارید'); + } + + if (targetNews.title !== title) { + const checkDuppTitle = await News.findOne({ title }); + if (checkDuppTitle) { + return res.status(422).json({ validation: { title: { msg: _sr['fa'].duplicated.title } } }); + } + } + + const category = await Category.findById(catId).populate({ + path: 'parent', + populate: { + path: 'parent', + model: 'Category' + } + }); + + if (catId && targetNews.catId.toString() !== catId.toString()) { + targetNews.allCat = category.treeCat; + targetNews.rootParent = category.rootParent || category._id; + } + + if (priority === 'true') { + await changePriority(category._id, modelType); + } + + if (newsFileId) { + const checkNewsFile = await NewsFile.findById(newsFileId); + if (!checkNewsFile) { + return res404(res, 'پرونده خبری انخاب شده وجود ندارد'); + } + if (checkNewsFile.modelType !== modelType) { + return res.status(422).json({ + validation: { + newsFileId: { msg: 'نوع خبر مورد نظر با نوع پرونده خبری متفاوت است' } + } + }); + } + } + + if (req.files) { + await handleFileUploads(req, res, targetNews); + } + + Object.assign(targetNews, { + title: title.trim().replace(titleFilterRegex, '/'), + summaryTitle: summaryTitle?.trim(), + leadTitle: leadTitle?.trim(), + catId, + priority, + notifications, + showInHome, + special, + siteMap, + publish, + allowComment, + content, + pageContent, + keywords: parsedKeywords, + metaTagDesc: metaTagDesc?.trim() || leadTitle?.trim(), + newsFileId, + shortTitleFront: title.slice(0, shortTitleFront), + shortTitlePanel: title.slice(0, shortTitlePanel), + shortSummaryTitle: summaryTitle?.trim()?.slice(0, shortSumTitle), + customDate: customDate || targetNews.created_at, + _updatedBy: req.user._id + }); + + if (customDate) { + targetNews.customDateHistory.push({ + customDate, + _updatedBy: req.user._id + }); + } + + await targetNews.save(); + return res.json(targetNews); + + } catch (error) { + return res500(res, error.message); + } + } +]; + +module.exports.MostViewdNews = [ + async (req,res)=>{ + const thirtyDaysAgo = new Date(); + thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30); + try { + const mostViewedNews = await News.find({ + customDate: { $gte: thirtyDaysAgo } + }).sort({ userViews: -1 }).limit(10); + + return res.status(200).json({mostViewedNews}) + } catch (error) { + res.status(500).send('خطا'); + } + } +] +module.exports.deletOneNews = [ + async (req, res) => { + let oldPic; + try { + const newsId = req.params.id; + + const targetNews = await News.findOne({ + _id: newsId + }).populate('catId'); + + /** check news exist or not */ + if (!targetNews) { + return res404(res, `خبر مورد نظر پیدا نشد`); + } + + /** check special permission */ + if (req.user.specialPermissions.length && await _checkSpecPermission(req, targetNews.catId)) { + return res.status(403).json({ + message: `شما مجاز به حذف این خبر نمی باشید` + }); + } + + if (targetNews?.superNews && req.user._id.toString() !== targetNews._creator.toString()){ + return res.status(403).json({ + message: `شما مجاز به حذف این خبر نمی باشید` + }); + } + + /** check access portal */ + if (!req.user.portals.includes(targetNews.modelType)) { + return res500(res, `شما اجازه حذف این خبر را ندارید`); + } + + if (targetNews.cover !== noCover) { + oldPic = `./static${targetNews.cover}`; + + if (fs.existsSync(oldPic)) { + fs.unlink(oldPic, (error) => { + if (error) return res500(res, error?.message); + }); + } + } + + if (targetNews.thumbCover !== noCover) { + oldPic = `./static${targetNews.thumbCover}`; + + if (fs.existsSync(oldPic)) { + fs.unlink(oldPic, (error) => { + if (error) return res500(res, error?.message); + }); + } + } + + await targetNews.deleteOne(); + + await Comment.deleteMany({modelRef: targetNews._id}); +x + return res.json(targetNews); + + } catch (error) { + + return res500(res, error); + } + } +] + +module.exports.deleteAllNews = [ + async (req, res) => { + try { + await News.deleteMany({imported: true}) + + return res.json('ok'); + } catch (error) { + /** + * if we got unkown error show to client + */ + return res500(res, error.message); + } + } +] + +module.exports.getOneNews = [ + async (req, res) => { + try { + const newsId = req.params.id; + + const findQuery = { + _id: newsId + }; + + const news = await News.findOne(findQuery).populate('catId'); + + if (!news) { + return res404(res, `خبر مورد نظر پیدا نشد`); + } + + /** check special permission */ + if (req.user.specialPermissions.length && await _checkSpecPermission(req, news.catId)) { + return res.status(403).json({ + message: `شما مجاز به دیدن اطلاعات این خبر نمی باشید` + }); + } + + /** check access portal */ + if (!req.user.portals.includes(news.modelType)) { + return res.status(403).json({ + message: `شما اجازه دسترسی به اطلاعات این خبر را ندارید` + }); + } + + /** + * show result + */ + return res.json(news); + } catch (error) { + /** + * if we got unknown error show to client + */ + res500(res, error); + } + } +] + +module.exports.getAll = [ + async (req, res) => { + try { + + let findQuery = {}; + + // @todo can change it + if (req.user.specialPermissions.length) { + findQuery.catId = {$in: req.user.specialPermissions} + } + + if (req.user.portals.length) { + findQuery.modelType = { + $in: req.user.portals + }; + } + + /** get all news */ + // var allNews = await News.find(findQuery).populate('_creator', { + // firstName: 1, + // lastName: 1, + // profilePic: 1 + // }) + // .populate('catId') + // .sort({ + // created_at: -1 + // }); + + let allNews = await News.paginate(findQuery, { + page: req.query.page, limit, populate: [{ + path: '_creator', + select: { + firstName: 1, + lastName: 1, + profilePic: 1 + } + }, + { + path: 'catId' + }], + sort: { + customDate: -1 + } + }) + + /** if null we have error */ + if (!allNews) { + return res500(res, `مشکلی در گرفتن اطلاعات پیش آمده است`); + } + + /** show result to client */ + return res.json(allNews); + } catch (error) { + console.log(error); + /** if we have unknown error show it */ + return res500(res, error?.message); + } + } +] + +module.exports.search = [ + async (req, res) => { + try { + let findQuery = {}; + findQuery['$and'] = []; + findQuery['$or'] = []; + + let { + term, + catId, + showInHome, + publish, + portals, + status, + notifications, + special, + newsFile, + date + } = req.body; + + /** search by term */ + if (term && !_.isEmpty(term)) { + findQuery['$or'].push( + { + title: { + $regex: '.*' + term + '.*' + }, + }, + { + summaryTitle: { + $regex: '.*' + term + '.*' + }, + }); + } + /** search by catId */ + if (req.user.specialPermissions.length) { + findQuery.catId = {$in: req.user.specialPermissions} + } else if (catId && !_.isEmpty(catId)) { + findQuery['$and'].push({ + catId + }); + } + /** search by showInHome */ + if (!_.isUndefined(showInHome) && _.isBoolean(showInHome)) { + findQuery['$and'].push({ + showInHome + }); + } + /** search by publish */ + if (!_.isUndefined(publish) && _.isBoolean(publish)) { + findQuery['$and'].push({ + publish + }); + } + /** search by portals */ + if (req.user.portals.length) { + findQuery.modelType = { + $in: req.user.portals + }; + } else if (portals && !_.isEmpty(portals)) { + findQuery['$and'].push({ + modelType: { + $in: portals + } + }) + } + /** search by status */ + if (!_.isUndefined(status) && _.isBoolean(status)) { + findQuery['$and'].push({ + newsStatus: status + }) + } + /** search by notifications */ + if (!_.isUndefined(notifications) && _.isBoolean(notifications)) { + findQuery['$and'].push({ + notifications + }); + } + /** search by special */ + if (!_.isUndefined(special) && _.isBoolean(special)) { + findQuery['$and'].push({ + special + }); + } + + /** search by special */ + if (newsFile && !_.isEmpty(newsFile)) { + findQuery['$and'].push({ + newsFileId: newsFile + }); + } + + /** search by date */ + if (date && !_.isEmpty(date)) { + if (date.length === 1) { + findQuery['$and'].push({ + customDate: { + $gte: moment(date[0]).startOf('days'), + $lt: moment(date[0]).endOf('days') + } + }); + } else { + findQuery['$and'].push({ + customDate: { + $gte: new Date(date[0]), + $lt: new Date(date[1]) + } + }); + } + } + + _.isEmpty(findQuery['$and']) && delete findQuery['$and']; + _.isEmpty(findQuery['$or']) && delete findQuery['$or']; + + /** get news */ + const news = await News.paginate(findQuery, { + page: req.query.page, limit, populate: [{ + path: '_creator', + select: { + firstName: 1, + lastName: 1, + profilePic: 1 + } + }, + { + path: 'catId' + }], + sort: { + customDate: -1 + } + }); + + /** show result */ + return res.json(news); + } catch (error) { + return res500(res, error?.message) + } + } +] + +module.exports.searchForSlider = [ + async (req, res) => { + try { + var findQuery = {publish : true , newsStatus : true}; + findQuery['$and'] = []; + findQuery['$or'] = []; + + let term = req.params.title; + + /** search by term */ + if (term && !_.isEmpty(term)) { + findQuery['$or'].push( + { + title: { + $regex: '.*' + term + '.*' + }, + } + ); + } + + _.isEmpty(findQuery['$and']) && delete findQuery['$and']; + _.isEmpty(findQuery['$or']) && delete findQuery['$or']; + + /** get news */ + var news = await News.find(findQuery); + + /** show result */ + return res.json(news); + } catch (error) { + return res500(res, error?.message) + } + } +] + + +//////////// add attachment file to category +module.exports.addAttachmentToNews = [ + [ + body('attTitle') + .notEmpty().withMessage(_sr['fa'].required.title) + ], + checkValidations(validationResult), + (req, res) => { + if (!req.files?.file) return res.status(422).json({validation: {file: {msg: _sr['fa'].required.file}}}) + if (req.files?.file.mimetype.split('/')[1] !== 'pdf') return res.status(422).json({validation: {file: {msg: 'فقط فرمت PDF قابل قبول است'}}}) + + const data = {title: req.body.attTitle} + const file = req.files.file + const fileName = req.body.attTitle.replace(titleFilterRegex, '-') + '_' + Date.now() + '.pdf' + file.mv(`./static/uploads/files/newsAttachments/${fileName}`) + data.file = fileName + + News.findById(req.params.newsId, (err, news) => { + if (err || !news) return res404(res, err) + news.attachments.push(data) + news.save(err => { + if (err) return res500(res, err) + else return res.json({message: _sr['fa'].response.success_save}) + }) + }) + } +] + +module.exports.removeAttachmentFromNews = [ + (req, res) => { + News.findOne({'attachments._id': req.params.fileId}, (err, news) => { + if (err || !news) return res404(res, err) + const file = news.attachments.id(req.params.fileId) + if (!file) return res404(res, 'not found') + file.remove() + fs.unlink(`./static/${file.file}`, err => { + if (err) console.log(err) + }) + news.save(err => { + if (err) return res500(res, err) + else return res.json({message: _sr['fa'].response.success_remove}) + }) + }) + } +] + +/////////////////////////////////////////////////////////////////////// public + + +module.exports.EDITNEWS = [ + async(req,res)=>{ + + } +] +module.exports.viewNews = [ + async (req, res) => { + try { + var newsTitle = req.params.title; + + var targetNews = await News.findOne({ + _id: newsTitle, + newsStatus: true, + publish: true + }) + .populate('_creator', { + firstName: 1, + lastName: 1, + profilePic: 1 + }) + .populate({ + path: 'catId', + select: 'title' + }); + + if (!targetNews) { + return res404(res, `خبر مورد نطر پیدا نشد`); + } + + ++targetNews.userViews; + + await targetNews.save(); + + /** get comments */ + var comments = await Comment.find({ + modelRef: targetNews._id, + allowShow: true + }); + + var result = { + news: targetNews, + comments + }; + + return res.json(result); + } catch (error) { + return res500(res, error?.message); + } + } +] + + +module.exports.FilterNews = [ + async (req,res)=>{ + const length = parseInt(req.params.length); + const views = parseInt(req.params.userViews); + + + try { + const news = await News.find().sort({ date: -1 }).limit(length); + const filteredNews = await News.find({ + userViews: { $gte: views }, + }).sort({ date: -1 }); + + res.json({filteredNews, news}); + } catch (error) { + res.status(500).json({ message: error.message }); + } + } +] + + +module.exports.OstandarNews = [ + async (req,res)=>{ + try { + const news = await News.find({modelType:"ostandari"}) + res.status(200).json(news) + }catch (e) { + return res.status(500).json(e.message) + } + } +] + +module.exports.getNewsByCategory = [ + async (req, res) => { + try { + const catTitle = req.params.title; + + const page = req.query.page; + + /** check category */ + const targetCategory = await Category.findOne({ + title: catTitle + }); + + if (!targetCategory) { + return res404(res, `دسته بندی مورد نظر پیدا نشد`); + } + + const requests = [ + // priority news + News.findOne({ + catId: targetCategory._id, + publish: true, + newsStatus: true, + priority: true + }), + // news + News.paginate({ + catId: targetCategory._id, + publish: true, + newsStatus: true, + priority: false + }, + { + page: page || 1, + limit: newsPerPageLimit, + sort: {customDate: -1} + }), + //news file + NewsFile.find({catId: targetCategory._id, publish: true}), + // special + News.find({ + catId: targetCategory._id, + publish: true, + newsStatus: true, + special: true + }).sort({customDate: -1}), + // events + News.find({ + catId: targetCategory._id, + publish: true, + newsStatus: true, + notifications: true + }).sort({customDate: -1}), + //polls + Polls.find({ + catId: targetCategory._id, + publish: true, + startDate: {$lte: new Date()}, + endDate: {$gte: new Date()} + }), + // latestNews + News.find({ + publish: true, + newsStatus: true + }).sort({_id: -1}).limit(8) + ]; + + + const fetch = await Promise.all(requests); + + + const [heroNews, news, newsFile, specials, events, polls, latestNews] = fetch; + + + const result = { + category: targetCategory, + heroNews, + news, + newsFile, + specials, + events, + polls, + latestNews + } + + return res.json(result); + } catch (error) { + return res500(res, error?.message); + } + } +] + +module.exports.getAllNews = [ + async (req, res) => { + try { + let { + flag, + catId, + portal, + limit, + page + } = req.query; + + var findQuery = {}; + + var setLimit = parseInt(limit) || 10; + var setSort = {}; + + findQuery.modelType = portal; + findQuery.newsStatus = true; + findQuery.publish = true; + + switch (flag) { + case 'category': + setLimit = 20 + setSort.customDate = -1 + findQuery.rootParent = catId + break + case 'all': + setLimit = 20 + setSort.customDate = -1 + break; + case 'new': + setSort.customDate = -1; + setLimit = 5; + break; + case 'slider': + findQuery.slider = true; + setSort.customDate = -1; + setLimit = 3; + break; + case 'special': + findQuery.special = true; + setSort.customDate = -1; + setLimit = 4; + break; + case 'random': + var result = await randomNews(findQuery); + return res.json(result); + case 'popular': + setSort.userViews = -1; + setSort.customDate = -1; + setLimit = 5; + break; + case 'events': + findQuery.notifications = true; + findQuery.showInHome = true; + setSort.customDate = -1; + setLimit = 5; + break; + default: + return res.json([]); + } + + var getNews = await News.paginate(findQuery, {page: page || 1, limit: setLimit, sort: setSort}); + + return res.json(getNews); + } catch (error) { + return res500(res, error?.message); + } + } +] + +module.exports.getSections = [ + async (req, res) => { + try { + const portal = req.query.portal; + + let result = {}; + + result.sectionOne = []; + result.sectionTwo = []; + result.sectionThree = []; + + let getSectionsTitle = await Category.find({ + $or: [ + {showInSectionOne: true}, + {showInSectionTwo: true}, + {showInSectionThree: true}, + ], + modelType: portal + }); + + + for (const item of getSectionsTitle) { + let section = {}; + let news = await News.find({ + catId: item._id, + showInHome: true, + publish: true, + modelType: portal + }).limit(limit).sort({_id: -1}); + + section.nameTag = item.title; + section.data = news; + + if (item.showInSectionOne) { + result.sectionOne = section; + } + + if (item.showInSectionTwo) { + result.sectionTwo = section; + } + + if (item.showInSectionThree) { + result.sectionThree.push(section); + } + + } + + + // let findQuery = {}; + + // let setLimit = parseInt(limit) || 10; + // let setSort = {}; + // let setSkip = parseInt(skip) || 0; + + // findQuery.modelType = portal; + // findQuery.newsStatus = true; + // findQuery.publish = true; + + + return res.json(result); + } catch (error) { + return res500(res, error?.message); + } + } +] + +/** @todo mabe change it in future */ +module.exports.getRelated = [ + async (req, res) => { + try { + const { + portal, + title + } = req.query; + + let getNews = {}; + + let findQuery = {}; + + findQuery.modelType = portal; + findQuery._id = { + $ne: title + }; + findQuery.newsStatus = true; + findQuery.publish = true; + + const targetNews = await News.findById(title) + + if (targetNews) { + findQuery.catId = targetNews.catId; + getNews = await randomNews(findQuery); + } + + return res.json(getNews); + } catch (error) { + return res500(res, error?.message); + } + } +] diff --git a/server/controllers/newsFileController.js b/server/controllers/newsFileController.js new file mode 100644 index 0000000..f08d479 --- /dev/null +++ b/server/controllers/newsFileController.js @@ -0,0 +1,684 @@ +const NewsFile = require('../models/NewsFile') +const {body, validationResult} = require('express-validator') +const {_sr} = require('../plugins/serverResponses') +const {res404, res500} = require('../plugins/controllersHelperFunctions') +const News = require('../models/News') +const Category = require('../models/Category') +const sharp = require('sharp') +const fs = require('fs') + +////// variables +const noCover = '/img/no-cover.jpg' +const limit = 5; +const limitDetails = 11; +const titleFilterRegex = new RegExp('/', 'g') + +////// variables +const coverNewsWidth = 1000; +const coverNewsHeight = 600; +const coverQuality = 100; + +const thumbCoverNewsWidth = 600; +const thumbCoverNewsHeight = 300; +const thumbCoverQuality = 200; + +////// functions +const changePriority = async (catId, modelType) => { + try { + const getAllNews = await News.find({ + catId, + modelType, + priority: true + }); + + for (const item of getAllNews) { + item.priority = false; + await item.save(); + } + + return true + } catch (error) { + console.log(error) + } +} + +const _checkSpecPermission = async (req, category) => { + return !req.user.specialPermissions.includes(category._id) && //check parent id exist in special permissions or not + !req.user.specialPermissions.some(item => category?.treeCat?.join().includes(item)); +} + +/////////////////////////////////////////////////////////////////////// admin +module.exports.addNewsFile = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title) + .custom((value, {req}) => { + return NewsFile.findOne({title: value}) + .then(newsFile => { + if (newsFile) return Promise.reject(_sr['fa'].duplicated.title); + else return true + }) + }), + + body('description') + .optional().isString().withMessage(`نوع مقدار ارسال شده صحیح نمی باشد`), + + body('catId') + .isMongoId().withMessage(_sr['fa'].required.field) + .if((value, { + req + }) => { + return req.body.catId + }) + .custom((value) => { + return Category.findOne({ + _id: value + }) + .then(category => { + if (!category) return Promise.reject(_sr['fa'].not_found.category); + else return true + }) + }), + + body('index') + .isNumeric().withMessage(`لطفا ترتیب نمایش را مشخص کنید`), + + body('showInHome') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('siteMap') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('modelType') + .custom((value, {req}) => { + if (req.user.portals.join() === portal.join()) { + if (!portal.includes(value)) { + return Promise.reject(_sr['fa'].required.field); + } else { + return true + } + } else { + return true + } + }) + ], + async (req, res) => { + + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + let { + title, + description, + catId, + index, + showInHome, + siteMap, + modelType + } = req.body; + + /** set portals */ + modelType = (req.user.portals.join() === portal.join()) ? modelType : req.user.portals[0]; + + let newsFileData = { + title: title.trim().replace(titleFilterRegex, '-'), + description: description.trim(), + catId, + index, + showInHome, + siteMap, + _creator: req.user._id, + _updatedBy: req.user._id, + modelType + }; + + if (catId) { + /** get category with populate parent */ + const category = await Category.findOne({ + _id: catId + }) + .populate({ + path: 'parent', + populate: { + path: 'parent', + model: 'Category' + } + }); + + /** if undefined we have error from database */ + if (!category) return res404(res, `دسته بندی انتخاب شده برای این پرونده خبری پیدا نشد`); + + /** check special permission */ + if (req.user.specialPermissions.length && await _checkSpecPermission(req, category)) { + return res.status(403).json({ + message: `شما نمیتوانید این دسته بندی را انتخاب کنید` + }); + } + + if (category.modelType !== modelType) { + return res.status(403).json({ + message: `شما اجازه استفاده از این دسته بندی را ندارید` + }); + } + + newsFileData.allCat = category.treeCat; + newsFileData.rootParent = category.rootParent || category._id; + } + + + const createNewsFile = await NewsFile.create(newsFileData); + + if (!createNewsFile) res500(res, `مشکلی در اضافه کردن پرونده پرونده خبریی پیش آمده است`) + + /** + * if we have pic upload to server + */ + if (req.files?.cover) { + const image = req.files.cover; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) return res.status(422).json({ + validation: { + cover: { + msg: _sr['fa'].format.image + } + } + }) + const imageName = `news_${Date.now()}_${createNewsFile._id}.${image.mimetype.split('/')[1]}`; + try { + const target = sharp(image.data) + await target + .resize(coverNewsWidth, coverNewsHeight, {fit: 'cover'}) + .jpeg({quality: coverQuality}) + .toFile(`./static/uploads/images/news/${imageName}`); + + createNewsFile.cover = imageName; + + await target + .resize(thumbCoverNewsWidth, thumbCoverNewsHeight, {fit: 'cover'}) + .jpeg({quality: thumbCoverQuality}) + .toFile(`./static/uploads/images/news/thumb_${imageName}`); + + createNewsFile.thumbCover = `thumb_${imageName}`; + + await createNewsFile.save(); + } catch (e) { + return res500(res, e?.message); + } + } + + /** + * show result + */ + return res.json(createNewsFile); + } catch (error) { + res500(res, error.message); + } + } +] + +module.exports.updateNewsFile = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title), + + body('catId') + .isMongoId().withMessage(_sr['fa'].required.field) + .if((value, { + req + }) => { + return req.body.catId + }) + .custom((value) => { + return Category.findOne({ + _id: value + }) + .then(category => { + if (!category) return Promise.reject(_sr['fa'].not_found.category); + else return true + }) + }), + + body('description') + .optional().isString().withMessage(`نوع مقدار ارسال شده صحیح نمی باشد`), + + body('index') + .isNumeric().withMessage(`لطفا ترتیب نمایش را مشخص کنید`), + + body('showInHome') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('siteMap') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('modelType') + .custom((value, {req}) => { + if (req.user.portals.join() === portal.join()) { + if (!portal.includes(value)) { + return Promise.reject(_sr['fa'].required.field); + } else { + return true + } + } else { + return true + } + }) + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + + /** + * get data from input + */ + const { + title, + description, + catId, + index, + showInHome, + siteMap, + modelType + } = req.body; + + /** + * get id + */ + var newsFileId = req.params.id; + + var targetNewsFile = await NewsFile.findById(newsFileId); + + /** check newsFile exist or not */ + if (!targetNewsFile) return res404(res, `پرونده خبری مورد نظر پیدا نشد`); + + /** check access portal */ + if (!req.user.portals.includes(targetNewsFile.modelType)) return res.status(403).json({message: `شما اجازه آپدیت این پرونده خبری را ندارید`}); + + if (targetNewsFile.title !== title) { + var checkDuppTitle = await NewsFile.findOne({ + title: title + }); + + if (checkDuppTitle) { + return res.status(422).json({validation: {title: {msg: _sr['fa'].duplicated.title}}}); + } + } + + if (modelType !== targetNewsFile.modelType) { + /** check have news or not */ + var checkNews = await News.find({newsFileId: targetNewsFile._id}); + + if (checkNews.length) { + return res.status(403).json({message: `این پرونده خبری دارای خبر می باشد و شما نمی توانید نوع آن را تغییر دهید`}); + } + } + + /** get category with populate parent */ + var category = await Category.findOne({ + _id: catId + }) + .populate({ + path: 'parent', + populate: { + path: 'parent', + model: 'Category' + } + }); + + /** if undefined we have error from database */ + if (!category) return res404(res, `دسته بندی انتخاب شده برای این خبر پیدا نشد`); + + /** check special permission */ + if (req.user.specialPermissions.length && await _checkSpecPermission(req, category)) { + return res.status(403).json({ + message: `شما مجاز به انتخاب این دسته بندی نمی باشید` + }); + } + + if (category.modelType !== modelType) return res.status(403).json({ + message: `محدوده انتخاب شده شما با محدوده دسته بندی همخوانی ندارد` + }); + + + if (catId && targetNewsFile.catId !== catId) { + targetNewsFile.allCat = category.treeCat; + targetNewsFile.rootParent = category.rootParent || category._id; + } + + targetNewsFile.title = title.trim().replace(titleFilterRegex, '-') + targetNewsFile.description = description.trim(); + targetNewsFile.catId = catId; + targetNewsFile.index = index; + targetNewsFile.showInHome = showInHome; + targetNewsFile.siteMap = siteMap; + targetNewsFile.modelType = modelType; + + + /** + * if we have pic upload to server + */ + if (req.files?.cover) { + const image = req.files.cover; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { + cover: { + msg: _sr['fa'].format.image + } + } + }); + } + const imageName = `news_${Date.now()}_${targetNewsFile._id}.${image.mimetype.split('/')[1]}`; + try { + const target = sharp(image.data) + await target + .resize(coverNewsWidth, coverNewsHeight, {fit: 'cover'}) + .jpeg({quality: coverQuality}) + .toFile(`./static/uploads/images/news/${imageName}`); + + await target + .resize(thumbCoverNewsWidth, thumbCoverNewsHeight, {fit: 'cover'}) + .jpeg({quality: thumbCoverQuality}) + .toFile(`./static/uploads/images/news/thumb_${imageName}`); + + /** + * if exist old pic delete it from file + */ + if (targetNewsFile.cover !== noCover) { + let oldPic = `./static${targetNewsFile.cover}`; + + if (await fs.existsSync(oldPic)) { + fs.unlink(oldPic, (err) => { + if (err) return res500(res, err?.message); + }); + } + } + + if (targetNewsFile.thumbCover !== noCover) { + let oldPic = `./static${targetNewsFile.thumbCover}`; + + if (await fs.existsSync(oldPic)) { + fs.unlink(oldPic, (err) => { + if (err) return res500(res, err?.message); + }); + } + } + + targetNewsFile.cover = imageName; + targetNewsFile.thumbCover = `thumb_${imageName}`; + } catch (e) { + return res500(res, e?.message); + } + } + + await targetNewsFile.save(); + + /** + * show result + */ + return res.json(targetNewsFile); + + } catch (error) { + return res500(res, error.message); + } + } +] + +module.exports.deletOneNewsFile = [ + async (req, res) => { + try { + var newsFileId = req.params.id; + + var targetNewsFile = await NewsFile.findOne({_id: newsFileId}); + + /** check newsFile exist or not */ + if (!targetNewsFile) { + return res404(res, `پرونده خبری مورد نظر پیدا نشد`); + } + + /** check access portal */ + if (!req.user.portals.includes(targetNewsFile.modelType)) { + return res.status(403).json({message: `شما اجازه حذف این پرونده خبری را ندارید`}); + } + + /** check have news or not */ + var checkNews = await News.find({newsFileId: targetNewsFile._id}); + + if (checkNews.length) { + return res.status(403).json({message: `این پرونده خبری دارای خبر می باشد و شما نمی توانید آن را حذف دهید`}); + } + + /** delete newsFile */ + await targetNewsFile.deleteOne(); + + /** + * show result + */ + return res.json(targetNewsFile); + + } catch (error) { + res500(res, error); + } + } +] + +module.exports.deleteAllNewsFile = [ + async (req, res) => { + try { + + } catch (error) { + /** + * if we got unkown error show to client + */ + res500(res, error); + } + } +] + +module.exports.getOneNewsFile = [ + async (req, res) => { + try { + var newsFileId = req.params.id; + + var findQuery = {_id: newsFileId}; + + var newsFile = await NewsFile.findOne(findQuery).populate('catId'); + + if (!newsFile) { + return res404(res, `پرونده خبری مورد نظر پیدا نشد`); + } + + /** check access portal */ + if (!req.user.portals.includes(newsFile.modelType)) { + return res.status(403).json({message: `شما اجازه دسترسی به اطلاعات این پرونده خبری را ندارید`}); + } + + /** + * show result + */ + return res.json(newsFile); + } catch (error) { + res500(res, error); + } + } +] + +module.exports.getAll = [ + async (req, res) => { + try { + + var findQuery = {}; + + // @todo can change it + if (req.user.specialPermissions.length) { + findQuery.catId = {$in: req.user.specialPermissions} + } + + if (req.user.portals.length) { + findQuery.modelType = {$in: req.user.portals}; + } + + /** get all newsFile */ + const allNewsFile = await NewsFile.find(findQuery).populate('_creator', { + firstName: 1, + lastName: 1, + profilePic: 1 + }) + .sort({created_at: -1}); + + /** if null we have error */ + if (!allNewsFile) { + return res500(res, `مشکلی در گرفتن اطلاعات پیش آمده است`); + } + + /** show result to client */ + return res.json(allNewsFile); + } catch (error) { + return res500(res, error?.message); + } + } +] + +module.exports.search = [ + async (req, res) => { + try { + var query = {}; + let populate = [{ + path: '_creator', + select: {firstName: 1, lastName: 1, profilePic: 1} + }, + { + path: 'catId' + }]; + + + query['$and'] = []; + + var { + term, + showInHome, + catId, + portals + } = req.body; + + ///////////// permissions + + /** search by catId */ + if (req.user.specialPermissions.length) { + query.catId = {$in: req.user.specialPermissions} + } else if (catId && !_.isEmpty(catId)) { + query['$and'].push({ + catId + }); + } + + /** search by portals */ + if (portals && !_.isEmpty(portals)) { + query['$and'].push({ + modelType: { + $in: portals + } + }) + } else { + if (req.user.portals.length) { + query.modelType = {$in: req.user.portals}; + } + } + + /** search by term */ + if (term && !_.isEmpty(term)) { + query['$and'].push({ + $or: [{ + title: { + $regex: '.*' + term + '.*' + } + }] + }); + } + + /** search by showInHome */ + if (!_.isUndefined(showInHome) && _.isBoolean(showInHome)) { + query['$and'].push({ + showInHome + }); + } + + _.isEmpty(query['$and']) && delete query['$and']; + // _.isEmpty(input['$or']) && delete input['$or']; + + /** get news */ + const news = await NewsFile.paginate(query, {page: req.query.page, limit, populate, sort: {_id: -1}}); + + /** show result */ + return res.json(news); + } catch (error) { + return res500(res, error?.message) + } + } +] + +/////////////////////////////////////////////////////////////////////// public +module.exports.viewNewsFile = [ + async (req, res) => { + try { + const newsFileTitle = req.params.title; + + let targetNewsFile = await NewsFile.findOne({ + title: newsFileTitle + }) + .populate('_creator', {firstName: 1, lastName: 1, profilePic: 1}); + + if (!targetNewsFile) { + return res404(res, `پرونده خبری مورد نطر پیدا نشد`); + } + + ++targetNewsFile.userViews; + + await targetNewsFile.save(); + + /** get news */ + let getNews = await News.paginate({newsFileId: targetNewsFile._id}, {page: req.query.page || 1, limit: limitDetails , sort : {customDate : -1}}); + + let result = { + newsFile: targetNewsFile, + news: getNews + }; + + return res.json(result); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما پیش آمده است`); + } + } +] + +module.exports.getAllNewsFile = [ + async (req, res) => { + try { + const { + portal, + limit, + skip + } = req.query; + + const findQuery = {}; + + const setLimit = parseInt(limit) || 4; + const setSort = {index: 1}; + const setSkip = parseInt(skip) || 0; + + findQuery.modelType = portal; + findQuery.publish = true; + + const getNewsFile = await NewsFile.find(findQuery).limit(setLimit).skip(setSkip).sort(setSort); + + return res.json(getNewsFile); + } catch (error) { + return res500(res, error?.message); + } + } +] diff --git a/server/controllers/occasionController.js b/server/controllers/occasionController.js new file mode 100644 index 0000000..c368fe4 --- /dev/null +++ b/server/controllers/occasionController.js @@ -0,0 +1,341 @@ +const Occasion = require('../models/Occasion'); +const {body, validationResult} = require('express-validator'); +const {_sr} = require('../plugins/serverResponses'); +const {res404, res500} = require('../plugins/controllersHelperFunctions'); +const fs = require('fs'); +const sharp = require('sharp'); +const moment = require('moment-jalaali'); + +////// variables +const occasionWidth = 1920 +const occasionHeight = 180 +const occasionQuality = 100 + +const limit = 5; + +/////////////////////////////////////////////////////////////////////// admin +module.exports.addOccasion = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title), + + body('publish') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('index') + .isNumeric().withMessage(_sr['fa'].format.number), + + body('startDate') + .notEmpty().withMessage(`لطفا یک تاریخ شروع تعیین کنید`), + + + body('endDate') + .notEmpty().withMessage(`لطفا یک تاریخ پایان تعیین کنید`), + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + + const {title, publish, index, startDate, endDate} = req.body; + + const occasionData = { + title, + publish, + index, + startDate, + endDate, + _creator: req.user._id, + _updatedBy: req.user._id, + } + + const addOccasion = await Occasion.create(occasionData); + + if (!addOccasion) return res500(res, `مشلی در اجرای درخواست شما پیش امده است`); + + if (req?.files && req.files?.cover) { + const image = req.files.cover; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({validation: {cover: {msg: _sr['fa'].format.image}}}); + } + + const imageName = `occasion_${addOccasion._id}_${Date.now()}.jpg`; + const target = sharp(image.data) + await target + .resize(occasionWidth, occasionHeight, { + fit: 'cover' + }) + .toFormat('jpg') + .jpeg({ + quality: occasionQuality + }) + .toFile(`./static/uploads/images/occasion/${imageName}`); + + addOccasion.status = true; + addOccasion.mainCover = imageName; + await addOccasion.save(); + } + + /** + * show result + */ + return res.json(addOccasion); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست پیش آمده است`); + } + } +] + +module.exports.updateOccasion = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title), + + body('publish') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('index') + .isNumeric().withMessage(_sr['fa'].format.number), + + body('startDate') + .notEmpty().withMessage(`لطفا یک تاریخ شروع تعیین کنید`), + + body('endDate') + .notEmpty().withMessage(`لطفا یک تاریخ پایان تعیین کنید`), + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + + try { + + const {title, publish, index, startDate, endDate} = req.body; + + const occasionId = req.params.id; + + const targetOccasion = await Occasion.findById(occasionId); + + if (!targetOccasion) { + return res404(res, `مناسبت مورد نظر پیدا نشد`); + } + + if (req?.files && req.files?.cover) { + const image = req.files.cover; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({validation: {cover: {msg: _sr['fa'].format.image}}}); + } + + const imageName = `occasion_${targetOccasion._id}_${Date.now()}.jpg`; + const target = sharp(image.data) + await target + .resize(occasionWidth, occasionHeight, { + fit: 'cover' + }) + .toFormat('jpg') + .jpeg({ + quality: occasionQuality + }) + .toFile(`./static/uploads/images/occasion/${imageName}`); + + if (targetOccasion.mainCover) { + var oldPic = `./static${targetOccasion.mainCover}`; + + if (fs.existsSync(oldPic)) { + fs.unlink(oldPic, (err) => { + if (err) return res500(res, err?.message); + }); + } + } + + targetOccasion.status = true; + targetOccasion.mainCover = imageName; + } + + targetOccasion.title = title; + targetOccasion.publish = publish; + targetOccasion.index = index; + targetOccasion.startDate = startDate; + targetOccasion.endDate = endDate; + targetOccasion._updatedBy = req.user._id; + + await targetOccasion.save(); + + return res.json(targetOccasion); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست پیش آمده است`); + } + } +] + +module.exports.deleteOccasion = [ + async (req, res) => { + try { + const occasionId = req.params.id; + + const targetOccasion = await Occasion.findById(occasionId); + + if (!targetOccasion) { + return res404(res, `مناسبت مورد نظر پیدا نشد`); + } + + if (targetOccasion.mainCover) { + var oldPic = `./static${targetOccasion.mainCover}`; + + if (fs.existsSync(oldPic)) { + fs.unlink(oldPic, (err) => { + if (err) return res500(res, err?.message); + }); + } + } + + await targetOccasion.deleteOne(); + + return res.json({message: `مناسبت مورد نظر حذف گرید`}); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست پیش آمده است`); + } + } +] + +module.exports.getOccasionByAdmin = [ + async (req, res) => { + try { + const occasionId = req.params.id; + const getOccasion = await Occasion.findById(occasionId); + + /** + * if not exist + */ + if (!getOccasion) return res404(res, `اطلاعات مورد نظر پیدا نشد`); + + /** + * show result + */ + return res.json(getOccasion); + } catch (error) { + /** + * if we got unkown error show to client + */ + return res500(res, `مشکلی در اجرای درخواست شما پیش آمده است`); + } + } +] + +module.exports.getAllOccasionByAdmin = [ + async (req, res) => { + try { + const getAllOccasion = await Occasion.paginate({}, { + page: req.query.page || 1, + populate: {path: '_creator', select: 'firstName lastName'}, + limit, + sort: {_id: -1} + }); + + return res.json(getAllOccasion); + } catch (error) { + /** + * if we got unkown error show to client + */ + return res500(res, `مشکلی در اجرای درخواست شما پیش آمده است`); + } + } +] + +module.exports.getAllOccasionForIndex = [ + async (req, res) => { + try { + const getAllOccasion = await Occasion.find(); + + return res.json(getAllOccasion); + } catch (error) { + /** + * if we got unkown error show to client + */ + return res500(res, `مشکلی در اجرای درخواست شما پیش آمده است`); + } + } +] + +module.exports.search = [ + async (req, res) => { + try { + let query = {}; + let populate = [{ + path: '_creator', + select: {firstName: 1, lastName: 1, profilePic: 1} + }]; + + + query['$and'] = []; + + const { + term, + publish, + status, + date + } = req.body; + + /** search by term */ + if (term && !_.isEmpty(term)) { + query['$and'].push({ + $or: [{ + title: { + $regex: '.*' + term + '.*' + } + }] + }); + } + + /** search by publish */ + if (!_.isUndefined(publish) && _.isBoolean(publish)) { + query['$and'].push({ + publish + }); + } + + /** search by status */ + if (!_.isUndefined(status) && _.isBoolean(status)) { + query['$and'].push({ + status + }); + } + + /** search by date */ + if (date && !_.isEmpty(date)) { + if (date.length === 1) { + query['$and'].push({ + startDate:{$lte : new Date(date[0])}, + endDate: {$gte : new Date(date[0])} + }); + } else { + query['$and'].push({ + startDate: {$lte : new Date(date[0])}, + endDate:{$gte : new Date(date[1])} + }); + } + } + + _.isEmpty(query['$and']) && delete query['$and']; + // _.isEmpty(input['$or']) && delete input['$or']; + + /** get news */ + const occasion = await Occasion.paginate(query, { + page: req.query.page || 1, + limit, + populate, + sort: {_id: -1} + }); + + /** show result */ + return res.json(occasion); + } catch (error) { + return res500(res, error?.message) + } + } +] diff --git a/server/controllers/pdfController.js b/server/controllers/pdfController.js new file mode 100644 index 0000000..1d1d971 --- /dev/null +++ b/server/controllers/pdfController.js @@ -0,0 +1,109 @@ +const { body, validationResult } = require("express-validator"); +const { _sr } = require("../plugins/serverResponses"); +const { checkValidations } = require("../plugins/controllersHelperFunctions"); +const Book = require("../models/Book"); +var convertapi = require('convertapi')('6zZB0nquI5V3P3Vg'); + +module.exports.AddPDF = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title) + ], + checkValidations(validationResult), + async (req, res) => { + try { + const firstbook = []; + + if (!req.files?.file) { + return res.status(422).json({ validation: { file: { msg: _sr['fa'].required.file } } }); + } + + if (req.files?.file.mimetype.split('/')[1] !== 'pdf') { + return res.status(422).json({ validation: { file: { msg: 'فقط فرمت PDF قابل قبول است' } } }); + } + + const book = await Book.findById(req.body.bookId); + const bookId = book ? book._id : null; + + const data = { title: req.body.title }; + const file = req.files.file; + const fileName = req.body.title.replace(Date.now(), '-') + '_' + Date.now() + '.pdf'; + const imageName = req.body.title.replace(Date.now(), '-') + '_' + Date.now(); + + const filePath = `./static/uploads/pdf/${fileName}`; + + await file.mv(filePath); + data.file = fileName; + + const convertPromise = convertapi.convert('jpg', { + File: filePath + }, 'pdf'); + + const result = await convertPromise; + const savedFiles = await result.saveFiles(`./static/uploads/books/${imageName}.jpeg`); + + const imagePath = `https://ostan-mr.ir/uploads/books/${imageName}.jpeg`; + firstbook.push(imagePath); + + if (bookId) { + const update = await Book.findByIdAndUpdate( + {_id:bookId}, + { $push: { slides: imagePath } }, + { upsert: true } + ); + return res.status(201).json({ msg: "اسلاید کتاب اضافه شد", Data: update }); + } else { + const newBook = new Book({ + title: req.body.title, + uri: `https://ostan-mr.ir/uploads/pdf/${fileName}`, + slides: firstbook + }); + await newBook.save(); + return res.status(201).json({ msg: "کتاب ایجاد شد", Data: newBook }); + } + + } catch (error) { + console.error(error); + return res.status(500).json({ msg: "خطایی در پردازش فایل رخ داد", error: error.message }); + } + } + + + +]; + +module.exports.GetAll = [ + async (req, res,next) => { + try { + const Books = await Book.find({}); + return res.status(200).json({ Books }); + } catch (error) { + next(error) + } + } +]; + +module.exports.GetOne = [ + async (req, res,next) => { + try { + const id = req.params.id + const book = await Book.findById(id); + return res.status(200).json({ msg: book }); + } catch (error) { + next(error) + } + } +]; +module.exports.DeleteOne = [ + async(req,res,next)=>{ + try { + const book = await Book.deleteOne({_id:req.params.id}) + if(!book){ + return res.status(200).json({ msg: 'کتاب وجود ندارد ' }); + } + return res.status(200).json({ msg: 'کتاب حذف شد' }); + } catch (error) { + next(error) + } + } +] diff --git a/server/controllers/permissionsController.js b/server/controllers/permissionsController.js new file mode 100644 index 0000000..b8920c2 --- /dev/null +++ b/server/controllers/permissionsController.js @@ -0,0 +1,36 @@ +const permissions = require('../plugins/permissions'); +const {body, validationResult} = require('express-validator'); +const sharp = require('sharp'); +const User = require('../models/User') +const {_sr} = require('../plugins/serverResponses'); +const {res404, res500, hasWhiteSpaces, isLatinCharactersWithSymbol, generateRandomDigits} = require('../plugins/controllersHelperFunctions'); + +/** @todo add show in footer */ +/////////////////////////////////////////////////////////////////////// admin +module.exports.getAll = [ + async (req, res) => { + try { + return res.json(permissions); + } catch (error) { + return res500(res , error.message); + } + } +] + + + +module.exports.SetPermission = [ + async (req,res)=>{ + try { + const {id} = req.params; + const lastuser = await User.findById(id) + if(lastuser.scope.includes('PublisherNews')){ + return res.status(200).json({message:"کاربر به عنوان دبیر ثبت شده"}) + } + const user = await User.findByIdAndUpdate({_id:id} , {$push:{scope:"PublisherNews"}} , {new:true}); + return res.status(200).json(user) + }catch (e) { + return res.status(500).json(e.message) + } + } +] \ No newline at end of file diff --git a/server/controllers/pollController.js b/server/controllers/pollController.js new file mode 100644 index 0000000..b3cb864 --- /dev/null +++ b/server/controllers/pollController.js @@ -0,0 +1,436 @@ +const Category = require('../models/Category'); +const {body, validationResult} = require('express-validator'); +const {_sr} = require('../plugins/serverResponses'); +const {res404, res500, checkValidations} = require('../plugins/controllersHelperFunctions'); +const Polls = require('../models/Polls'); +const fs = require('fs') + + +// variables +const titleFilterRegex = new RegExp('/', 'g') +const limit = 20; + + +//// functions +const _checkSpecPermission = async (req, category) => { + return !req.user.specialPermissions.includes(category._id) && //check parent id exist in special permissions or not + !req.user.specialPermissions.some(item => category?.treeCat?.join().includes(item)); +} + +/////////////////////////////////////////////////////////////////////// admin +module.exports.addSurvey = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('catId') + .isMongoId().withMessage(_sr['fa'].required.field) + .if((value, {req}) => { + return req.body.catId + }) + .custom((value) => { + return Category.findOne({ + _id: value + }) + .then(category => { + if (!category) return Promise.reject(_sr['fa'].not_found.category); + else return true + }) + }), + + // body('index') + // .isNumeric().withMessage(`لطفا ترتیب نمایش را مشخص کنید`), + + body('surveyType') + .notEmpty().withMessage(_sr['fa'].required.field) + .bail() + .isIn(['check', 'radio']).withMessage(`${_sr['fa'].optional.onlyValid} => 'check' , 'radio'`), + + body('startDate') + .notEmpty().withMessage(`لطفا یک تاریخ شروع تعیین کنید`), + + body('endDate') + .notEmpty().withMessage(`لطفا یک تاریخ پایان تعیین کنید`), + + body('publish') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + body('options') + .notEmpty().withMessage(_sr['fa'].required.field) + .bail() + .isArray().withMessage(`اطلاعات را باید به صورت آرایه بفرستید`), + + + ], + checkValidations(validationResult), + async (req, res) => { + try { + + const { + title, + catId, + description, + // index, + surveyType, + startDate, + endDate, + options, + publish + } = req.body; + + const data = { + title: title.trim(), + catId, + description, + // index, + surveyType, + startDate, + endDate, + options, + publish, + _creator: req.user._id, + _updatedBy: req.user._id + } + + + const category = await Category.findOne({ + _id: catId + }).populate({ + path: 'parent', + populate: { + path: 'parent', + model: 'Category' + } + }); + + if (!category) return res404(res, 'دسته بندی مورد نظر پیدا نشد'); + + /** check special permission */ + if (req.user.specialPermissions.length && await _checkSpecPermission(req, category)) { + return res.status(403).json({ + message: `شما نمیتوانید این دسته بندی را انتخاب کنید` + }); + } + + data.allCat = category.treeCat; + data.rootParent = category.rootParent || category._id; + + const createPoll = await Polls.create(data); + + if (!createPoll) return res500(res, `مشکلی در اجرای درخواست شما پیش آمده است`); + + return res.json({message: _sr['fa'].response.success_save}); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +module.exports.updateSurvey = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('catId') + .isMongoId().withMessage(_sr['fa'].required.field) + .if((value, {req}) => { + return req.body.catId + }) + .custom((value) => { + return Category.findOne({ + _id: value + }) + .then(category => { + if (!category) return Promise.reject(_sr['fa'].not_found.category); + else return true + }) + }), + + // body('index') + // .isNumeric().withMessage(`لطفا ترتیب نمایش را مشخص کنید`), + + body('surveyType') + .notEmpty().withMessage(_sr['fa'].required.field) + .bail() + .isIn(['check', 'radio']).withMessage(`${_sr['fa'].optional.onlyValid} => 'check' , 'radio'`), + + body('startDate') + .notEmpty().withMessage(`لطفا یک تاریخ شروع تعیین کنید`), + + body('endDate') + .notEmpty().withMessage(`لطفا یک تاریخ پایان تعیین کنید`), + + body('options') + .notEmpty().withMessage(_sr['fa'].required.field) + .bail() + .isArray().withMessage(`اطلاعات را باید به صورت آرایه بفرستید`), + + body('publish') + .isBoolean().withMessage(_sr['fa'].format.boolean), + + ], + checkValidations(validationResult), + async (req, res) => { + try { + + const pollId = req.params.id; + + const { + title, + surveyType, + description, + catId, + // index, + startDate, + endDate, + options, + publish + } = req.body; + + //// check poll + const targetPoll = await Polls.findById(pollId); + + if (!targetPoll) return res404(res, `نظر سنجی مورد نظر پیدا نشد`); + + + if (catId && targetPoll.catId !== catId) { + const category = await Category.findOne({ + _id: catId + }).populate({ + path: 'parent', + populate: { + path: 'parent', + model: 'Category' + } + }); + + if (!category) return res404(res, 'دسته بندی مورد نظر پیدا نشد'); + + /** check special permission */ + if (req.user.specialPermissions.length && await _checkSpecPermission(req, category)) { + return res.status(403).json({ + message: `شما نمیتوانید این دسته بندی را انتخاب کنید` + }); + } + + targetPoll.catId = catId; + targetPoll.allCat = category.treeCat; + targetPoll.rootParent = category.rootParent || category._id; + } + + targetPoll.title = title; + targetPoll.surveyType = surveyType; + targetPoll.description = description; + // targetPoll.index = index; + targetPoll.startDate = startDate; + targetPoll.endDate = endDate; + targetPoll.options = options; + targetPoll.publish = publish; + targetPoll._updatedBy = req.user._id; + + await targetPoll.save(); + + return res.json({message: _sr['fa'].response.success_save}); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +module.exports.getAllSurvey = [ + async (req, res) => { + try { + let findQuery = {}; + + if (req.user.specialPermissions.length) { + findQuery.catId = {$in: req.user.specialPermissions} + } + + const allPolls = await Polls.paginate(findQuery, { + page: req.query.page || 1, + populate: {path: 'catId'}, + limit, + sort: {created_at: -1} + }); + + if (!allPolls) return res500(res, `مشکلی در گرفتن اطلاعات پیش آمده است`); + + return res.json(allPolls); + + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +module.exports.getOneSurvey = [ + async (req, res) => { + try { + const pollId = req.params.id; + + const findQuery = { + _id: pollId + }; + + const poll = await Polls.findOne(findQuery).populate('catId'); + + if (!poll) return res404(res, `اطلاعات مورد نظر پیدا نشد`); + + if (req.user.specialPermissions.length && await _checkSpecPermission(req, poll.catId)) { + return res.status(403).json({ + message: `شما مجاز به دیدن اطلاعات این نظرسنجی نمی باشید` + }); + } + + return res.json(poll); + + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +module.exports.deletOneSurvey = [ + async (req, res) => { + try { + const pollId = req.params.id; + + const deletePoll = await Polls.findById(pollId).populate('catId'); + + if (!deletePoll) return res404(res, `نظرسنجی مورد نظر پیدا نشد`); + + if (req.user.specialPermissions.length && await _checkSpecPermission(req, deletePoll.catId)) { + return res.status(403).json({ + message: `شما اجازه حذف این نظرسنجی را ندارید` + }); + } + + await deletePoll.deleteOne(); + + return res.json({message: _sr['fa'].response.success_remove}); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +module.exports.search = [ + async (req, res) => { + try { + let query = {}; + let populate = [{ + path: '_creator', + select: {firstName: 1, lastName: 1, profilePic: 1} + }]; + + + query['$and'] = []; + + const { + term, + catId, + publish, + date + } = req.body; + + /** search by term */ + if (term && !_.isEmpty(term)) { + query['$and'].push({ + $or: [{ + title: { + $regex: '.*' + term + '.*' + } + }] + }); + } + + if (req.user.specialPermissions.length) { + query.catId = {$in: req.user.specialPermissions} + } else if (catId && !_.isEmpty(catId)) { + query['$and'].push({ + catId + }); + } + + /** search by publish */ + if (!_.isUndefined(publish) && _.isBoolean(publish)) { + query['$and'].push({ + publish + }); + } + + /** search by date */ + if (date && !_.isEmpty(date)) { + if (date.length === 1) { + query['$and'].push({ + startDate: {$lte: new Date(date[0])}, + endDate: {$gte: new Date(date[0])} + }); + } else { + query['$and'].push({ + startDate: {$lte: new Date(date[0])}, + endDate: {$gte: new Date(date[1])} + }); + } + } + + _.isEmpty(query['$and']) && delete query['$and']; + // _.isEmpty(input['$or']) && delete input['$or']; + + /** get polls */ + const polls = await Polls.paginate(query, { + page: req.query.page || 1, + limit, + populate, + sort: {_id: -1} + }); + + /** show result */ + return res.json(polls); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + +/////////////////////////////////////////////////////////////////////// public + +module.exports.answer = [ + [ + body('surveyId') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('option') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('pollToken') + .notEmpty().withMessage(_sr['fa'].required.field) + ], + checkValidations(validationResult), + async (req, res) => { + try { + const { + surveyId, + option, + pollToken + } = req.body; + + //// check category + const targetPoll = await Polls.findById(surveyId); + + if (!targetPoll) return res404(res, `نظر سنجی مورد نظر پیدا نشد`); + + for (const item of option) { + targetPoll.answers.push(item); + } + targetPoll.userIds.push(pollToken); + + await targetPoll.save(); + + return res.json({message: _sr['fa'].response.success_save}); + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود آمده است`); + } + } +] + diff --git a/server/controllers/portalController.js b/server/controllers/portalController.js new file mode 100644 index 0000000..a9d1561 --- /dev/null +++ b/server/controllers/portalController.js @@ -0,0 +1,17 @@ +const portals = require('../plugins/portals'); +const {_sr} = require('../plugins/serverResponses'); +const {res404, res500, hasWhiteSpaces, isLatinCharactersWithSymbol, generateRandomDigits} = require('../plugins/controllersHelperFunctions'); + +/** @todo add show in footer */ +/////////////////////////////////////////////////////////////////////// admin +module.exports.getAll = [ + async (req, res) => { + try { + var result = portals.filter((item) => req.user.portals.includes(item.value)); + return res.json(result); + } catch (error) { + return res500(res , error.message); + } + } +] + diff --git a/server/controllers/servicesController.js b/server/controllers/servicesController.js new file mode 100644 index 0000000..e99b9dd --- /dev/null +++ b/server/controllers/servicesController.js @@ -0,0 +1,542 @@ +const Slider = require('../models/Slider'); +const { + body, + validationResult +} = require('express-validator'); +const sharp = require('sharp'); +const { + _sr +} = require('../plugins/serverResponses'); +const { + res404, + res500, + hasWhiteSpaces, + isLatinCharactersWithSymbol, + generateRandomDigits +} = require('../plugins/controllersHelperFunctions'); +const fs = require('fs'); + +////// variables +const profileWidth = 600; +const profileHeight = 400; +const profileQuality = 100; + + +/////////////////////////////////////////////////////////////////////// admin +module.exports.addSlider = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title), + + body('summaryTitle') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('url') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('index') + .optional().isNumeric().withMessage(_sr['fa'].format.number), + + body('isLocal') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('siteMap') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('modelType') + .custom((value, { + req + }) => { + if (req.user.portals.join() === portal.join()) { + if (!portal.includes(value)) { + return Promise.reject(_sr['fa'].required.field); + } else { + return true + } + } else { + return true + } + }) + ], + async (req, res) => { + + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + var { + title, + summaryTitle, + isLocal, + url, + index, + siteMap, + modelType, + } = req.body; + + /** set portals */ + modelType = (req.user.portals.join() === portal.join()) ? modelType : req.user.portals[0]; + + const sliderData = { + title : title.trim(), + summaryTitle : summaryTitle.trim(), + url : url.trim(), + isLocal, + index, + siteMap, + _creator: req.user._id, + _updatedBy: req.user._id, + modelType, + }; + + var createSlider = await Slider.create(sliderData); + + if (!createSlider) { + res500(res, `error in add slider to data base`); + } + + /** + * if we have pic upload to server + */ + if (req.files && req.files.cover) { + const image = req.files.cover; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { + cover: { + msg: _sr['fa'].format.image + } + } + }); + } + const imageName = `slider_${Date.now()}_${createSlider._id}.${image.mimetype.split('/')[1]}`; + try { + const target = sharp(image.data) + await target + .resize(profileWidth, profileHeight, { + fit: 'cover' + }) + .jpeg({ + quality: profileQuality + }) + .toFile(`./static/uploads/images/slider/${imageName}`); + + createSlider.cover = imageName; + + await createSlider.save(); + } catch (e) { + return res500(res, e?.message); + } + } + + + /** + * show result + */ + return res.json(createSlider); + } catch (error) { + console.log(error); + /** + * if we got unkown error show to client + */ + res500(res, error.message); + } + } +] + +module.exports.updateSlider = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title), + + body('summaryTitle') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('url') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('isLocal') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('index') + .optional().isNumeric().withMessage(_sr['fa'].format.number), + + body('siteMap') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('modelType') + .custom((value, { + req + }) => { + if (req.user.portals.join() === portal.join()) { + if (!portal.includes(value)) { + return Promise.reject(_sr['fa'].required.field); + } else { + return true + } + } else { + return true + } + }) + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + + /** + * get data from input + */ + var { + title, + summaryTitle, + url, + isLocal, + index, + siteMap, + modelType, + } = req.body; + + /** + * get id + */ + var sliderId = req.params.id; + + var targetSlider = await Slider.findOne({ + _id: sliderId + }); + + /** check slider exist or not */ + if (!targetSlider) { + return res404(res, `اسلایدر مورد نظر پیدا نشد`); + } + + /** check access portal */ + if (!req.user.portals.includes(targetSlider.modelType)) { + return res500(res, `شما اجازه آپدیت این اسلایدر را ندارید`); + } + + if (targetSlider.title !== title) { + var checkDuppTitle = await Slider.findOne({ + title: title + }); + + if (checkDuppTitle) { + return res.status(422).json({ + validation: { + title: { + msg: _sr['fa'].duplicated.title + } + } + }); + } + } + + /** + * if we have pic upload to server + */ + if (req.files && req.files.cover) { + const image = req.files.cover; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { + cover: { + msg: _sr['fa'].format.image + } + } + }); + } + const imageName = `slider_${Date.now()}_${targetSlider._id}.${image.mimetype.split('/')[1]}`; + try { + const target = sharp(image.data) + await target + .resize(profileWidth, profileHeight, { + fit: 'cover' + }) + .jpeg({ + quality: profileQuality + }) + .toFile(`./static/uploads/images/slider/${imageName}`); + + /** + * if exist old pic delete it from file + */ + if (targetSlider.cover) { + var oldPic = `./static${targetSlider.cover}`; + + if (fs.existsSync(oldPic)) { + fs.unlink(oldPic, (err) => { + if (err) return res500(res, err?.message); + }); + } + } + + targetSlider.cover = imageName; + } catch (e) { + return res500(res, e?.message); + } + } + + targetSlider.title = title.trim(); + targetSlider.summaryTitle = summaryTitle.trim(); + targetSlider.url = url.trim(); + targetSlider.isLocal = isLocal + targetSlider.index = index; + targetSlider.siteMap = siteMap; + targetSlider.modelType = modelType; + + await targetSlider.save(); + + /** + * show result + */ + return res.json(targetSlider); + + } catch (error) { + return res500(res, error.message); + } + } +] + +module.exports.deletOneSlider = [ + async (req, res) => { + try { + var sliderId = req.params.id; + + var targetSlider = await Slider.findOne({ + _id: sliderId + }); + + /** check slider exist or not */ + if (!targetSlider) { + return res404(res, `اسلایدر مورد نظر پیدا نشد`); + } + + /** check access portal */ + if (!req.user.portals.includes(targetSlider.modelType)) { + return res500(res, `شما اجازه حذف این اسلایدر را ندارید`); + } + + if (targetSlider.cover) { + var oldPic = `./static${targetSlider.cover}`; + + if (fs.existsSync(oldPic)) { + fs.unlink(oldPic, (error) => { + if (error) return res500(res, error?.message); + }); + } + } + + /** delete slider */ + await targetSlider.deleteOne(); + + /** + * show result + */ + return res.json(targetSlider); + + } catch (error) { + /** + * if we got unkown error show to client + */ + res500(res, error); + } + } +] + +module.exports.getOneSlider = [ + async (req, res) => { + try { + var sliderId = req.params.id; + + var findQuery = { + _id: sliderId + }; + + var slider = await Slider.findOne(findQuery); + + if (!slider) { + return res404(res, `اسلایدر مورد نظر پیدا نشد`); + } + + /** check access portal */ + if (!req.user.portals.includes(slider.modelType)) { + return res.status(403).json({ + message: `شما اجازه دسترسی به اطلاعات این اسلایدر را ندارید` + }); + } + + /** + * show result + */ + return res.json(slider); + } catch (error) { + /** + * if we got unkown error show to client + */ + res500(res, error); + } + } +] + +module.exports.getAllSliderByAdmin = [ + async (req, res) => { + try { + + var findQuery = {}; + + if (req.user.portals.length) { + findQuery.modelType = { + $in: req.user.portals + }; + } + + /** get all slider */ + var allSlider = await Slider.find(findQuery).sort({ + _id: -1 + }); + + /** if null we have error */ + if (!allSlider) { + return res500(res, `مشکلی در گرفتن اطلاعات پیش آمده است`); + } + + /** show result to client */ + return res.json(allSlider); + } catch (error) { + /** if we have unkown error show it */ + return res500(res, error?.message); + } + } +] + +module.exports.search = [ + async (req, res) => { + try { + var findQuery = {}; + findQuery['$and'] = []; + findQuery['$or'] = []; + + if (req.user.portals.length) { + findQuery.modelType = { + $in: req.user.portals + }; + } + + var { + term, + portals, + galleryStatus, + publish, + galleryType, + date + } = req.body; + + /** search by term */ + if (term && !_.isEmpty(term)) { + findQuery['$or'].push( + { + title: { + $regex: '.*' + term + '.*' + }, + } + ); + } + /** search by galleryType */ + if (galleryType && !_.isEmpty(galleryType)) { + findQuery['$and'].push({ + galleryType + }); + } + /** search by publish */ + if (!_.isUndefined(publish) && _.isBoolean(publish)) { + findQuery['$and'].push({ + publish + }); + } + /** search by portals */ + if (portals && !_.isEmpty(portals)) { + findQuery['$and'].push({ + modelType: { + $in: portals + } + }) + } + /** search by galleryStatus */ + if (!_.isUndefined(galleryStatus) && _.isBoolean(galleryStatus)) { + findQuery['$and'].push({ + galleryStatus + }) + } + + /** search by date */ + if (date && !_.isEmpty(date)) { + if(date.length === 1){ + findQuery['$and'].push({ + created_at: { + $gte: moment(date[0]).startOf('days'), + $lt: moment(date[0]).endOf('days') + } + }); + }else{ + findQuery['$and'].push({ + created_at: { + $gte: new Date(date[0]), + $lt: new Date(date[1]) + } + }); + } + } + + _.isEmpty(findQuery['$and']) && delete findQuery['$and']; + _.isEmpty(findQuery['$or']) && delete findQuery['$or']; + + /** get gallery */ + var gallery = await Gallery.paginate(findQuery , {page : req.query.page , limit, populate : [{ + path : '_creator', + select : { + firstName: 1, + lastName: 1, + profilePic: 1 + } + }], + sort :{ + created_at: -1 + } + }); + + /** show result */ + return res.json(gallery); + } catch (error) { + return res500(res ,error?.message) + } + } +] + +/////////////////////////////////////////////////////////////////////// public +module.exports.getAllSliderByUser = [ + async (req, res) => { + try { + var { + portal, + } = req.query; + + var findQuery = {}; + + var setSort = {index : 1}; + + findQuery.modelType = !portal ? 'ostandari' : portal; + + var getSlider = await Slider.find(findQuery).sort(setSort); + + return res.json(getSlider); + } catch (error) { + return res500(res, error?.message); + } + } +] diff --git a/server/controllers/sliderController.js b/server/controllers/sliderController.js new file mode 100644 index 0000000..4f5892d --- /dev/null +++ b/server/controllers/sliderController.js @@ -0,0 +1,543 @@ +const Slider = require('../models/Slider'); +const { + body, + validationResult +} = require('express-validator'); +const sharp = require('sharp'); +const { + _sr +} = require('../plugins/serverResponses'); +const { + res404, + res500, + hasWhiteSpaces, + isLatinCharactersWithSymbol, + generateRandomDigits +} = require('../plugins/controllersHelperFunctions'); +const fs = require('fs'); + +////// variables +const profileWidth = 880; +const profileHeight = 450; +const profileQuality = 100; + + +/////////////////////////////////////////////////////////////////////// admin +module.exports.addSlider = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title), + + // body('summaryTitle') + // .notEmpty().withMessage(_sr['fa'].required.field), + + body('url') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('index') + .optional().isNumeric().withMessage(_sr['fa'].format.number), + + body('isLocal') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('siteMap') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('modelType') + .custom((value, { + req + }) => { + if (req.user.portals.join() === portal.join()) { + if (!portal.includes(value)) { + return Promise.reject(_sr['fa'].required.field); + } else { + return true + } + } else { + return true + } + }) + ], + async (req, res) => { + + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + var { + title, + summaryTitle, + isLocal, + url, + index, + siteMap, + modelType, + } = req.body; + + /** set portals */ + modelType = (req.user.portals.join() === portal.join()) ? modelType : req.user.portals[0]; + + const sliderData = { + title: title.trim(), + summaryTitle: summaryTitle.trim(), + url: url.trim(), + isLocal, + index, + siteMap, + _creator: req.user._id, + _updatedBy: req.user._id, + modelType, + }; + + var createSlider = await Slider.create(sliderData); + + if (!createSlider) { + res500(res, `error in add slider to data base`); + } + + /** + * if we have pic upload to server + */ + if (req.files && req.files.cover) { + const image = req.files.cover; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { + cover: { + msg: _sr['fa'].format.image + } + } + }); + } + const imageName = `slider_${Date.now()}_${createSlider._id}.${image.mimetype.split('/')[1]}`; + try { + const target = sharp(image.data) + await target + .resize(profileWidth, profileHeight, { + fit: 'cover' + }) + .jpeg({ + quality: profileQuality + }) + .toFile(`./static/uploads/images/slider/${imageName}`); + + createSlider.cover = imageName; + + await createSlider.save(); + } catch (e) { + return res500(res, e?.message); + } + } + + + /** + * show result + */ + return res.json(createSlider); + } catch (error) { + console.log(error); + /** + * if we got unkown error show to client + */ + res500(res, error.message); + } + } +] + +module.exports.updateSlider = [ + [ + body('title') + .notEmpty().withMessage(_sr['fa'].required.title), + + // body('summaryTitle') + // .notEmpty().withMessage(_sr['fa'].required.field), + + body('url') + .notEmpty().withMessage(_sr['fa'].required.field), + + body('isLocal') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('index') + .optional().isNumeric().withMessage(_sr['fa'].format.number), + + body('siteMap') + .optional().isBoolean().withMessage(_sr['fa'].format.boolean), + + body('modelType') + .custom((value, { + req + }) => { + if (req.user.portals.join() === portal.join()) { + if (!portal.includes(value)) { + return Promise.reject(_sr['fa'].required.field); + } else { + return true + } + } else { + return true + } + }) + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ + validation: errors.mapped() + }); + + try { + + /** + * get data from input + */ + var { + title, + summaryTitle, + url, + isLocal, + index, + siteMap, + modelType, + } = req.body; + + /** + * get id + */ + var sliderId = req.params.id; + + var targetSlider = await Slider.findOne({ + _id: sliderId + }); + + /** check slider exist or not */ + if (!targetSlider) { + return res404(res, `اسلایدر مورد نظر پیدا نشد`); + } + + /** check access portal */ + if (!req.user.portals.includes(targetSlider.modelType)) { + return res500(res, `شما اجازه آپدیت این اسلایدر را ندارید`); + } + + if (targetSlider.title !== title) { + var checkDuppTitle = await Slider.findOne({ + title: title + }); + + if (checkDuppTitle) { + return res.status(422).json({ + validation: { + title: { + msg: _sr['fa'].duplicated.title + } + } + }); + } + } + + /** + * if we have pic upload to server + */ + if (req.files && req.files.cover) { + const image = req.files.cover; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ + validation: { + cover: { + msg: _sr['fa'].format.image + } + } + }); + } + const imageName = `slider_${Date.now()}_${targetSlider._id}.${image.mimetype.split('/')[1]}`; + try { + const target = sharp(image.data) + await target + .resize(profileWidth, profileHeight, { + fit: 'cover' + }) + .jpeg({ + quality: profileQuality + }) + .toFile(`./static/uploads/images/slider/${imageName}`); + + /** + * if exist old pic delete it from file + */ + if (targetSlider.cover) { + var oldPic = `./static${targetSlider.cover}`; + + if (fs.existsSync(oldPic)) { + fs.unlink(oldPic, (err) => { + if (err) return res500(res, err?.message); + }); + } + } + + targetSlider.cover = imageName; + } catch (e) { + return res500(res, e?.message); + } + } + + targetSlider.title = title.trim(); + targetSlider.summaryTitle = summaryTitle.trim(); + targetSlider.url = url.trim(); + targetSlider.isLocal = isLocal + targetSlider.index = index; + targetSlider.siteMap = siteMap; + targetSlider.modelType = modelType; + + await targetSlider.save(); + + /** + * show result + */ + return res.json(targetSlider); + + } catch (error) { + return res500(res, error.message); + } + } +] + +module.exports.deletOneSlider = [ + async (req, res) => { + try { + var sliderId = req.params.id; + + var targetSlider = await Slider.findOne({ + _id: sliderId + }); + + /** check slider exist or not */ + if (!targetSlider) { + return res404(res, `اسلایدر مورد نظر پیدا نشد`); + } + + /** check access portal */ + if (!req.user.portals.includes(targetSlider.modelType)) { + return res500(res, `شما اجازه حذف این اسلایدر را ندارید`); + } + + if (targetSlider.cover) { + var oldPic = `./static${targetSlider.cover}`; + + if (fs.existsSync(oldPic)) { + fs.unlink(oldPic, (error) => { + if (error) return res500(res, error?.message); + }); + } + } + + /** delete slider */ + await targetSlider.deleteOne(); + + /** + * show result + */ + return res.json(targetSlider); + + } catch (error) { + /** + * if we got unkown error show to client + */ + res500(res, error); + } + } +] + +module.exports.getOneSlider = [ + async (req, res) => { + try { + var sliderId = req.params.id; + + var findQuery = { + _id: sliderId + }; + + var slider = await Slider.findOne(findQuery); + + if (!slider) { + return res404(res, `اسلایدر مورد نظر پیدا نشد`); + } + + /** check access portal */ + if (!req.user.portals.includes(slider.modelType)) { + return res.status(403).json({ + message: `شما اجازه دسترسی به اطلاعات این اسلایدر را ندارید` + }); + } + + /** + * show result + */ + return res.json(slider); + } catch (error) { + /** + * if we got unkown error show to client + */ + res500(res, error); + } + } +] + +module.exports.getAllSliderByAdmin = [ + async (req, res) => { + try { + + var findQuery = {}; + + if (req.user.portals.length) { + findQuery.modelType = { + $in: req.user.portals + }; + } + + /** get all slider */ + var allSlider = await Slider.find(findQuery).sort({ + index: 1 + }); + + /** if null we have error */ + if (!allSlider) { + return res500(res, `مشکلی در گرفتن اطلاعات پیش آمده است`); + } + + /** show result to client */ + return res.json(allSlider); + } catch (error) { + /** if we have unkown error show it */ + return res500(res, error?.message); + } + } +] + +module.exports.search = [ + async (req, res) => { + try { + var findQuery = {}; + findQuery['$and'] = []; + findQuery['$or'] = []; + + if (req.user.portals.length) { + findQuery.modelType = { + $in: req.user.portals + }; + } + + var { + term, + portals, + galleryStatus, + publish, + galleryType, + date + } = req.body; + + /** search by term */ + if (term && !_.isEmpty(term)) { + findQuery['$or'].push( + { + title: { + $regex: '.*' + term + '.*' + }, + } + ); + } + /** search by galleryType */ + if (galleryType && !_.isEmpty(galleryType)) { + findQuery['$and'].push({ + galleryType + }); + } + /** search by publish */ + if (!_.isUndefined(publish) && _.isBoolean(publish)) { + findQuery['$and'].push({ + publish + }); + } + /** search by portals */ + if (portals && !_.isEmpty(portals)) { + findQuery['$and'].push({ + modelType: { + $in: portals + } + }) + } + /** search by galleryStatus */ + if (!_.isUndefined(galleryStatus) && _.isBoolean(galleryStatus)) { + findQuery['$and'].push({ + galleryStatus + }) + } + + /** search by date */ + if (date && !_.isEmpty(date)) { + if (date.length === 1) { + findQuery['$and'].push({ + created_at: { + $gte: moment(date[0]).startOf('days'), + $lt: moment(date[0]).endOf('days') + } + }); + } else { + findQuery['$and'].push({ + created_at: { + $gte: new Date(date[0]), + $lt: new Date(date[1]) + } + }); + } + } + + _.isEmpty(findQuery['$and']) && delete findQuery['$and']; + _.isEmpty(findQuery['$or']) && delete findQuery['$or']; + + /** get gallery */ + var gallery = await Gallery.paginate(findQuery, { + page: req.query.page, limit, populate: [{ + path: '_creator', + select: { + firstName: 1, + lastName: 1, + profilePic: 1 + } + }], + sort: { + index: -1 + } + }); + + /** show result */ + return res.json(gallery); + } catch (error) { + return res500(res, error?.message) + } + } +] + +/////////////////////////////////////////////////////////////////////// public +module.exports.getAllSliderByUser = [ + async (req, res) => { + try { + let { + portal, + } = req.query; + + let findQuery = {}; + + let setSort = {index: -1}; + + findQuery.modelType = !portal ? 'ostandari' : portal; + + let getSlider = await Slider.find(findQuery).sort(setSort); + + return res.json(getSlider); + } catch (error) { + return res500(res, error?.message); + } + } +] diff --git a/server/controllers/userController.js b/server/controllers/userController.js new file mode 100644 index 0000000..38e63f4 --- /dev/null +++ b/server/controllers/userController.js @@ -0,0 +1,1187 @@ +const User = require('../models/User'); +const {body, validationResult} = require('express-validator'); +const bcrypt = require('bcryptjs'); +const jwt = require('jsonwebtoken'); +const crypto = require('crypto'); +const sharp = require('sharp'); +const {secretKey} = require('./../authentication'); +const {_sr} = require('../plugins/serverResponses'); +const {res404, res500, hasWhiteSpaces, isLatinCharactersWithSymbol, generateRandomDigits} = require('../plugins/controllersHelperFunctions'); +const fs = require('fs'); +const nodemailer = require('nodemailer'); +const Category = require('../models/Category'); +const Logger = require('../models/Logger') +////// variables +const profileWidth = 500; +const profileHeight = 500; +const profileQuality = 100; +const hostURL = 'localhost:6688'; +const limit = 20; +const select = '-password -token'; + +/** @todo add private to query */ + +/** auth --------------------------------------------- */ +/////////////////////////////////////////////////////////////////////// login +module.exports.login = [ + [ + body('username') + .if((value, {req}) => { + return req.body.password && req.body.password.length >= 4 + }) + .custom((value, {req}) => { + var test = value; + return User.findOne({username: value}) + .then(user => { + if (!user) return Promise.reject(_sr['fa'].not_found.password) + else return true + }) + }), + + body('password') + .notEmpty().withMessage(_sr['fa'].required.password) + .bail() + .isLength({min: 4}).withMessage(_sr['fa'].min_char.min4), + + body('remember_me') + .exists().withMessage(_sr['fa'].required.remember_me) + .bail() + .isBoolean().withMessage(_sr['fa'].format.boolean) + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({validation: errors.mapped()}) + + try { + var {username, password, remember_me} = req.body; + + /** get user */ + var user = await User.findOne({$or: [{username: username}, {email: username}]}); + const logger = await Logger.findOne({user:user._id}) + if (!user.registration_done) { + return res.status(403).json({message: `اکانت شما غیرفعال می باشد لطفا با ادمین تماس بگیرید`}); + } + const isMatch = await bcrypt.compare(password,user.password) + + /**check user */ + if (user) { + /** check password */ + + if (isMatch) { + if(logger){ + await Logger.findOneAndUpdate({user:user._id},{$set:{LastLogin:new Date()}},{new:true}) + }else { + const newLogger = new Logger({ + user:user, + LastLogin:new Date() + }) + await newLogger.save(); + } + /** if have token and it true show result else generate new token */ + if (user.token) { + jwt.verify(user.token.replace(/^Bearer\s/, ''), secretKey, async (err, decoeded) => { + if (err || !decoeded) { + /** generate new token */ + var token = await jwt.sign({_id: user._id}, secretKey, {expiresIn: remember_me ? '7d' : '1h'}); + user.token = token; + await user.save(); + return res.json({token: user.token}); + } else { + return res.json({token: user.token}); + } + }); + } else { + /** generate new token */ + var token = await jwt.sign({_id: user._id}, secretKey, {expiresIn: remember_me ? '7d' : '1h'}); + user.token = token; + await user.save(); + return res.json({token: user.token}); + } + } else { + return res.status(422).json({validation: {username: {msg: _sr['fa'].not_found.password}}}); + } + } else { + return res.status(422).json({validation: {username: {msg: _sr['fa'].not_found.password}}}); + } + } catch (error) { + return res500(res, error?.message); + } + } +] + +/////////////////////////////////////////////////////////////////////// logout +module.exports.logout = [ + async (req, res) => { + const token = req.headers.authorization?.replace(/^Bearer\s/, ''); + if (token) { + User.findOneAndUpdate({token: token}, {token: null}, (err, oldData) => { + if (err || !oldData) res.status(401).json({message: 'Your not logged in'}) + else return res.json({message: 'You are logged out.'}) + }) + } else { + return res.status(401).json({message: 'Your not logged in'}) + } + } +] + +/////////////////////////////////////////////////////////////////////// get user +module.exports.getuser = [ + async (req, res) => { + const token = req.headers.authorization?.replace(/^Bearer\s/, ''); + // check if token is not destroyed + var user = await User.findOne({token: token}).select('-password'); + + if (!user) { + return res.status(401).json({message: 'unauthorized'}); + } + + if (!user.registration_done) { + return res.status(401).json({message: `اکانت شما غیرفعال می باشد لطفا با ادمین تماس بگیرید`}); + } + + //verifies secret and checks if the token is expired + try { + var checkToken = await jwt.verify(user.token.replace(/^Bearer\s/, ''), secretKey); + + if (!checkToken) { + return res.status(401).json({message: 'unauthorized'}); + } + + return res.json({user: user}); + } catch (error) { + return res.status(401).json({message: 'unauthorized'}); + } + } +] + +/** end auth --------------------------------------------- */ + +/////////////////////////////////////////////////////////////////////// admin +module.exports.registerAdmin = [ + [ + body('firstName') + .notEmpty().withMessage(_sr['fa'].required.first_name), + + body('lastName') + .notEmpty().withMessage(_sr['fa'].required.last_name), + + body('mobileNumber') + .if((value, {req}) => { + return req.body.mobileNumber + }) + .custom((value, {req}) => { + if (!_.isEmpty(value) && !lodash.isNumeric(value)) { + return Promise.reject(_sr['fa'].format.number); + } + return User.findOne({mobileNumber: value}) + .then(user => { + if (user) return Promise.reject(_sr['fa'].duplicated.phoneNumber); + else return true + }) + }), + + // body('email') + // .optional().isEmail().withMessage(_sr['fa'].format.email) + // .if((value, {req}) => { + // return req.body.email + // }) + // .custom((value, {req}) => { + // return User.findOne({email: value}) + // .then(user => { + // if (user) return Promise.reject(_sr['fa'].duplicated.email) + // else return true + // }) + // }), + + body('username') + .isLength({min: 4}).withMessage(_sr['fa'].min_char.min4) + .bail() + .custom((value, {req}) => { + if (hasWhiteSpaces(value)) return Promise.reject(_sr['fa'].response.whiteSpace) + else return true + }) + .bail() + .custom((value, {req}) => { + if (!isLatinCharactersWithSymbol(value)) return Promise.reject(_sr['fa'].response.latinChar) + else return true + }) + .bail() + .custom((value, {req}) => { + return User.findOne({username: value}) + .then(user => { + if (user) return Promise.reject(_sr['fa'].duplicated.username) + else return true + }) + }), + + body('password') + .isLength({min: 4}).withMessage(_sr['fa'].min_char.min4) + .custom((value, {req}) => { + if (value === req.body.password_confirmation) return Promise.resolve() + else return Promise.reject(_sr['fa'].response.passwords_not_match) + }), + + body('permissions') + .if((value, {req}) => { + return req.body.specialPermissions; + }) + .custom((value, {req}) => { + var permission = _.isString(value) ? JSON.parse(value) : value; + if (!_.isArray(permission)) { + return Promise.reject(`این فیلد باید از نوع آرایه باشد`); + } + + if (!permission.length) { + return Promise.reject(`شما باید یک دسترسی انتخاب کنید`); + } + + if (permission.length && !permission.includes('superAdmin') && (!permission.includes('news') && !permission.includes('categories'))) { + return Promise.reject(`شما باید همراه با دسترسی مخصوص، دسترسی مدیریت صفحات یا اخبار را ارسال کنید`); + } else { + return true + } + }), + + + body('specialPermissions') + .optional() + .custom((value, {req}) => { + var specialPermissions = _.isString(value) && !_.isEmpty(value) ? JSON.parse(value) : value; + if (!_.isArray(specialPermissions)) { + return Promise.reject(`این فیلد باید از نوع آرایه باشد`); + } + + return true + }), + + body('portals') + .custom((value, {req}) => { + var portals = _.isString(value) ? JSON.parse(value) : value; + if (!_.isArray(portals)) { + return Promise.reject(`این فیلد باید از نوع آرایه باشد`); + } + + if (!portals.length) { + return Promise.reject(`شما باید محدوده دسترسی را مشخص کنید`); + } + + let isValid = portals.every((item) => { + return portal.includes(item); + }); + + if (isValid) { + return true; + } else { + return Promise.reject(`${_sr['fa'].optional.onlyValid} => ${portal}`); + } + }), + + body('registration_done') + .isBoolean().withMessage(_sr['fa'].format.boolean), + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({validation: errors.mapped()}) + + try { + var { + username, + password, + firstName, + lastName, + email, + mobileNumber, + permissions, + specialPermissions, + registration_done, + portals + } = req.body; + + /** this code fix problem with array in form data */ + permissions = _.isString(permissions) ? JSON.parse(permissions) : permissions; + specialPermissions = _.isString(specialPermissions) ? JSON.parse(specialPermissions) : specialPermissions; + portals = _.isString(portals) ? JSON.parse(portals) : portals; + + var data = { + username, + firstName, + lastName, + email, + mobileNumber, + permissions, + registration_done, + private: false, + _creator: req.user?._id || null, + _updatedBy: req.user?._id || null, + specialPermissions: permissions.includes('superAdmin') ? [] : specialPermissions, + portals: [...new Set(portals)] + }; + + /** + * if we have pic upload to server + */ + if (req.files && req.files.profilePic) { + const image = req.files.profilePic; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({validation: {profilePic: {msg: _sr['fa'].format.image}}}); + } + const imageName = 'user_' + Date.now() + '_' + username + '.' + image.mimetype.split('/')[1]; + data.profilePic = imageName + try { + const target = sharp(image.data) + await target + .resize(profileWidth, profileHeight, { + fit: 'cover' + }) + .jpeg({ + quality: profileQuality + }) + .toFile(`./static/uploads/images/users/${imageName}`) + } catch (e) { + return res500(res, e?.message) + } + } + + /** + * generate salt + */ + var salt = bcrypt.genSaltSync(10); + + /** + * hash password with salt + */ + var hashPassword = bcrypt.hashSync(password, salt); + + if (!hashPassword) { + return res500(res, `error in hash`); + } + + data.password = hashPassword; + + /** + * create new admin + */ + const newAdmin = await User.create(data); + + /** + * if we have error show him + */ + if (!newAdmin) { + return res500(`error in register admin`); + } + + /** + * show result + */ + return res.status(201).json({ + message: _sr['fa'].response.success_save + }) + + } catch (error) { + return res500(res, error?.message); + } + } +] + +/////////////////////////////////////////////////////////////////////// get user +module.exports.getUserByAdmin = [ + async (req, res) => { + try { + const userId = req.params.id; + + /** get one user */ + const user = await User.findById(userId).populate('specialPermissions').select(select); + + /** if not exist show message to client */ + if (!user) { + return res404(res, `کاربر مورد نظر پیدا نشد`); + } + + /** show result */ + return res.json(user); + + } catch (error) { + res500(res, error?.message); + } + } +] + +/////////////////////////////////////////////////////////////////////// get all user +module.exports.getAllUsers = [ + async (req, res) => { + try { + + /** get all user */ + const users = await User.paginate({private: false}, {page: req.query.page, limit, select}); + + /** if not exist show message to client */ + if (!users) { + return res500(res, `مشکلی در گرفتن اطلاعات پیش آمده لطفا دوباره تلاش کنید`); + } + + /** show result */ + return res.json(users); + + } catch (error) { + return res500(res, error?.message); + } + } +] + +module.exports.changeUserStatus = [ + async (req, res) => { + try { + + const userId = req.params.id + + let user = await User.findOne({private: false , _id : userId}); + + if (!user) { + return res404(res, `کاربر مورد نظر پیدا نشد`); + } + + user.registration_done = !user.registration_done; + + user.save(); + + /** show result */ + return res.json(_sr['fa'].response.success_save); + + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست شما بوجود امده است`); + } + } +] + +/////////////////////////////////////////////////////////////////////// delete one user +module.exports.deleteOneUser = [ + async (req, res) => { + try { + const userId = req.params.id; + + /** get one user */ + const user = await User.findOne({_id: userId}); + + /** if not exist show message to client */ + if (!user) { + return res404(res, `کاربر مورد نظر پیدا نشد`); + } + + if (user.private) { + return res.status(403).json({message: `شما نمیتوانید این کاربر را حذف کنید`}); + } + + /** + * if exist old pic delete it from file + */ + if (user.profilePic) { + var oldPic = `./static${user.profilePic}`; + + if (fs.existsSync(oldPic)) { + fs.unlink(oldPic, (err) => { + if (err) return res500(res, err?.message); + }); + } + } + + /** delete user */ + await user.deleteOne(); + + /** show result */ + return res.json(user); + + } catch (error) { + res500(res, error?.message); + } + } +] + +/////////////////////////////////////////////////////////////////////// update user +module.exports.updateUser = [ + [ + body('firstName') + .notEmpty().withMessage(_sr['fa'].required.first_name), + + body('lastName') + .notEmpty().withMessage(_sr['fa'].required.last_name), + + body('mobileNumber') + .if((value, {req}) => { + return req.body.mobileNumber + }) + .custom((value, {req}) => { + if (!_.isEmpty(value) && !lodash.isNumeric(value)) { + return Promise.reject(_sr['fa'].format.number); + } + return true; + }), + + // body('email') + // .optional().isEmail().withMessage(_sr['fa'].format.email), + + body('permissions') + .if((value, {req}) => { + return req.body.specialPermissions; + }) + .custom((value, {req}) => { + let permission = _.isString(value) ? JSON.parse(value) : value; + let specialPermissions = _.isString(req.body.specialPermissions) ? JSON.parse(req.body.specialPermissions) : req.body.specialPermissions; + if (!_.isArray(permission)) { + return Promise.reject(`این فیلد باید از نوع آرایه باشد`); + } + + if (!permission.length) { + return Promise.reject(`شما باید یک دسترسی انتخاب کنید`); + } + + if (specialPermissions.length !== 0 && !permission.includes('superAdmin') && (!permission.includes('news') && !permission.includes('categories'))) { + return Promise.reject(`شما باید همراه با دسترسی مخصوص، دسترسی مدیریت صفحات یا اخبار را ارسال کنید`); + } else { + return true + } + }), + + + body('specialPermissions') + .optional() + .custom((value, {req}) => { + var specialPermissions = _.isString(value) && !_.isEmpty(value) ? JSON.parse(value) : value; + if (!_.isArray(specialPermissions)) { + return Promise.reject(`این فیلد باید از نوع آرایه باشد`); + } + + return true + }), + + body('portals') + .custom((value, {req}) => { + var portals = _.isString(value) ? JSON.parse(value) : value; + if (!_.isArray(portals)) { + return Promise.reject(`این فیلد باید از نوع آرایه باشد`); + } + + if (!portals.length) { + return Promise.reject(`شما باید محدوده دسترسی را مشخص کنید`); + } + + let isValid = portals.every((item) => { + return portal.includes(item); + }); + + if (isValid) { + return true; + } else { + return Promise.reject(`${_sr['fa'].optional.onlyValid} => ${portal}`); + } + }), + + body('registration_done') + .isBoolean().withMessage(_sr['fa'].format.boolean), + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({validation: errors.mapped()}) + + try { + const userId = req.params.id; + + var { + firstName, + lastName, + email, + mobileNumber, + permissions, + specialPermissions, + registration_done, + portals + } = req.body; + + /** this code fix problem with array in form data */ + permissions = _.isString(permissions) ? JSON.parse(permissions) : permissions; + specialPermissions = _.isString(specialPermissions) ? JSON.parse(specialPermissions) : specialPermissions; + portals = _.isString(portals) ? JSON.parse(portals) : portals; + + /** get one user */ + var user = await User.findById(userId); + + /** if not exist show message to client */ + if (!user) { + return res404(res, `کاربر مورد نظر پیدا نشد`); + } + + if (!user.private && !req.user.private) { + return res.status(403).json({message: `شما نمیتوانید این کاربر را آپدیت کنید`}); + } + + /** check new email is dupllicate or not */ + if (user.email !== email) { + var checkDupplicate = await User.find({email: email}); + + if (checkDupplicate.length) { + return res.status(422).json({validation: {email: {msg: `${_sr['fa'].duplicated.email}`}}}); + } + } + /** check new mobileNumber is dupllicate or not */ + if (user.mobileNumber !== mobileNumber) { + var checkDupplicate = await User.find({mobileNumber: mobileNumber}); + + if (checkDupplicate.length) { + return res.status(422).json({validation: {mobileNumber: {msg: `${_sr['fa'].duplicated.phoneNumber}`}}}); + } + } + + user.firstName = firstName; + user.lastName = lastName; + user.password = user.password; + user.scope = user.scope; + user.token = user.token; + user.mobileNumber = mobileNumber; + user.email = email; + user.registration_done = registration_done; + user._creator = req.user._id; + user.username = user.username; + user.permissions = permissions; + user.specialPermissions = permissions?.includes('superAdmin') ? [] : specialPermissions; + user.private = user.private; + user.portals = [...new Set(portals)] + + if (req.files && req.files.profilePic) { + const image = req.files.profilePic; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({validation: {profilePic: {msg: _sr['fa'].format.image}}}); + } + const imageName = 'user_' + Date.now() + '_' + user.username + '.' + image.mimetype.split('/')[1]; + + try { + const target = sharp(image.data) + await target + .resize(profileWidth, profileHeight, { + fit: 'cover' + }) + .jpeg({ + quality: profileQuality + }) + .toFile(`./static/uploads/images/users/${imageName}`); + + /** + * if exist old pic delete it from file + */ + if (user.profilePic) { + var oldPic = `./static${user.profilePic}`; + + if (fs.existsSync(oldPic)) { + fs.unlink(oldPic, (err) => { + if (err) return res500(res, err?.message); + }); + } + } + + } catch (e) { + return res500(res, e?.message); + } + + user.profilePic = imageName; + } + + await user.save(); + + /** show result */ + return res.json(user); + + } catch (error) { + res500(res, error?.message); + } + } +] + +/////////////////////////////////////////////////////////////////////// change password +module.exports.changePassword = [ + [ + body('password') + .isLength({min: 4}).withMessage(_sr['fa'].min_char.min4) + .custom((value, {req}) => { + if (value === req.body.password_confirmation) return Promise.resolve() + else return Promise.reject(_sr['fa'].response.passwords_not_match) + }), + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({validation: errors.mapped()}) + + try { + const userId = req.params.id; + + const password = req.body.password; + + /** get one user */ + var user = await User.findById(userId); + + /** if not exist show message to client */ + if (!user) { + return res404(res, `کاربر مورد نظر پیدا نشد`); + } + + if (!user.private && !req.user.private) { + return res.status(403).json({message: `شما نمی توانید رمز عبور این کاربر را تغییر دهید`}); + } + + /** + * generate salt + */ + var salt = bcrypt.genSaltSync(10); + + /** + * hash password with salt + */ + var hashPassword = bcrypt.hashSync(password, salt); + + if (!hashPassword) { + return res500(res, `error in hash`); + } + + user.password = hashPassword; + user.token = null + + await user.save(); + + /** show result */ + return res.json({message: _sr['fa'].response.success_save}); + + } catch (error) { + res500(res, error?.message); + } + } +] + +/////////////////////////////////////////////////////////////////////// get profile(get self) +module.exports.getProfile = [ + async (req, res) => { + try { + const userId = req.user._id; + + /** get one user */ + const user = await User.findById(userId).select(select); + + /** if not exist show message to client */ + if (!user) { + return res404(res, `کاربر مورد نظر پیدا نشد`); + } + + /** show result */ + return res.json(user); + + } catch (error) { + res500(res, error?.message); + } + } +] + +/////////////////////////////////////////////////////////////////////// update profile(get self) +module.exports.updateProfile = [ + [ + body('firstName') + .notEmpty().withMessage(_sr['fa'].required.first_name), + + body('lastName') + .notEmpty().withMessage(_sr['fa'].required.last_name), + + body('mobileNumber') + .isNumeric().withMessage(_sr['fa'].format.number), + + // body('email') + // .isEmail().withMessage(_sr['fa'].format.email), + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({validation: errors.mapped()}) + + try { + const userId = req.user._id; + + const { + firstName, + lastName, + email, + mobileNumber, + } = req.body; + + /** get one user */ + var user = await User.findById(userId); + + /** if not exist show message to client */ + if (!user) { + return res404(res, `کاربر مورد نظر پیدا نشد`); + } + + /** check new email is dupllicate or not */ + if (user.email != email) { + var checkDupplicate = await User.find({email: email}); + + if (checkDupplicate.length) { + return res.status(422).json({validation: {email: {msg: `${_sr['fa'].duplicated.email}`}}}); + } + } + /** check new mobileNumber is dupllicate or not */ + if (user.mobileNumber != mobileNumber) { + var checkDupplicate = await User.find({mobileNumber: mobileNumber}); + + if (checkDupplicate.length) { + return res.status(422).json({validation: {mobileNumber: {msg: `${_sr['fa'].duplicated.phoneNumber}`}}}); + } + } + + user.firstName = firstName; + user.lastName = lastName; + user.password = user.password; + user.scope = user.scope; + user.token = user.token; + user.mobileNumber = mobileNumber; + user.email = email; + user.registration_done = user.registration_done; + user._creator = req.user._id; + user.username = user.username; + user.permissions = user.permissions; + user.specialPermissions = user.specialPermissions; + user.private = user.private; + + /** if exist a picture */ + if (req.files && req.files.profilePic) { + const image = req.files.profilePic; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({validation: {profilePic: {msg: _sr['fa'].format.image}}}); + } + const imageName = 'user_' + Date.now() + '_' + user.username + '.' + image.mimetype.split('/')[1]; + + try { + const target = sharp(image.data) + await target + .resize(profileWidth, profileHeight, { + fit: 'cover' + }) + .jpeg({ + quality: profileQuality + }) + .toFile(`./static/uploads/images/users/${imageName}`); + + /** + * if exist old pic delete it from file + */ + if (user.profilePic) { + var oldPic = `./static${user.profilePic}`; + + if (fs.existsSync(oldPic)) { + fs.unlink(oldPic, (err) => { + if (err) return res500(res, err?.message); + }); + } + } + + } catch (e) { + return res500(res, e?.message); + } + + user.profilePic = imageName; + } + + await user.save(); + + /** show result */ + return res.json(user); + + } catch (error) { + res500(res, error?.message); + } + } +] + +/////////////////////////////////////////////////////////////////////// change password (profile) +module.exports.changePasswordProfile = [ + [ + body('password') + .isLength({min: 4}).withMessage(_sr['fa'].min_char.min4) + .custom((value, {req}) => { + if (value === req.body.password_confirmation) return Promise.resolve() + else return Promise.reject(_sr['fa'].response.passwords_not_match) + }), + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({validation: errors.mapped()}) + + try { + const userId = req.user._id; + + const password = req.body.password; + + /** get one user */ + var user = await User.findById(userId); + + /** if not exist show message to client */ + if (!user) { + return res404(res, `کاربر مورد نظر پیدا نشد`); + } + + /** + * generate salt + */ + var salt = bcrypt.genSaltSync(10); + + /** + * hash password with salt + */ + var hashPassword = bcrypt.hashSync(password, salt); + + if (!hashPassword) { + return res500(res, `مشکلی در تغییر پسورد پیش آمده است`); + } + + user.password = hashPassword; + user.token = null + + await user.save(); + + /** show result */ + return res.json({message: _sr['fa'].response.success_save}); + + } catch (error) { + res500(res, error?.message); + } + } +] + +/////////////////////////////////////////////////////////////////////// forget password generate token +module.exports.forgetPassGenerateToken = [ + [ + body('email') + .optional().isEmail().withMessage(_sr['fa'].format.email) + .if((value, {req}) => { + return req.body.email + }) + .custom((value, {req}) => { + return User.findOne({email: value}) + .then(user => { + if (!user) return Promise.reject(_sr['fa'].not_found.email) + else return true + }) + }), + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({validation: errors.mapped()}) + + try { + const email = req.body.email; + + /** get one user */ + var user = await User.findOne({email: email}); + + /** if not exist show message to client */ + if (!user) { + return res404(res, `کابر مورد نظر پیدا نشد`); + } + + const token = crypto.randomBytes(20).toString('hex'); + + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + let transporter = nodemailer.createTransport({ + host: "www.rubynaturalco.com", + port: 587, + secure: false, // true for 465, false for other ports + auth: { + user: 'recovery@rubynaturalco.com', + pass: 'jd-m2?3ao?b(' + }, + tls: { + rejectUnauthorized: false + } + }) + + const emailHTMLTemplate = ` +
+
+

برای بازیابی کلمه عبور خود روی لینک زیر کلیک کنید.

+ +
+ ${Date.now()} +
+ ` + + // send mail with defined transport object + let info = await transporter.sendMail({ + from: '"Ostandari Portal" ', // sender address + to: user.email, // list of receivers + subject: 'لینک بازیابی کلمه عبور', + text: 'کلمه عبور خود را بازیابی کنید', + html: emailHTMLTemplate + }); + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + user.token = token; + + + await user.save(); + + /** show result */ + return res.json(token); + + } catch (error) { + res500(res, error?.message); + } + } +] + +/////////////////////////////////////////////////////////////////////// forget password get token and change pass +module.exports.forgetPassGetToken = [ + [ + body('password') + .isLength({min: 4}).withMessage(_sr['fa'].min_char.min4) + .custom((value, {req}) => { + if (value === req.body.password_confirmation) return Promise.resolve() + else return Promise.reject(_sr['fa'].response.passwords_not_match) + }), + ], + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({validation: errors.mapped()}); + + try { + var token = req.params.token; + + var password = req.body.password; + + var user = await User.findOne({token: token}); + + if (!user) { + return res500(res, _sr['fa'].response.expired_reset_link); /** @todo change response */ + } + + /** + * generate salt + */ + var salt = bcrypt.genSaltSync(10); + + /** + * hash password with salt + */ + var hashPassword = bcrypt.hashSync(password, salt); + + if (!hashPassword) { + return res500(res, `مشکلی در تغییر رمز عبور پیش آمده است`); /** @todo change response */ + } + + user.password = hashPassword; + user.token = null; + + await user.save(); + + /** show result */ + return res.json({message: _sr['fa'].response.success_save}); + + } catch (error) { + res500(res, error?.message); + } + } +] + +////////////////////////////////////////////////////////////////////// search +module.exports.search = [ + async (req, res) => { + try { + var query = {private: false}; + query['$and'] = []; + + var { + name, + email, + phone, + permissions, + specialPermissions, + portals, + status, + username + } = req.body; + + /** search by name and family */ + if (name && !_.isEmpty(name)) { + query['$and'].push({ + $or: [{ + firstName: { + $regex: '.*' + name + '.*' + }, + lastName: { + $regex: '.*' + name + '.*' + } + }] + }); + } + /** search by email */ + if (email && !_.isEmpty(email)) { + query['$and'].push({ + email: email + }); + } + /** search by phone */ + if (phone && !_.isEmpty(phone)) { + query['$and'].push({ + mobileNumber: phone + }); + } + /** search by permissions */ + if (permissions && !_.isEmpty(permissions)) { + query['$and'].push({ + permissions: { + $in: permissions + } + }); + } + /** search by specialPermissions */ + if (specialPermissions && !_.isEmpty(specialPermissions)) { + query['$and'].push({ + specialPermissions: { + $in: specialPermissions + } + }); + } + /** search by portals */ + if (portals && !_.isEmpty(portals)) { + query['$and'].push({ + portals: { + $in: portals + } + }) + } + /** search by status */ + if (!_.isUndefined(status) && _.isBoolean(status)) { + query['$and'].push({ + registration_done: status + }) + } + /** search by username */ + if (username && !_.isEmpty(username)) { + query['$and'].push({ + username: username + }); + } + + _.isEmpty(query['$and']) && delete query['$and']; + // _.isEmpty(input['$or']) && delete input['$or']; + + /** get users */ + var users = await User.paginate(query, {page: req.query.page, limit, select}); + + /** show result */ + return res.json(users); + } catch (error) { + return res500(res, error?.message); + } + } +] diff --git a/server/controllers/yearBannerController.js b/server/controllers/yearBannerController.js new file mode 100644 index 0000000..71aa1e5 --- /dev/null +++ b/server/controllers/yearBannerController.js @@ -0,0 +1,142 @@ +const YearBanner = require('../models/YearBanner'); +const {body, validationResult, checkSchema} = require('express-validator'); +const {_sr} = require('../plugins/serverResponses'); +const {res404, res500} = require('../plugins/controllersHelperFunctions'); +const fs = require('fs'); +const sharp = require('sharp'); + +////// variables +const yearBannerWidth = 1920 +const yearBannerHeight = 160 +const yearBannerQuality = 100 + + +module.exports.updateYearBanner = [ + checkSchema({ + iranFlag: { + optional: true, + isBoolean: true, + errorMessage: _sr['fa'].format.boolean + } + }), + async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({validation: errors.mapped()}); + + try { + /** + * get data from input + */ + const { + iranFlag, + electionBtn, + hasEmail, + hasGPlus, + hasTweeter, + hasInstagram, + email, + gPlus, + tweeter, + instagram + } = req.body + + const yearBanner = await YearBanner.findOne(); + + let imageName + if (req.files?.mainCover) { + const image = req.files.mainCover; + if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({validation: {cover: {msg: _sr['fa'].format.image}}}); + } + + imageName = `mainPage_cover.jpg`; + + const target = sharp(image.data) + await target + .resize(yearBannerWidth, yearBannerHeight, {fit: 'cover'}) + .toFormat('jpg') + .jpeg({quality: yearBannerQuality}) + .toFile(`./static/uploads/images/mainCover/${imageName}`); + } + + if (yearBanner) { + yearBanner.iranFlag = iranFlag; + yearBanner.electionBtn = electionBtn; + // footerOptions + yearBanner.hasEmail = hasEmail; + yearBanner.hasGPlus = hasGPlus; + yearBanner.hasTweeter = hasTweeter; + yearBanner.hasInstagram = hasInstagram; + yearBanner.email = email; + yearBanner.gPlus = gPlus; + yearBanner.tweeter = tweeter; + yearBanner.instagram = instagram; + + if (req.files?.mainCover) yearBanner.mainCover = imageName; + yearBanner._updatedBy = req.user._id; + + await yearBanner.save(); + + return res.json({message: _sr['fa'].response.success_save}); + } else { + const data = { + iranFlag, + electionBtn, + hasEmail, + hasGPlus, + hasTweeter, + hasInstagram, + email, + gPlus, + tweeter, + instagram, + _updatedBy: req.user._id + } + if (req.files?.mainCover) data.mainCover = imageName; + await YearBanner.create(data); + return res.json({message: _sr['fa'].response.success_save}); + } + + } catch (error) { + return res500(res, `مشکلی در اجرای درخواست پیش آمده است`); + } + } +] + +module.exports.getYearBanner = [ + async (req, res) => { + try { + /** + * get getYearBanner + */ + const getYearBanner = await YearBanner.findOne(); + + /** + * if not exist + */ + if (!getYearBanner) return res.json({ + mainCover: '', + iranFlag: true, + electionBtn: true, + hasEmail: true, + hasGPlus: true, + hasTweeter: true, + hasInstagram: true, + email: '', + gPlus: '', + tweeter: '', + instagram: '' + }); + + /** + * show result + */ + return res.json(getYearBanner); + } catch (error) { + /** + * if we got unkown error show to client + */ + return res500(res, `مشکلی در اجرای درخواست شما پیش آمده است`); + } + } +] diff --git a/server/database.js b/server/database.js new file mode 100644 index 0000000..33574f3 --- /dev/null +++ b/server/database.js @@ -0,0 +1,32 @@ +const mongoose = require('mongoose') +const databaseURL = require('./databaseURL') + +mongoose.plugin(schema => { + schema.set('toObject', { + getters: true + }) + schema.set('toJSON', { + getters: true + }) + schema.set('timestamps', { + createdAt: 'created_at', + updatedAt: 'updated_at' + }) +}) + + +// mongodb database connection string. change it as per your needs. here "mydb" is the name of the database. You don't need to create DB from mongodb terminal. mongoose create the database automatically. +mongoose.connect(databaseURL, { + useNewUrlParser: true, + useUnifiedTopology: true, + useFindAndModify: false, + useCreateIndex: true +}) + +const database = mongoose.connection +database.on('error', console.error.bind(console, 'connection error:')) +database.once('open', function callback() { + console.log("MongoDB Connected...") +}) + +module.exports = database diff --git a/server/databaseURL.js b/server/databaseURL.js new file mode 100644 index 0000000..9603032 --- /dev/null +++ b/server/databaseURL.js @@ -0,0 +1,14 @@ +// const databaseURL = 'mongodb://ostandari:ali09186206935@cluster0-shard-00-00.4bq1y.azure.mongodb.net:27017,cluster0-shard-00-01.4bq1y.azure.mongodb.net:27017,cluster0-shard-00-02.4bq1y.azure.mongodb.net:27017/ostandari?ssl=true&replicaSet=atlas-qfv5i1-shard-0&authSource=admin&retryWrites=true&w=majority' + +// const databaseURL = 'mongodb://ostanmri_ostan:admin1234@localhost:27017/ostanmri_portal' + +// const databaseURL = 'mongodb://localhost:27017/ostanDariPortal' + +// const databaseURL = 'mongodb://ostanmri_user:admin1234@localhost:27017/ostanmri_database' +const databaseURL = + "mongodb://root:LelJFpa2SVS5Qk6ytuWLIJpW@bromo.liara.cloud:32357/ostan_db?authSource=admin"; +//const databaseURL = 'mongodb://danakcorp:danakcorp%212024@ostan-mr.ir:27017/ostan_db?serverSelectionTimeoutMS=5000&connectTimeoutMS=10000&authSource=admin&authMechanism=SCRAM-SHA-1' + +// const databaseURL = 'mongodb://ostanmri_user:admin1234@91.98.96.174:27017/ostanmri_database?serverSelectionTimeoutMS=5000&connectTimeoutMS=10000&authSource=ostanmri_database' + +module.exports = databaseURL; diff --git a/server/index.js b/server/index.js new file mode 100644 index 0000000..e7e0dc8 --- /dev/null +++ b/server/index.js @@ -0,0 +1,104 @@ +const express = require('express'); +const database = require('./database'); +const fileUpload = require('express-fileupload'); +const { isUser, isAdmin, isLoggedIn, hasPermission } = require('./authentication'); +const bodyParser = require('body-parser'); +const cronJobs = require('./plugins/cronJobs'); +const swaggerJsdoc = require("swagger-jsdoc"); +const cors = require('cors') +const swaggerUi = require("swagger-ui-express"); +const { createAdmins } = require('./plugins/privateAdmin'); +const portals = require('./plugins/portals'); +global._ = require('lodash'); +global.lodash = require('lodash-contrib'); +global.portal = []; + +for (const item of portals) { + portal.push(item.value); +} + +// Create express instance +const app = express(); + +const options = { + definition: { + openapi: "3.0.0", + info: { + title: "Ostandari Swagger RestFul API", + version: "1.0.0", + description: "API documentation", + license: { + name: "MIT", + }, + }, + components: { + securitySchemes: { + bearerAuth: { + type: 'http', + in: 'header', + name: 'Authorization', + description: 'Bearer Token', + scheme: 'bearer', + bearerFormat: 'JWT', + }, + }, + }, + security: { + bearerAuth: [], + }, + servers: [ + { + url: "http://localhost:3756", + }, + ], + }, + apis: ['./server/routes/*.js'] +}; + +const specs = swaggerJsdoc(options); + +cronJobs(); +createAdmins(); +const corsOptions ={ + origin:'*', + credentials:true, + optionSuccessStatus:200, +} + +// Init body-parser options (inbuilt with express) +app.use(express.json()); +app.use(express.urlencoded({ extended: true })); +app.use(fileUpload()); +app.use(cors(corsOptions)) +app.use( + "/v1", + swaggerUi.serve, + swaggerUi.setup(specs , {explorer:true}) +); +// Require & Import API routes +const Public = require('./routes/public'); +const admin = require('./routes/admin'); +const auth = require('./routes/auth'); +const user = require('./routes/user'); + +// Use API Routes +app.use('/public', Public); +app.use('/auth', auth); +app.use('/admin', [isLoggedIn, isAdmin], admin); +// app.use('/user', isUser, user); + +// Error handling middleware to catch buffer issues +app.use((err, req, res, next) => { + if (err.code === 'ENOBUFS') { + console.error('Buffer space error:', err); + res.status(500).send('Server is experiencing buffer space issues.'); + } else { + next(err); + } +}); + +// Export the server middleware +module.exports = { + path: '/api', + handler: app +}; diff --git a/server/models/Book.js b/server/models/Book.js new file mode 100644 index 0000000..d606581 --- /dev/null +++ b/server/models/Book.js @@ -0,0 +1,19 @@ +const mongoose = require('mongoose'); +const mongoosePaginate = require('mongoose-paginate-v2'); + + +function PDF(pdf) { + if (pdf) return '/uploads/files/ReadOnly-PDF' + pdf +} +const BookSchema = mongoose.Schema({ + title: String, + uri: String, + slides:{ + default:[], + type:Array + } +}); + +BookSchema.plugin(mongoosePaginate); + +module.exports = mongoose.model('Book', BookSchema); diff --git a/server/models/Captcha.js b/server/models/Captcha.js new file mode 100644 index 0000000..d2773be --- /dev/null +++ b/server/models/Captcha.js @@ -0,0 +1,8 @@ +const mongoose = require('mongoose'); + +const CaptchaSchema = mongoose.Schema({ + code : String, + createdAt : {type : Date , expires : 60 , default : Date.now()} +}); + +module.exports = mongoose.model('Captcha', CaptchaSchema); diff --git a/server/models/Category.js b/server/models/Category.js new file mode 100644 index 0000000..dfc91b4 --- /dev/null +++ b/server/models/Category.js @@ -0,0 +1,77 @@ +const mongoose = require('mongoose'); + +function autoPopulateSubs(next) { + this.populate({ + path: 'childs', + select: 'title childs navIndex url modelType treeCat parent defaultPageType', + options:{ + sort : 'navIndex' + } + // sort: {navIndex: -1}, + }); + next(); +} + +function file(file) { + return '/uploads/files/terms/' + file +} + +function image(img) { + if (img) return '/uploads/images/category/' + img + else return '/img/no-cover.jpg' +} + +const CategoryTermsFile = mongoose.Schema({ + file: {type: String, get: file}, + title: String +}) + + +const CategorySchema = mongoose.Schema({ + title: String, + parent: {type: mongoose.Schema.Types.ObjectId, ref: 'Category', default: null}, + childs: [{type: mongoose.Schema.Types.ObjectId, ref: 'Category'}], + treeCat: [{type: mongoose.Schema.Types.ObjectId, ref: 'Category'}], + rootParent: {type: mongoose.Schema.Types.ObjectId, ref: 'Category'}, + priority: {type: Number, default: 0}, + showInMenu: Boolean, + navIndex: {type: Number, default: null}, + news: {type: Boolean, default: true}, + child: {type: Boolean, default: true}, + special: {type: Boolean, default: false}, + allowComment: {type: Boolean, default: false}, + level: {type: Number, default: 1}, + siteMap: {type: Boolean, default: true}, + modelType: String, + _creator: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + _updatedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + haveNews: {type: Boolean, default: false}, + ///// for client + hasNewsTab: {type: Boolean, default: true}, + hasContentTab: {type: Boolean, default: true}, + hasMediaTab: {type: Boolean, default: true}, + hasSubMenusTab: {type: Boolean, default: true}, + hasTermsTab: {type: Boolean, default: true}, + hasNotificationsTab: {type: Boolean, default: true}, + hasSpecNewsTab: {type: Boolean, default: true}, + hasNazarTab: {type: Boolean, default: true}, + hasNewsFileTab: {type: Boolean, default: true}, + defaultPageType: {type: String, default: 'news'}, + /** page */ + showInFooter: {type: Number, enum: [0, 1, 2, 3], default: 0}, + url: {type: String, default: null}, + pageContent: String, + terms: [CategoryTermsFile], + hasManagerInfo: {type: Boolean, default: true}, + managerCover: {type: String, get: image}, + managerName: String, + managerDescription: String +}); + +CategorySchema.index({parent: 1, childs: 1}); + +CategorySchema + .pre('findOne', autoPopulateSubs) + .pre('find', autoPopulateSubs); + +module.exports = mongoose.model('Category', CategorySchema); diff --git a/server/models/Comment.js b/server/models/Comment.js new file mode 100644 index 0000000..151cf60 --- /dev/null +++ b/server/models/Comment.js @@ -0,0 +1,32 @@ +const mongoose = require('mongoose'); +const mongoosePaginate = require('mongoose-paginate-v2'); + + +const CommentSchema = mongoose.Schema({ + name : String, + description: String, + email : String, + read : {type : Boolean , default : false}, + allowShow : {type : Boolean , default : false}, + catsId : {type : Array , default : []}, + _updatedBy: { + type: mongoose.Schema.Types.ObjectId, + ref: 'User' + }, + modelRef : { + type : mongoose.Schema.Types.ObjectId, + refPath: 'modelName' + }, + modelName : { + type: String, + required: true, + enum: ['News', 'Category' , 'ContactUs'] + }, + modelType : String +}); + +CommentSchema.index({modelRef: 1}); + +CommentSchema.plugin(mongoosePaginate); + +module.exports = mongoose.model('Comment', CommentSchema); diff --git a/server/models/ContactUs.js b/server/models/ContactUs.js new file mode 100644 index 0000000..483675e --- /dev/null +++ b/server/models/ContactUs.js @@ -0,0 +1,22 @@ +const mongoose = require('mongoose'); + + +const ContactUsSchema = mongoose.Schema({ + title : {type : String , default : 'تماس با ما'}, + description: String, + showInMenu: Boolean, + email : String, + phone : String, + address : String, + main : {type : Boolean , default : false}, + // catId : { type: mongoose.Schema.Types.ObjectId, ref: 'Category'}, + _creator: {type: mongoose.Schema.Types.ObjectId , ref: 'User'}, + _updatedBy : {type: mongoose.Schema.Types.ObjectId , ref: 'User'}, + location : { type: {type:String}, coordinates: [Number]}, + siteMap : {type : Boolean , default : true}, + showInFooter : {type : Number , enum : [0,1,2,3] , default : 0}, +}); + +ContactUsSchema.index({ location : '2dsphere'}); + +module.exports = mongoose.model('ContactUs', ContactUsSchema); diff --git a/server/models/Content.js b/server/models/Content.js new file mode 100644 index 0000000..42f45ec --- /dev/null +++ b/server/models/Content.js @@ -0,0 +1,26 @@ +const mongoose = require('mongoose'); + +function image(img) { + if (img) return '/uploads/images/content/' + img +} + + +const ContentSchema = mongoose.Schema({ + title: String, + param: String, + email: String, + cover: {type: String, get: image, default: null}, + thumb: {type: String, get: image, default: null}, + showInMenu: {type: Boolean, default: false}, + pageContent: String, + showInFooter: {type: Number, enum: [0, 1, 2, 3], default: 0}, + showInSubFooter: {type: Boolean, default: false}, + index: {type: Number, default: null}, + private: {type: Boolean, default: true}, + _creator: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + _updatedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + siteMap: {type: Boolean, default: true}, + modelType: {type: String, default: 'ostandari'} +}); + +module.exports = mongoose.model('Content', ContentSchema); diff --git a/server/models/CounterDay.js b/server/models/CounterDay.js new file mode 100644 index 0000000..4c10c78 --- /dev/null +++ b/server/models/CounterDay.js @@ -0,0 +1,15 @@ +const mongoose = require('mongoose'); +const mongoosePaginate = require('mongoose-paginate-v2'); + + +const CounterDaySchema = mongoose.Schema({ + title : String, + expireDate : Date, + publish : {type : Boolean , default: true}, + _creator :{type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + _updatedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, +}); + +CounterDaySchema.plugin(mongoosePaginate); + +module.exports = mongoose.model('CounterDay', CounterDaySchema); diff --git a/server/models/Election.js b/server/models/Election.js new file mode 100644 index 0000000..e626751 --- /dev/null +++ b/server/models/Election.js @@ -0,0 +1,52 @@ +const mongoose = require('mongoose'); +const mongoosePaginate = require('mongoose-paginate-v2'); + +function image(img) { + if (img) return '/uploads/images/election/' + img +} + +const CandidatesSchema = mongoose.Schema({ + firstName: String, + lastName: String, + bornDate : {type: Date , default: null}, + education: {type: String, default: null}, + nationalCode : {type: String, default: null}, + resume : {type: String, default: null}, + profilePic : {type: String, get: image, default: null}, + _creator :{type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + _updatedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, +}); + +const VotersSchema = mongoose.Schema({ + firstName: String, + lastName: String, + nationalCode : String, + password: String, + scope:{type: Array, default: ['voter']}, + username: {type: String, unique: true}, + mobileNumber: {type: String, default: null}, + job: {type: String, default: null}, + voted: {type: Boolean, default: false}, + _creator :{type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + _updatedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, +}); + +const ElectionSchema = mongoose.Schema({ + title: String, + description : {type : String , default : null}, + catId: {type: mongoose.Schema.Types.ObjectId, ref: 'Category'}, + allCat: [{type: mongoose.Schema.Types.ObjectId, ref: 'Category'}], + rootParent: {type: mongoose.Schema.Types.ObjectId, ref: 'Category'}, + candidates : [CandidatesSchema], + voters : [VotersSchema], + votes : {type : Array , default : []}, + startDate : Date, + endDate : Date, + publish: {type: Boolean, default: false}, + _creator :{type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + _updatedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, +}); + +ElectionSchema.plugin(mongoosePaginate); + +module.exports = mongoose.model('Election', ElectionSchema); diff --git a/server/models/FeedBack.js b/server/models/FeedBack.js new file mode 100644 index 0000000..3bebb92 --- /dev/null +++ b/server/models/FeedBack.js @@ -0,0 +1,20 @@ +const mongoose = require('mongoose'); +const mongoosePaginate = require('mongoose-paginate-v2'); + + +const FeedBackSchema = mongoose.Schema({ + name : String, + description: String, + email : String, + twitter:String, + phoneNumber : String, + read : {type : Boolean , default : false}, + _updatedBy: { + type: mongoose.Schema.Types.ObjectId, + ref: 'User' + } +}); + +FeedBackSchema.plugin(mongoosePaginate); + +module.exports = mongoose.model('FeedBack', FeedBackSchema); diff --git a/server/models/Gallery.js b/server/models/Gallery.js new file mode 100644 index 0000000..4235e07 --- /dev/null +++ b/server/models/Gallery.js @@ -0,0 +1,57 @@ +const mongoose = require('mongoose'); +const mongoosePaginate = require('mongoose-paginate-v2'); + +function image(img) { + if (img) return '/uploads/images/gallery/' + img +} + +function graphic(img) { + if (img) return '/uploads/graphics/gallery/' + img +} + +function video(vdo) { + if (vdo) return '/uploads/videos/gallery/' + vdo +} + +const GallerySchema = mongoose.Schema({ + title: String, + shortTitlePanel: String, + shortTitleFront: String, + summaryTitle: String, + shortSummaryTitle: String, + leadTitle: String, + catId: {type: mongoose.Schema.Types.ObjectId, ref: 'Category'}, + rootParent: {type: mongoose.Schema.Types.ObjectId, ref: 'Category'}, + allCat: [{type: mongoose.Schema.Types.ObjectId, ref: 'Category'}], + newsFileId: {type: mongoose.Schema.Types.ObjectId, ref: 'NewsFile'}, + // priority: {type : Number , default : 0}, + publish: {type: Boolean, default: false}, + showInHome: {type: Boolean, default: true}, + graphic: {type: String, get: graphic, default: null}, + thumbGraphic: {type: String, get: graphic, default: null}, + cover: {type: String, get: image, default: null}, + thumbCover: {type: String, get: image, default: null}, + uidImage:[{type:String , get:image , default:null}], + images: [{type: String, get: image, default: null}], + thumbImages: [{type: String, get: image, default: null}], + video: {type: String, get: video, default: null}, + isEmbedded: {type: Boolean, default: false}, + embeddedCode: String, + userViews: {type: Number, default: 0}, + special: {type: Boolean, default: false}, + _creator: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + _updatedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + siteMap: {type: Boolean, default: true}, + modelType: String, + keywords: {type: Array, default: []}, + metaTagDesc: {type: String, default: null}, + galleryType: {type: String, enum: ['image', 'video', 'graphic']}, + galleryStatus: {type: Boolean, default: false}, + customDate: {type: Date, default: Date.now}, + customDateHistory: Array, + favorite: {type: Boolean, default: false} +}, {toJson: {getters: false}}); + +GallerySchema.plugin(mongoosePaginate); + +module.exports = mongoose.model('Gallery', GallerySchema); diff --git a/server/models/HomePage.js b/server/models/HomePage.js new file mode 100644 index 0000000..cc4d51b --- /dev/null +++ b/server/models/HomePage.js @@ -0,0 +1,18 @@ +const mongoose = require('mongoose'); + +const HomePageSchema = mongoose.Schema({ + s2: {type: mongoose.Schema.Types.ObjectId, ref: 'Category', default: null}, + s3: {type: mongoose.Schema.Types.ObjectId, ref: 'Category', default: null}, + s4: {type: mongoose.Schema.Types.ObjectId, ref: 'Category', default: null}, + s5: [{type: mongoose.Schema.Types.ObjectId, ref: 'Category', default: null}], + s6: {type: mongoose.Schema.Types.ObjectId, ref: 'Category', default: null}, + // side bar + s2Side: {type: mongoose.Schema.Types.ObjectId, ref: 'Category', default: null}, + s3Side: {type: mongoose.Schema.Types.ObjectId, ref: 'Category', default: null}, + s4Side: {type: mongoose.Schema.Types.ObjectId, ref: 'Category', default: null}, + s5Side: {type: mongoose.Schema.Types.ObjectId, ref: 'Category', default: null}, + s6Side: {type: mongoose.Schema.Types.ObjectId, ref: 'Category', default: null}, + modelType : String +}); + +module.exports = mongoose.model('HomePage', HomePageSchema); diff --git a/server/models/Links.js b/server/models/Links.js new file mode 100644 index 0000000..d099d6f --- /dev/null +++ b/server/models/Links.js @@ -0,0 +1,20 @@ +const mongoose = require('mongoose'); + +function image(img) { + if (img) return '/uploads/images/links/' + img +} + +const LinksSchema = mongoose.Schema({ + title: String, + url : String, + icon : {type: String, get: image , default : null}, + index: {type : Number , default : null}, + showInHome : {type : Boolean , default : false}, + _creator: {type: mongoose.Schema.Types.ObjectId , ref: 'User'}, + _updatedBy: {type: mongoose.Schema.Types.ObjectId , ref: 'User'}, + siteMap : {type : Boolean , default : false}, + modelType : String +}); + + +module.exports = mongoose.model('Links', LinksSchema); diff --git a/server/models/Logger.js b/server/models/Logger.js new file mode 100644 index 0000000..105d039 --- /dev/null +++ b/server/models/Logger.js @@ -0,0 +1,11 @@ +const mongoose = require('mongoose'); +const mongoosePaginate = require('mongoose-paginate-v2'); + +const LoggerSchema = mongoose.Schema({ + LastLogin: String, + user :{type: mongoose.Schema.Types.ObjectId, ref: 'User'}, +}); + +LoggerSchema.plugin(mongoosePaginate); + +module.exports = mongoose.model('Logger', LoggerSchema); diff --git a/server/models/Meeting.js b/server/models/Meeting.js new file mode 100644 index 0000000..1ffe031 --- /dev/null +++ b/server/models/Meeting.js @@ -0,0 +1,21 @@ +const mongoose = require('mongoose'); +const mongoosePaginate = require('mongoose-paginate-v2'); + + +const MeetingSchema = mongoose.Schema({ + name : String, + subject : String, + description: String, + email : String, + phoneNumber : String, + nationalCode : String, + read : {type : Boolean , default : false}, + _updatedBy: { + type: mongoose.Schema.Types.ObjectId, + ref: 'User' + } +}); + +MeetingSchema.plugin(mongoosePaginate); + +module.exports = mongoose.model('Meeting', MeetingSchema); diff --git a/server/models/News.js b/server/models/News.js new file mode 100644 index 0000000..d8d8240 --- /dev/null +++ b/server/models/News.js @@ -0,0 +1,61 @@ +const mongoose = require('mongoose'); +const mongoosePaginate = require('mongoose-paginate-v2'); + +function image(img) { + if (img) return '/uploads/images/news/' + img + else return '/img/no-cover.jpg' +} + +function file(file) { + return '/uploads/files/newsAttachments/' + file +} + +const NewsAttachmentSchema = mongoose.Schema({ + file: {type: String, get: file}, + title: String +}) + +const NewsSchema = mongoose.Schema({ + title: String, + shortTitlePanel: String, + shortTitleFront: String, + summaryTitle: String, + leadTitle: String, + shortSummaryTitle: String, + customDate: {type: Date, default: Date.now}, + catId: {type: mongoose.Schema.Types.ObjectId, ref: 'Category'}, + allCat: [{type: mongoose.Schema.Types.ObjectId, ref: 'Category'}], + newsFileId: {type: mongoose.Schema.Types.ObjectId, ref: 'NewsFile'}, + rootParent: {type: mongoose.Schema.Types.ObjectId, ref: 'Category'}, + priority: {type: Boolean, default: false}, + allowComment: {type: Boolean, default: false}, + showInHome: {type: Boolean, default: true}, + slider: {type: Boolean, default: false}, + PublisherId:{type:String}, + PublisherAccept:{type:Boolean , default:false}, + publish: {type: Boolean, default: false}, + pageContent: String, + cover: {type: String, get: image, default: null}, + thumbCover: {type: String, get: image, default: null}, + content:{type:String , default:''}, + userViews: {type: Number, default: 0}, + special: {type: Boolean, default: false}, + notifications: {type: Boolean, default: false}, + _creator: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + _updatedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + siteMap: {type: Boolean, default: true}, + keywords: {type: Array, default: []}, + metaTagDesc: {type: String, default: null}, + newsStatus: {type: Boolean, default: false}, + modelType: String, + customDateHistory: Array, + attachments: [NewsAttachmentSchema], + imported: Boolean, + superNews: Boolean +}); + +NewsSchema.index({catId: 1, allCat: 1}); + +NewsSchema.plugin(mongoosePaginate); + +module.exports = mongoose.model('News', NewsSchema); diff --git a/server/models/NewsFile.js b/server/models/NewsFile.js new file mode 100644 index 0000000..6259ab9 --- /dev/null +++ b/server/models/NewsFile.js @@ -0,0 +1,31 @@ +const mongoose = require('mongoose'); +const mongoosePaginate = require('mongoose-paginate-v2'); + +function image(img) { + if (img) return '/uploads/images/news/' + img + else return '/img/no-cover.jpg' +} + +const NewsFileSchema = mongoose.Schema({ + title: String, + description: String, + index: {type: Number, default: null}, + catId: {type: mongoose.Schema.Types.ObjectId, ref: 'Category'}, + allCat: [{type: mongoose.Schema.Types.ObjectId, ref: 'Category'}], + rootParent: {type: mongoose.Schema.Types.ObjectId, ref: 'Category'}, + showInHome: {type: Boolean, default: true}, + showInMenu: {type: Boolean, default: false}, + _creator: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + _updatedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + siteMap: {type: Boolean, default: true}, + userViews: {type: Number, default: 0}, + modelType: String, + publish: {type: Boolean, default: true}, + cover: {type: String, get: image, default: null}, + thumbCover: {type: String, get: image, default: null}, +}); + +NewsFileSchema.plugin(mongoosePaginate); + + +module.exports = mongoose.model('NewsFile', NewsFileSchema); diff --git a/server/models/Occasion.js b/server/models/Occasion.js new file mode 100644 index 0000000..6c300ec --- /dev/null +++ b/server/models/Occasion.js @@ -0,0 +1,22 @@ +const mongoose = require('mongoose'); +const mongoosePaginate = require('mongoose-paginate-v2'); + +function image(img) { + if (img) return '/uploads/images/occasion/' + img +} + +const OccasionSchema = mongoose.Schema({ + title : String, + mainCover: {type: String, get: image, default: null}, + startDate : Date, + endDate : Date, + index: {type: Number, default: null}, + publish : {type : Boolean , default: true}, + status : {type : Boolean , default: false}, + _creator :{type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + _updatedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, +}); + +OccasionSchema.plugin(mongoosePaginate); + +module.exports = mongoose.model('Occasion', OccasionSchema); diff --git a/server/models/Polls.js b/server/models/Polls.js new file mode 100644 index 0000000..432289d --- /dev/null +++ b/server/models/Polls.js @@ -0,0 +1,24 @@ +const mongoose = require('mongoose'); +const mongoosePaginate = require('mongoose-paginate-v2'); + +const PollSchema = mongoose.Schema({ + title: String, + description : {type : String , default : null}, + surveyType : {type : String , default : 'check'}, + catId: {type: mongoose.Schema.Types.ObjectId, ref: 'Category'}, + allCat: [{type: mongoose.Schema.Types.ObjectId, ref: 'Category'}], + rootParent: {type: mongoose.Schema.Types.ObjectId, ref: 'Category'}, + // index: {type: Number, default: null}, + options : {type : Array , default : []}, + answers : {type : Array , default : []}, + userIds : {type : Array , default : []}, + startDate : Date, + endDate : Date, + publish: {type: Boolean, default: false}, + _creator :{type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + _updatedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, +}); + +PollSchema.plugin(mongoosePaginate); + +module.exports = mongoose.model('Poll', PollSchema); diff --git a/server/models/Services.js b/server/models/Services.js new file mode 100644 index 0000000..a6a7882 --- /dev/null +++ b/server/models/Services.js @@ -0,0 +1,20 @@ +const mongoose = require('mongoose'); +const mongoosePaginate = require('mongoose-paginate-v2'); + +function image(img) { + if (img) return '/uploads/images/services/' + img +} + +const ServicesSchema = mongoose.Schema({ + title: String, + url : String, + cover : {type: String, get: image , default : null}, + index: {type : Number , default : null}, + _creator: {type: mongoose.Schema.Types.ObjectId , ref: 'User'}, + _updatedBy: {type: mongoose.Schema.Types.ObjectId , ref: 'User'}, + modelType : String +}); + +ServicesSchema.plugin(mongoosePaginate); + +module.exports = mongoose.model('Services', ServicesSchema); diff --git a/server/models/Slider.js b/server/models/Slider.js new file mode 100644 index 0000000..fd9f017 --- /dev/null +++ b/server/models/Slider.js @@ -0,0 +1,24 @@ +const mongoose = require('mongoose'); +const mongoosePaginate = require('mongoose-paginate-v2'); + +function image(img) { + if (img) return '/uploads/images/slider/' + img +} + +const SliderSchema = mongoose.Schema({ + title: String, + summaryTitle : String, + url : String, + newsTitle : String, + isLocal : {type : Boolean , default : false}, + cover : {type: String, get: image , default : null}, + index: {type : Number , default : null}, + _creator: {type: mongoose.Schema.Types.ObjectId , ref: 'User'}, + _updatedBy: {type: mongoose.Schema.Types.ObjectId , ref: 'User'}, + siteMap : {type : Boolean , default : false}, + modelType : String +}); + +SliderSchema.plugin(mongoosePaginate); + +module.exports = mongoose.model('Slider', SliderSchema); diff --git a/server/models/User.js b/server/models/User.js new file mode 100644 index 0000000..7d35028 --- /dev/null +++ b/server/models/User.js @@ -0,0 +1,29 @@ +const mongoose = require('mongoose'); +const mongoosePaginate = require('mongoose-paginate-v2'); + +function image(img) { + if (img) return '/uploads/images/users/' + img +} + +const AdminSchema = mongoose.Schema({ + firstName: String, + lastName: String, + password: String, + scope: {type: Array, default: ['admin']}, + token: {type: String, default: null}, + profilePic: {type: String, get: image, default: null}, + mobileNumber: {type: String, default: null}, + email: String, + registration_done: {type: Boolean, default: false}, + _creator: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + _updatedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, + username: {type: String, unique: true}, + portals: {type: Array, default: []}, + permissions: Array, + specialPermissions: [{type: mongoose.Schema.Types.ObjectId, ref: 'Category'}], + private: {type: Boolean, default: false} +}) + +AdminSchema.plugin(mongoosePaginate); + +module.exports = mongoose.model('User', AdminSchema) diff --git a/server/models/YearBanner.js b/server/models/YearBanner.js new file mode 100644 index 0000000..43fdbda --- /dev/null +++ b/server/models/YearBanner.js @@ -0,0 +1,26 @@ +const mongoose = require('mongoose'); + +function image(img) { + if (img) return '/uploads/images/mainCover/' + img +} + +const YearBannerSchema = mongoose.Schema({ + mainCover: {type: String, get: image, default: null}, + iranFlag: {type: Boolean, default: true}, + // electionBtn + electionBtn: {type: Boolean, default: true}, + // social links + hasEmail: {type: Boolean, default: true}, + hasGPlus: {type: Boolean, default: true}, + hasTweeter: {type: Boolean, default: true}, + hasInstagram: {type: Boolean, default: true}, + email: {type: String, default: ''}, + gPlus: {type: String, default: ''}, + tweeter: {type: String, default: ''}, + instagram: {type: String, default: ''}, + // textCover : {type : String , default : null}, + _updatedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, +}); + + +module.exports = mongoose.model('YearBanner', YearBannerSchema); diff --git a/server/plugins/checkNationalCode.js b/server/plugins/checkNationalCode.js new file mode 100644 index 0000000..8fbfd16 --- /dev/null +++ b/server/plugins/checkNationalCode.js @@ -0,0 +1,14 @@ +module.exports = function checkNationalCode(code) { + var L = code.length + + if (L < 8 || parseInt(code, 10) == 0) return false + code = ('0000' + code).substr(L + 4 - 10) + if (parseInt(code.substr(3, 6), 10) == 0) return false + var c = parseInt(code.substr(9, 1), 10) + var s = 0 + for (var i = 0; i < 9; i++) { + s += parseInt(code.substr(i, 1), 10) * (10 - i) + } + s = s % 11; + return (s < 2 && c == s) || (s >= 2 && c == (11 - s)) +} diff --git a/server/plugins/controllersHelperFunctions.js b/server/plugins/controllersHelperFunctions.js new file mode 100644 index 0000000..9482339 --- /dev/null +++ b/server/plugins/controllersHelperFunctions.js @@ -0,0 +1,79 @@ +module.exports.res404 = (res, err) => { + return res.status(404).json({message: err}) +} + +module.exports.res500 = (res, err) => { + return res.status(500).json({message: err}) +} + +module.exports.checkValidations = validationResult => { + return (req, res, next) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({validation: errors.mapped()}) + else next() + } +} + +module.exports.removeWhiteSpaces = str => { + return str.replace(/ /g, '') +} + +module.exports.nameOptimizer = name => { + function regex(str) { + return new RegExp(str) + } + + return name + .replace(regex('آقای'), '') + .replace(regex('آقا'), '') + .replace(regex('جنابه'), '') + .replace(regex('جناب'), '') + .replace(regex('سرکار خانوم'), '') + .replace(regex('سرکار خانم'), '') + .replace(regex('سرکارخانوم'), '') + .replace(regex('سرکارخانومه'), '') + .replace(regex('سرکارخانمه'), '') + .replace(regex('سرکارخانم'), '') + .replace(regex('سرکار'), '') + .replace(regex('خانوم'), '') + .replace(regex('خانم'), '') +} + +module.exports.checkNationalCode = code => { + var L = code.length + + if (L < 8 || parseInt(code, 10) == 0) return false + code = ('0000' + code).substr(L + 4 - 10) + if (parseInt(code.substr(3, 6), 10) == 0) return false + var c = parseInt(code.substr(9, 1), 10) + var s = 0 + for (var i = 0; i < 9; i++) { + s += parseInt(code.substr(i, 1), 10) * (10 - i) + } + s = s % 11; + return (s < 2 && c == s) || (s >= 2 && c == (11 - s)) +} + +module.exports.isLatinCharactersWithoutSymbol = str => { + return str.match(/^[A-Za-z]+$/g) +} + +module.exports.isLatinCharactersWithSymbol = str => { + return str.match(/^[a-zA-Z0-9()*_\-!#$%^&*,."\'\][]*$/g) +} + +module.exports.hasWhiteSpaces = str => { + return str.includes(' ') +} + +module.exports.generateRandomDigits = digitsLength => { + var add = 1, max = 12 - add // 12 is the min safe number Math.random() can generate without it starting to pad the end with zeros. + if (digitsLength > max) { + return generateRandomDigits(max) + generateRandomDigits(digitsLength - max) + } + max = Math.pow(10, digitsLength + add) + var min = max / 10 // Math.pow(10, n) basically + var number = Math.floor(Math.random() * (max - min + 1)) + min + + return ('' + number).substring(add) +} diff --git a/server/plugins/cronJobs.js b/server/plugins/cronJobs.js new file mode 100644 index 0000000..1174063 --- /dev/null +++ b/server/plugins/cronJobs.js @@ -0,0 +1,152 @@ +const User = require('../models/User') +const News = require('../models/News') +const Category = require('../models/Category') +const fs = require('fs') + +const minute = 1000 * 60 +const hour = minute * 60 +const day = hour * 24 + +module.exports = async () => { + // check users for activation + // setInterval(() => { + // User.find({confirmed: false}) + // .then(users => { + // if (users.length) { + // /////////////////////// + // users.forEach((item, index) => { + // // item time and timeout + // const itemTime = Date.parse(item.created_at) + // const timeout = itemTime + day + // //////////////////////////// + // if (Date.now() >= timeout) { + // item.remove() + // } + // if (index === users.length - 1) { + // // console.log('Unconfirmed users deleted.') + // } + // }) + // } + // }) + // .catch(err => { + // console.log(err) + // }) + // }, hour) + + + // console.log('migration started ...') + // try { + // const rawFile = await fs.readFileSync(`./server/ostan_wp_posts.json`) + // const parsedData = await JSON.parse(rawFile) + // + // // console.log(parsedData[0]) + // + // const posts = [] + // + // // dynamic + // const rootParent = '60e95a43111ba696ea3d5171' // فرمانداری ها + // const category = '60e95c7d111ba696ea3d5301' // فرماندای شهرستان خنداب + // + // // static + // const creator = '60eaaf8db36930ef88d3d377' + // + // const newArray = [] + // + // for await (const item of parsedData) { + // + // // console.log(item.post_type) + // if (item.post_type === 'post' && posts.includes(item.ID) && item.post_status === 'publish') { + // await newArray.push(item) + // } + // } + // + // console.log('-- posts length: ', newArray.length) + // + // let index = 0 + // for await (const item of newArray) { + // const newPost = new News({ + // title: item.post_title, + // shortTitlePanel: item.post_title, + // shortTitleFront: item.post_title, + // summaryTitle: item.post_title, + // leadTitle: '', + // shortSummaryTitle: item.post_title, + // customDate: item.post_date, + // /// **************************************** + // catId: category, + // /// **************************************** + // allCat: [], + // newsFileId: null, + // /// **************************************** + // rootParent: rootParent, + // /// **************************************** + // priority: false, + // allowComment: false, + // showInHome: false, + // slider: false, + // publish: true, + // pageContent: item.post_content, + // cover: null, + // thumbCover: null, + // userViews: 200, + // special: false, + // notifications: false, + // _creator: creator, + // _updatedBy: creator, + // siteMap: true, + // keywords: [], + // metaTagDesc: item.post_title, + // newsStatus: true, + // modelType: 'ostandari', + // attachments: [], + // imported: true + // }) + // await newPost.save() + // if (index === newArray.length - 1) console.log('---- data entry finished') + // index++ + // } + // + // + // } catch (e) { + // console.log('this is catch error --- ', e) + // } + + + // update all news + + // try { + // const news = await News.find() + // const regex = new RegExp('/', 'g') + // let index = 0 + // for await (const item of news) { + // console.log(index) + // item.title = item.title.replace(regex, ',') + // await item.save() + // if (index === news.length - 1) console.log('update finished') + // index++ + // + // } + // } catch (e) { + // console.log('-- this is catch error:', e) + // } + + + // update all categories + + // try { + // const categories = await Category.find() + // // const regex = new RegExp('/', 'g') + // let index = 0 + // for await (const item of categories) { + // console.log(index) + // // item.title = item.title.replace(regex, ',') + // await item.save() + // if (index === categories.length - 1) console.log('update finished') + // index++ + // + // } + // } catch (e) { + // console.log('-- this is catch error:', e) + // } + +} diff --git a/server/plugins/iranCities.js b/server/plugins/iranCities.js new file mode 100644 index 0000000..7293ff1 --- /dev/null +++ b/server/plugins/iranCities.js @@ -0,0 +1,161 @@ +// province cities +const eastazarbaijan1 = ['آذرشهر', 'اسکو', 'اهر', 'بستان‌آباد', 'بناب', 'تبریز', 'جلفا', 'چاراویماق', 'سراب', 'شبستر', 'مراغه'] +const westazarbaijan2 = ['ارومیه', 'اشنویه', 'بوکان', 'پیرانشهر', 'تکاب', 'چالدران', 'خوی', 'سردشت', 'سلماس', 'شاهین‌دژ', 'ماکو', 'مهاباد', 'میاندوآب', 'نقده'] +const ardabil3 = ['اردبیل', 'بیله‌سوار', 'پارس‌آباد', 'خلخال', 'کوثر', 'گِرمی', 'مِشگین‌شهر', 'نَمین', 'نیر'] +const esfahan4 = ['آران و بیدگل', 'اردستان', 'اصفهان', 'برخوار و میمه', 'تیران و کرون', 'چادگان', 'خمینی‌شهر', 'خوانسار', 'سمیرم', 'شهرضا', 'سمیرم سفلی', 'فریدن', 'فریدون‌شهر', 'فلاورجان', 'کاشان', 'گلپایگان', 'لنجان', 'مبارکه', 'نائین', 'نجف‌آباد', 'نطنز'] +const ilam5 = ['آبدانان', 'ایلام', 'ایوان', 'دره‌شهر', 'دهلران', 'شیروان و چرداول', 'مهران'] +const booshehr6 = ['بوشهر', 'تنگستان', 'جم', 'دشتستان', 'دشتی', 'دیر', 'دیلم', 'کنگان', 'گناوه'] +const tehran7 = ['اسلام‌شهر', 'پاکدشت', 'تهران', 'دماوند', 'رباط‌کریم', 'ری', 'ساوجبلاغ', 'شمیرانات', 'شهریار', 'فیروزکوه', 'ورامین'] +const chaharmahalobakhtiari8 = ['اردل', 'بروجن', 'شهرکرد', 'فارسان', 'کوهرنگ', 'لردگان'] +const khorasanjonoobi9 = ['بیرجند', 'درمیان', 'سرایان', 'سربیشه', 'فردوس', 'قائنات', 'نهبندان'] +const khorasanrazavi10 = ['بردسکن', 'تایباد', 'تربت جام', 'تربت حیدریه', 'چناران', 'خلیل‌آباد', 'خواف', 'درگز', 'رشتخوار', 'سبزوار', 'سرخس', 'فریمان', 'قوچان', 'کاشمر', 'کلات', 'گناباد', 'مشهد', 'مه ولات', 'نیشابور'] +const khorasanshomali11 = ['اسفراین', 'بجنورد', 'جاجرم', 'شیروان', 'فاروج', 'مانه و سملقان'] +const khoozestan12 = ['آبادان', 'امیدیه', 'اندیمشک', 'اهواز', 'ایذه', 'باغ‌ملک', 'بندر ماهشهر', 'بهبهان', 'خرمشهر', 'دزفول', 'دشت آزادگان', 'رامشیر', 'رامهرمز', 'شادگان', 'شوش', 'شوشتر'] +const zanjan13 = ['ابهر', 'ایجرود', 'خدابنده', 'خرمدره', 'زنجان', 'طارم', 'ماه‌نشان'] +const semnan14 = ['دامغان', 'سمنان', 'شاهرود', 'گرمسار', 'مهدی‌شهر'] +const sistanobaloochestan15 = ['ایرانشهر', 'چابهار', 'خاش', 'دلگان', 'زابل', 'زاهدان', 'زهک', 'سراوان', 'سرباز', 'کنارک', 'نیک‌شهر'] +const fars16 = ['آباده', 'ارسنجان', 'استهبان', 'اقلید', 'بوانات', 'پاسارگاد', 'جهرم', 'خرم‌بید', 'خنج', 'داراب', 'زرین‌دشت', 'سپیدان', 'شیراز', 'فراشبند', 'فسا', 'فیروزآباد', 'قیر و کارزین', 'کازرون', 'لارستان', 'لامِرد', 'مرودشت', 'ممسنی', 'مهر', 'نی‌ریز'] +const qazvin17 = ['آبیک', 'البرز', 'بوئین‌زهرا', 'تاکستان', 'قزوین'] +const qom18 = ['قم'] +const kordestan19 = ['بانه', 'بیجار', 'دیواندره', 'سروآباد', 'سقز', 'سنندج', 'قروه', 'کامیاران', 'مریوان'] +const kerman20 = ['بافت', 'بردسیر', 'بم', 'جیرفت', 'راور', 'رفسنجان', 'رودبار جنوب', 'زرند', 'سیرجان', 'شهر بابک', 'عنبرآباد', 'قلعه گنج', 'کرمان', 'کوهبنان', 'کهنوج', 'منوجان'] +const kermanshah21 = ['اسلام‌آباد غرب', 'پاوه', 'ثلاث باباجانی', 'جوانرود', 'دالاهو', 'روانسر', 'سرپل ذهاب', 'سنقر', 'صحنه', 'قصر شیرین', 'کرمانشاه', 'کنگاور', 'گیلان غرب', 'هرسین'] +const kohkilooyevaboyrahmad22 = ['بویراحمد', 'بهمئی', 'دنا', 'کهگیلویه', 'گچساران'] +const golestan23 = ['آزادشهر', 'آق‌قلا', 'بندر گز', 'ترکمن', 'رامیان', 'علی‌آباد', 'کردکوی', 'کلاله', 'گرگان', 'گنبد کاووس', 'مراوه‌تپه', 'مینودشت'] +const gilan24 = ['آستارا', 'آستانه اشرفیه', 'اَملَش', 'بندر انزلی', 'رشت', 'رضوانشهر', 'رودبار', 'رودسر', 'سیاهکل', 'شَفت', 'صومعه‌سرا', 'طوالش', 'فومَن', 'لاهیجان', 'لنگرود', 'ماسال'] +const lorestan25 = ['ازنا', 'الیگودرز', 'بروجرد', 'پل‌دختر', 'خرم‌آباد', 'دورود', 'دلفان', 'سلسله ,کوهدشت'] +const mazandaran26 = ['آمل', 'بابل', 'بابلسر', 'بهشهر', 'تنکابن', 'جویبار', 'چالوس', 'رامسر', 'ساری', 'سوادکوه', 'قائم‌شهر', 'گلوگاه', 'محمودآباد', 'نکا', 'نور', 'نوشهر'] +const markazi27 = ['آشتیان', 'اراک', 'تفرش', 'خمین', 'دلیجان', 'زرندیه', 'ساوه', 'شازند', 'کمیجان', 'محلات'] +const hormozgan28 = ['ابوموسی', 'بستک', 'بندر عباس', 'بندر لنگه', 'جاسک', 'حاجی‌آباد', 'شهرستان خمیر', 'رودان', 'قشم', 'گاوبندی', 'میناب'] +const hamedan29 = ['اسدآباد', 'بهار', 'تویسرکان', 'رزن', 'کبودرآهنگ', 'ملایر', 'نهاوند', 'همدان'] +const yazd30 = ['ابرکوه', 'اردکان', 'بافق', 'تفت', 'خاتم', 'صدوق', 'طبس', 'مهریز', 'مِیبُد', 'یزد'] +const alborz31 = ['کرج', 'نظرآباد', 'فردیس', 'اشتهارد', 'هشتگرد', 'طالقان'] + + +// provinces list +module.exports.iranCities = [ + { + name: 'آذربایجان شرقی', + cities: eastazarbaijan1 + }, + { + name: 'آذربایجان غربی', + cities: westazarbaijan2 + }, + { + name: 'اردبیل', + cities: ardabil3 + }, + { + name: 'اصفهان', + cities: esfahan4 + }, + { + name: 'ایلام', + cities: ilam5 + }, + { + name: 'بوشهر', + cities: booshehr6 + }, + { + name: 'تهران', + cities: tehran7 + }, + { + name: 'چهارمحال بختیاری', + cities: chaharmahalobakhtiari8 + }, + { + name: 'خراسان جنوبی', + cities: khorasanjonoobi9 + }, + { + name: 'خراسان رضوی', + cities: khorasanrazavi10 + }, + { + name: 'خراسان شمالی', + cities: khorasanshomali11 + }, + { + name: 'خوزستان', + cities: khoozestan12 + }, + { + name: 'زنجان', + cities: zanjan13 + }, + { + name: 'سمنان', + cities: semnan14 + }, + { + name: 'سیستان بلوچستان', + cities: sistanobaloochestan15 + }, + { + name: 'فارس', + cities: fars16 + }, + { + name: 'قزوین', + cities: qazvin17 + }, + { + name: 'قم', + cities: qom18 + }, + { + name: 'کردستان', + cities: kordestan19 + }, + { + name: 'کرمان', + cities: kerman20 + }, + { + name: 'کرمانشاه', + cities: kermanshah21 + }, + { + name: 'کهکیلویه و بویراحمد', + cities: kohkilooyevaboyrahmad22 + }, + { + name: 'گلستان', + cities: golestan23 + }, + { + name: 'گیلان', + cities: gilan24 + }, + { + name: 'لرستان', + cities: lorestan25 + }, + { + name: 'مازندران', + cities: mazandaran26 + }, + { + name: 'مرکزی', + cities: markazi27 + }, + { + name: 'هرمزگان', + cities: hormozgan28 + }, + { + name: 'همدان', + cities: hamedan29 + }, + { + name: 'یزد', + cities: yazd30 + }, + { + name: 'البرز', + cities: alborz31 + } +] diff --git a/server/plugins/mainContactUs.js b/server/plugins/mainContactUs.js new file mode 100644 index 0000000..4e84e20 --- /dev/null +++ b/server/plugins/mainContactUs.js @@ -0,0 +1,36 @@ +const ContactUs = require('../models/ContactUs'); +const database = require('../database'); + +module.exports.createAdmins = () => { + database.once('open', async cb => { + try { + const contactUs = await ContactUs.find(); + if (!contactUs.length) { + const data = { + description : "توضیحات صفحه تماس با ما", + showInMenu : true, + main : true, + email : 'test@gmail.com', + phone : '08632222222', + address : 'میدان فاطمیه', + catId : null, + _creator : null, + _updatedBy : null, + location : { + type : 'Point', + coordinates : [-118.2870407961309,33.93508571994455] + }, + siteMap : true, + showInFooter : true + }; + const newContactUs = new ContactUs(data); + newContactUs.save(err => { + if (err) console.log(err) + }) + } + } catch + (e) { + console.log('defualt contact us creation has error -- ', e) + } + }) +} diff --git a/server/plugins/permissions.js b/server/plugins/permissions.js new file mode 100644 index 0000000..92f0796 --- /dev/null +++ b/server/plugins/permissions.js @@ -0,0 +1,42 @@ +module.exports = [ + { + name: 'دسترسی کامل', + value: 'superAdmin' + }, + { + name: 'مدیریت اخبار', + value: 'news' + }, + { + name: 'مدیریت دسته بندی ها و صفحات', + value: 'categories' + }, + { + name: 'مدیریت رسانه ها', + value: 'gallery' + }, + { + name: 'مدیریت نظرسنجی ها', + value: 'polls' + }, + { + name: 'مدیریت انتخابات', + value: 'elections' + }, + { + name: 'مدیریت صفحات خاص', + value: 'contents' + }, + { + name: 'مدیریت پرونده خبری', + value: 'newsFile' + }, + { + name: 'مدیریت پیام های اخبار', + value: 'comment-News' + }, + { + name: 'مدیریت پیام های ارتباط با ما', + value: 'comment-ContactUs' + } +] diff --git a/server/plugins/portals.js b/server/plugins/portals.js new file mode 100644 index 0000000..6b8c8a6 --- /dev/null +++ b/server/plugins/portals.js @@ -0,0 +1,10 @@ +module.exports = [ + { + name: 'استانداری', + value: 'ostandari' + }, + { + name: 'ستاد انتخابات', + value: 'election' + } + ] \ No newline at end of file diff --git a/server/plugins/privateAdmin.js b/server/plugins/privateAdmin.js new file mode 100644 index 0000000..a061cca --- /dev/null +++ b/server/plugins/privateAdmin.js @@ -0,0 +1,39 @@ +const User = require('../models/User') +const _privateAdminInfo = require('./privateAdminData') +const bcrypt = require('bcryptjs') +const database = require('../database') + +module.exports.createAdmins = () => { + database.once('open', async cb => { + for (const item of _privateAdminInfo) { + try { + const user = await User.findOne({username: item.username}) + if (!user) { + const data = { + firstName: item.firstName, + lastName: item.lastName, + username: item.username, + email : item.email, + mobileNumber : item.mobileNumber, + scope: ['admin'], + private: true, + registration_done: true, + permissions: ['superAdmin'], + portals: item.portals + } + // hash password + const salt = await bcrypt.genSalt(10) + const hash = await bcrypt.hash(item.password, salt) + data.password = hash + const newUser = new User(data) + newUser.save(err => { + if (err) console.log(err) + }) + } + } catch + (e) { + console.log('Private admin creation has error -- ', e) + } + } + }) +} diff --git a/server/plugins/privateAdminData.js b/server/plugins/privateAdminData.js new file mode 100644 index 0000000..3d55677 --- /dev/null +++ b/server/plugins/privateAdminData.js @@ -0,0 +1,55 @@ +////////////////////////////////// example +////////////////////////////////// +// module.exports = [ +// { +// first_name: '', +// last_name: '', +// username: '', +// password: '' +// }, +// { +// first_name: '', +// last_name: '', +// username: '', +// password: '' +// } +// ] +//////////////////////////////////// +//////////////////////////////////// example + + +////////////////////////////////////////////////// +////////////////////////////////////////////////// +////////////////////////////////////////////////// +// *remove data from this file after first run* // +////////////////////////////////////////////////// +////////////////////////////////////////////////// +////////////////////////////////////////////////// + + +module.exports = [ + { + firstName: 'Arman', + lastName: 'Mousavi', + username: 'manager', + password: '#$2021managementAdmin%', + email: 'admin1@gmail.com', + mobileNumber: '09365385627', + registration_done: true, + portals: ['ostandari', 'election'], + permissions: ['superAdmin'], + private: true + }, + { + firstName: 'admin', + lastName: 'admin', + username: 'negareh_support', + password: '*^@admin1234$#?@', + email: 'admin2@gmail.com', + mobileNumber: '000000', + registration_done: true, + portals: ['ostandari', 'election'], + permissions: ['superAdmin'], + private: true + } +] diff --git a/server/plugins/serverResponses.js b/server/plugins/serverResponses.js new file mode 100644 index 0000000..f2e6e83 --- /dev/null +++ b/server/plugins/serverResponses.js @@ -0,0 +1,751 @@ +module.exports._sr = { + fa: { + required: { + field: 'این فیلد نباید خالی باشد', + // developer validations + remember_me: 'پارامتر remember_me الزامی است', + // registration validations + name: 'نام را وارد کنید', + first_name: 'نام را وارد کنید', + last_name: 'نام خانوادگی را وارد کنید', + email: 'ایمیل را وارد کنید', + national_code: 'کد ملی الزامی است', + email_personal: 'ایمیل شخصی الزامی است', + email_company: 'ایمیل کمپانی برای اشخاص حقوقی الزامی است', + company_name: 'درصورتی که شخص حقوقی هستید، نام کمپانی را وارد کنید', + username: 'نام کاربری را وارد کنید', + phone_number: 'شماره تماس را وارد کنید', + password: 'پسورد را وارد کنید', + birthdate: 'تاریخ تولد را وارد کنید', + // addressing validations + country: 'کشور را وارد کنید', + province: 'استان را وارد کنید', + city: 'شهر را وارد کنید', + address: 'آدرس را وارد کنید', + postal_code: 'کد پستی را وارد کنید', + plaque: 'پلاک را وارد کنید', + receiver_first_name: 'نام گیرنده را وارد کنید', + receiver_last_name: 'نام خانوادگی گیرنده را وارد کنید', + receiver_mobile: 'شماره موبایل گیرنده را وارد کنید', + // global (post - gallery - ...) + title: 'عنوان را وارد کنید', + caption: 'متن را وارد کنید', + description: 'توضیحات را وارد کنید', + Twitter:'لینک Twitter را وارد کنید', + category: 'دسته بندی را انتخاب کنید', + image: 'عکس اجباری است', + cover: 'کاور اجباری است', + file: 'فایل اجباری است', + message: 'پیام را بنویسید', + quantity: 'تعداد را وارد کنید', + date: 'تاریخ را وارد کنید', + reason: 'دلیل را انتخاب کنید', + question: 'سوال را بنویسید', + answer: 'جواب را بنویسید', + price: 'قیمت را وارد کنید', + type: 'نوع را انتخاب کنید' + }, + format: { + phone_number: 'فرمت شماره تماس صحیح نیست', + email: 'فرمت ایمیل قابل قبول نیست', + number: 'مقدار باید از جنس عدد باشد', + boolean: 'مقدار باید از جنس Boolean باشد', + image: 'فرمت عکس قابل قبول نیست', + video: 'فرمت فیلم قابل قبول نیست', + national_code: 'کد ملی صحیح نیست' + }, + min_char: { + min2: 'حداقل 2 کاراکتر', + min4: 'حداقل 4 کاراکتر', + min8: 'حداقل 8 کاراکتر', + min10: 'حداقل 10 کاراکتر', + min20: 'حداقل 20 کاراکتر', + min30: 'حداقل 30 کاراکتر', + min40: 'حداقل 40 کاراکتر', + min50: 'حداقل 50 کاراکتر', + min60: 'حداقل 60 کاراکتر', + min100: 'حداقل 100 کاراکتر', + min120: 'حداقل 120 کاراکتر', + min150: 'حداقل 150 کاراکتر', + min200: 'حداقل 200 کاراکتر', + data_size: 'حجم قابل قبول حداقل: ', + image_width_size: 'عرض حداقل: ', + image_height_size: 'ارتفاع حداقل: ', + }, + max_char: { + max4: 'حداکثر 4 کاراکتر', + max8: 'حداکثر 8 کاراکتر', + max10: 'حداکثر 10 کاراکتر', + max15: 'حداکثر 15 کاراکتر', + max20: 'حداکثر 20 کاراکتر', + max30: 'حداکثر 30 کاراکتر', + max40: 'حداکثر 40 کاراکتر', + max50: 'حداکثر 50 کاراکتر', + max60: 'حداکثر 60 کاراکتر', + max100: 'حداکثر 100 کاراکتر', + max120: 'حداکثر 120 کاراکتر', + max150: 'حداکثر 150 کاراکتر', + max200: 'حداکثر 200 کاراکتر', + data_size: 'حجم قابل قبول حداکثر: ', + image_width_size: 'عرض حداکثر: ', + image_height_size: 'ارتفاع حداکثر: ', + }, + not_found: { + user_id: 'کاربری با این مشخصات وجود ندارد', + admin_id: 'ادمینی با این مشخصات وجود ندارد', + order_id: 'سفارشی با این مشخصات وجود ندارد', + item_id: 'موردی با این مشخصات وجود ندارد', + password: 'رمز عبور یا آیدی درست نیست', + email : 'هیچ کاربری با ایمیل مورد نظر پیدا نشده است', + category : 'دسته بندی انتخاب شده وحود ندارد' /** @todo add this string to another language */ + }, + duplicated: { + username: 'این نام کاربری از قبل وجود دارد', + email: 'این ایمیل از قبل وجود دارد', + name: 'نام تکراری است', + title: 'عنوان تکراری است', + phoneNumber : 'شماره همراه وجود دارد' + }, + response: { + logged_in: 'شما وارد سیستم شدید', + not_logged_in: 'شما وارد سیستم نشدید', + logged_out: 'شما از سیستم خارج شدید', + unauthenticated: 'غیرمجاز', + recovery_link: 'لینک بازیابی فرستاده شد', + success_save: 'با موفقیت ثبت شد', + success_remove: 'با موفقیت حذف شد', + cart_empty: 'سبد خرید خالی است', + already_has_address: 'آدرس قبلا اضافه شده', + activation_code: 'کد فعالسازی برای شما ارسال شد', + activation_email: 'ایمیل فعال سازی برای شما ارسال شد', + expired_reset_link: 'این لینک بازیابی منقضی شده است', + email_not_confirmed: 'ابتدا ایمیل خود را تایید کنید،لینک فعال سازی قبلا برای شما فرستاده شده است.', + expired_activation_link: 'این لینک فعال سازی منقضی شده است', + success_activation: 'اکانت شما با موفقیت فعال شد', + passwords_not_match: 'پسورد ها یکی نیست', + problem: 'مشکلی پیش آمده، لطفا دوباره تلاش کنید.', + latinChar: 'لطفا با حروف لاتین بنویسید', + persianChar: 'لطفا با حروف فارسی بنویسید', + whiteSpace: 'بین حروف و کلمات نباید فاصله باشد' + }, + optional: { + string : 'باید یک رشته باشد', + boolean : 'باید بولین باشد', + number : 'باید عدد باشد', + onlyValid : 'فقط این مقادیر قابل قبول می باشد' + }, + file_types: { + jpg: 'فقط فرمت jpg قابل قبول است', + png: 'فقط فرمت png قابل قبول است', + gif: 'فقط فرمت gif قابل قبول است', + pdf: 'فقط فرمت pdf قابل قبول است', + txt: 'فقط فرمت txt قابل قبول است', + log: 'فقط فرمت log قابل قبول است', + mp3: 'فقط فرمت mp3 قابل قبول است', + ogg: 'فقط فرمت ogg قابل قبول است', + wmv: 'فقط فرمت wmv قابل قبول است', + mp4: 'فقط فرمت mp4 قابل قبول است', + mov: 'فقط فرمت mov قابل قبول است', + mkv: 'فقط فرمت mkv قابل قبول است', + flv: 'فقط فرمت flv قابل قبول است' + } + }, + en: { + required: { + field: 'This field is required', + // developer validations + remember_me: 'Remember_me parameter required', + // registration validations + name: 'Enter name', + first_name: 'Enter first name', + last_name: 'Enter last name', + national_code: 'National code is required', + email: 'Enter email', + email_personal: 'Personal email is required', + email_company: 'Company email is required for legal entities', + company_name: 'Enter company name if you are a legal entity', + username: 'Enter username', + phone_number: 'Enter phone number', + password: 'Enter password', + birthdate: 'Enter birthdate', + // addressing validations + country: 'Enter country', + province: 'Enter province', + city: 'Enter city', + address: 'Enter address', + postal_code: 'Enter postal code', + plaque: 'Enter plaque', + receiver_first_name: 'Enter recipient name', + receiver_last_name: 'Enter recipient surname', + receiver_mobile: 'Enter recipient\'s mobile number', + // global (post - gallery - ...) + title: 'Enter title', + caption: 'Enter caption', + description: 'Enter description', + category: 'Select category', + image: 'Image is required', + cover: 'Cover is required', + file: 'File is required', + message: 'Write message', + quantity: 'Enter quantity', + date: 'Enter date', + reason: 'Select reason', + question: 'Write the question', + answer: 'Write the answer', + price: 'Enter Price', + type: 'Select type' + }, + format: { + phone_number: 'Phone number format in incorrect', + email: 'Email format is not correct', + number: 'Value must be number', + boolean: 'Value must be Boolean', + image: 'Photo format is not acceptable', + video: 'Video format is not acceptable', + national_code: 'National code format is not correct' + }, + min_char: { + min2: 'At least 2 characters', + min4: 'At least 4 characters', + min8: 'At least 8 characters', + min10: 'At least 10 characters', + min20: 'At least 20 characters', + min30: 'At least 30 characters', + min40: 'At least 40 characters', + min50: 'At least 50 characters', + min60: 'At least 60 characters', + min100: 'At least 100 characters', + min120: 'At least 120 characters', + min150: 'At least 150 characters', + min200: 'At least 200 characters', + data_size: 'Acceptable minimum size: ', + image_width_size: 'Minimum width: ', + image_height_size: 'Minimum height: ', + }, + max_char: { + max4: 'Maximum 4 characters', + max8: 'Maximum 8 characters', + max10: 'Maximum 10 characters', + max15: 'Maximum 15 characters', + max20: 'Maximum 20 characters', + max30: 'Maximum 30 characters', + max40: 'Maximum 40 characters', + max50: 'Maximum 50 characters', + max60: 'Maximum 60 characters', + max100: 'Maximum 100 characters', + max120: 'Maximum 120 characters', + max150: 'Maximum 150 characters', + max200: 'Maximum 200 characters', + data_size: 'Maximum acceptable size: ', + image_width_size: 'Maximum width: ', + image_height_size: 'Maximum height: ', + }, + not_found: { + user_id: 'There is no user with this profile', + admin_id: 'There is no admin with this profile', + order_id: 'There is no order with this profile', + item_id: 'There is no item with this specification', + password: 'Password or ID is incorrect', + email : 'No users were found with the email in question' + }, + duplicated: { + username: 'This username already exists', + email: 'This email already exists', + name: 'Name is duplicate', + title: 'Title is duplicate', + phoneNumber : 'phoneNumber already exists' + }, + response: { + logged_in: 'You are logged in', + not_logged_in: 'You are not logged in', + logged_out: 'You are logged out', + unauthenticated: 'unauthenticated', + recovery_link: 'Recovery link sent', + success_save: 'Successfully saved', + success_remove: 'Successfully removed', + cart_empty: 'Cart is empty', + already_has_address: 'Already has address', + activation_code: 'Activation code sent to you', + activation_email: 'Activation email sent to you', + expired_reset_link: 'The current reset pass link has been expired', + email_not_confirmed: 'Confirm your email first, the activation link has already been sent to you.', + expired_activation_link: 'This activation link has expired', + success_activation: 'Your account has been successfully activated', + passwords_not_match: 'Passwords are not the same', + problem: 'There is a problem, please try again.', + latinChar: 'Please write in Latin letters', + persianChar: 'Please write in Persian letters', + whiteSpace: 'There should be no space between letters and words' + }, + optional: { + string : 'must be a string', + boolean : 'must be boolean', + number : 'must be a number', + onlyValid : 'Only these values ​​are acceptable' + }, + file_types: { + jpg: 'Only jpg format is acceptable', + png: 'Only png format is acceptable', + gif: 'Only gif format is acceptable', + pdf: 'Only pdf format is acceptable', + txt: 'Only txt format is acceptable', + log: 'Only log format is acceptable', + mp3: 'Only mp3 format is acceptable', + ogg: 'Only ogg format is acceptable', + wmv: 'Only wmv format is acceptable', + mp4: 'Only mp4 format is acceptable', + mov: 'Only mov format is acceptable', + mkv: 'Only mkv format is acceptable', + flv: 'Only flv format is acceptable' + } + }, + de: { + required: { + field: 'This field is required', + // developer validations + remember_me: 'Remember_me-Parameter erforderlich', + // registration validations + name: 'Name eingeben', + first_name: 'Name eingeben', + last_name: 'Nachnamen eingeben', + national_code: "Nationaler Code ist erforderlich", + email: 'Email eingeben', + email_personal: 'Persönliche E-Mail ist erforderlich', + email_company: 'Für juristische Personen ist eine Unternehmens-E-Mail erforderlich', + company_name: 'Geben Sie den Firmennamen ein, wenn Sie eine juristische Person sind', + username: 'Geben Sie den Benutzernamen ein', + phone_number: 'Telefonnummer eingeben', + password: 'Passwort eingeben', + birthdate: 'Enter birthdate', + // addressing validations + country: 'Land eingeben', + province: 'Stadt betreten', + city: 'Stadt betreten', + address: 'Adresse eingeben', + postal_code: 'Postleitzahl eingeben', + plaque: 'Plakette eingeben', + receiver_first_name: 'Empfängername eingeben', + receiver_last_name: 'Nachname des Empfängers eingeben', + receiver_mobile: 'Handynummer des Empfängers eingebenr', + // global (post - gallery - ...) + title: 'Titel eingeben', + caption: 'Beschriftung eingeben', + description: 'Beschreibung eingeben', + category: 'Kategorie wählen', + image: 'Bild ist erforderlich', + cover: 'Bild ist erforderlich Abdeckung ist erforderlich', + file: 'Datei ist erforderlich', + message: 'Nachricht schreiben', + quantity: 'Menge eingeben', + date: 'Enter date', + reason: 'Grund auswählen', + question: 'Schreibe die Frage', + answer: 'Schreibe die Antwort', + price: 'Enter Price', + type: 'Select type' + }, + format: { + phone_number: 'Telefonnummernformat falsch', + email: 'E-Mail-Format nicht korrekt', + number: 'Wert muss Nummer sein', + boolean: 'Wert muss Boolescher Wert sein', + image: 'Photo format is not acceptable', + video: 'Video format is not acceptable', + national_code: "Nationales Codeformat ist nicht korrekt" + }, + min_char: { + min2: 'Mindestens 2 Zeichen', + min4: 'Mindestens 4 Zeichen', + min8: 'Mindestens 8 Zeichen', + min10: 'Mindestens 10 Zeichen', + min20: 'Mindestens 20 Zeichen', + min30: 'Mindestens 30 Zeichen', + min40: 'Mindestens 40 Zeichen', + min50: 'Mindestens 50 Zeichen', + min60: 'Mindestens 60 Zeichen', + min100: 'Mindestens 100 Zeichen', + min120: 'Mindestens 120 Zeichen', + min150: 'Mindestens 150 Zeichen', + min200: 'Mindestens 200 Zeichen', + data_size: 'Akzeptable Mindestgröße: ', + image_width_size: 'Mindestbreite: ', + image_height_size: 'Mindesthöhe: ', + }, + max_char: { + max4: 'Maximal 4 Zeichen', + max8: 'Maximal 8 Zeichen', + max10: 'Maximal 10 Zeichen', + max15: 'Maximal 15 Zeichen', + max20: 'Maximal 20 Zeichen', + max30: 'Maximal 30 Zeichen', + max40: 'Maximal 40 Zeichen', + max50: 'Maximal 50 Zeichen', + max60: 'Maximal 60 Zeichen', + max100: 'Maximal 100 Zeichen', + max120: 'Maximal 120 Zeichen', + max150: 'Maximal 150 Zeichen', + max200: 'Maximal 200 Zeichen', + data_size: 'Maximal zulässige Größe: ', + image_width_size: 'Maximale Breite: ', + image_height_size: 'Maximale Höhe: ', + }, + not_found: { + user_id: 'Es gibt keinen Benutzer mit diesem Profil', + admin_id: 'Es gibt keinen Administrator mit diesem Profil', + order_id: 'Es gibt keine Bestellung mit diesem Profil', + item_id: 'Es gibt keinen Artikel mit dieser Spezifikation', + password: 'Passwort oder ID ist falsch', + email : 'Mit der betreffenden E-Mail wurden keine Benutzer gefunden' + }, + duplicated: { + username: 'Dieser Benutzername existiert bereits', + email: 'Diese E-Mail existiert bereits', + name: 'Name ist doppelt', + title: 'Titel ist doppelt', + phoneNumber : 'phoneNumber existiert bereits' + }, + response: { + logged_in: 'Sie sind angemeldet', + not_logged_in: 'Sie sind nicht angemeldet', + logged_out: 'Sie sind abgemeldet', + unauthenticated: 'nicht authentifiziert', + recovery_link: 'Wiederherstellungslink gesendet', + success_save: 'Erfolgreich gespeichert', + success_remove: 'Erfolgreich entfernt', + cart_empty: 'Warenkorb ist leer', + ready_has_address: 'Hat bereits Adresse', + activation_code: 'Activation code sent to you', + activation_email: 'Activation email sent to you', + expired_reset_link: 'Der aktuelle Reset-Pass-Link ist abgelaufen', + email_not_confirmed: "Bestätigen Sie zuerst Ihre E-Mail, der Aktivierungslink wurde bereits an Sie gesendet.", + expired_activation_link: 'Dieser Aktivierungslink ist abgelaufen', + success_activation: 'Ihr Konto wurde erfolgreich aktiviert', + passwords_not_match: 'Passwörter sind nicht dasselbe', + problem: "Es gibt ein Problem, bitte versuchen Sie es erneut.", + latinChar: 'Please write in Latin letters', + persianChar: 'Please write in Persian letters', + whiteSpace: 'There should be no space between letters and words' + }, + optional: { + string : 'muss eine Zeichenfolge sein', + boolean : 'muss boolesch sein', + number : 'muss eine Nummer sein', + onlyValid : 'Nur diese Werte sind akzeptabel' + }, + file_types: { + jpg: 'Nur das jpg-Format ist akzeptabel', + png: 'Nur das png-Format ist akzeptabel', + gif: 'Nur das gif-Format ist akzeptabel', + pdf: 'Nur das PDF-Format ist akzeptabel', + txt: 'Nur das txt-Format ist akzeptabel', + log: 'Nur das log-Format ist akzeptabel', + mp3: 'Nur das mp3-Format ist akzeptabel', + ogg: 'Nur das ogg-Format ist akzeptabel', + wmv: 'Nur das wmv-Format ist akzeptabel', + mp4: 'Nur das mp4-Format ist akzeptabel', + mov: 'Nur das mov-Format ist akzeptabel', + mkv: 'Nur das mkv-Format ist akzeptabel', + flv: 'Nur das flv-Format ist akzeptabel' + } + }, + tr: { + required: { + field: 'This field is required', + // geliştirici doğrulamaları + Remember_me: 'Remember_me parametresi gerekli', + // kayıt doğrulamaları + name: 'Adı girin', + first_name: 'Adı girin', + last_name: 'Soyadı girin', + national_code: "Nationaler Kodu erforderlich", + email: 'E-posta girin', + email_personal: 'Kişisel e-posta gereklidir', + email_company: 'Tüzel kişiler için şirket e-postası gereklidir', + company_name: 'Tüzel kişiyseniz şirket adını girin', + username: 'Kullanıcı adını girin', + phone_number: 'Telefon numarasını girin', + password: 'Şifre girin', + birthdate: 'Enter birthdate', + // doğrulamaları adresleme + country: 'Ülke girin', + province: 'İl girin', + city: 'Şehir girin', + address: 'Adres girin', + postal_code: 'Posta kodunu girin', + plaque: 'Plak girin', + receiver_first_name: 'Alıcı adını girin', + receiver_last_name: 'Alıcının soyadını girin', + receiver_mobile: 'Alıcının cep telefonu numarasını girin', + // global (post - galeri - ...) + title: 'Başlığı girin', + caption: 'Başlık girin', + description: 'Açıklama girin', + category: 'Kategori seçin', + image: 'Resim gerekli', + cover: 'Kapak gereklidir', + file: 'Dosya gerekli', + message: 'Mesaj yaz', + quantity: 'Miktar girin', + date: 'Enter date', + reason: 'Nedeni seçin', + question: 'Soruyu yazın', + answer: 'Cevabı yaz', + price: 'Enter Price', + type: 'Select type' + }, + format: { + phone_number: 'Telefon numarası biçimi yanlış', + email: 'E-posta formatı doğru değil', + number: 'Değer sayı olmalıdır', + boolean: 'Değer Boole olmalıdır', + image: 'Photo format is not acceptable', + video: 'Video format is not acceptable', + national_code: 'Ulusal kod formatı doğru değil' + }, + min_char: { + min2: 'En az 2 karakter', + min4: 'En az 4 karakter', + min8: 'En az 8 karakter', + min10: 'En az 10 karakter', + min20: 'En az 20 karakter', + min30: 'En az 30 karakter', + min40: 'En az 40 karakter', + min50: 'En az 50 karakter', + min60: 'En az 60 karakter', + min100: 'En az 100 karakter', + min120: 'En az 120 karakter', + min150: 'En az 150 karakter', + min200: 'En az 200 karakter', + data_size: 'Kabul edilebilir minimum boyut: ', + image_width_size: 'Minimum genişlik: ', + image_height_size: 'Minimum yükseklik: ', + }, + max_char: { + max4: 'Maksimum 4 karakter', + max8: 'Maksimum 8 karakter', + max10: 'Maksimum 10 karakter', + max15: 'Maksimum 15 karakter', + max20: 'Maksimum 20 karakter', + max30: 'Maksimum 30 karakter', + max40: 'Maksimum 40 karakter', + max50: 'Maksimum 50 karakter', + max60: 'Maksimum 60 karakter', + max100: 'Maksimum 100 karakter', + max120: 'Maksimum 120 karakter', + max150: 'Maksimum 150 karakter', + max200: 'Maksimum 200 karakter', + data_size: 'Kabul edilebilir maksimum boyut: ', + image_width_size: 'Maksimum genişlik: ', + image_height_size: 'Maksimum yükseklik: ', + }, + not_found: { + user_id: 'Bu profile sahip kullanıcı yok', + admin_id: 'Bu profile sahip yönetici yok', + order_id: 'Bu profilde sipariş yok', + item_id: 'Bu spesifikasyona sahip hiçbir öğe yok', + password: 'Şifre veya kimlik yanlış', + email : 'Söz konusu e-postaya sahip kullanıcı bulunamadı' + }, + duplicated: { + username: 'Bu kullanıcı adı zaten mevcut', + email: 'Bu email zaten var', + name: 'Ad çift', + title: 'Başlık yineleniyor', + phoneNumber : 'phoneNumber zaten mevcut' + }, + response: { + logged_in: 'Giriş yaptınız', + not_logged_in: 'Giriş yapmadınız', + logged_out: 'Çıkış yaptınız', + unauthenticated: 'unauthenticated', + recovery_link: 'Kurtarma bağlantısı gönderildi', + success_save: 'Başarıyla kaydedildi', + success_remove: 'Başarıyla kaldırıldı', + cart_empty: 'Sepet boş', + already_has_address: 'Zaten adresi var', + activation_code: 'Activation code sent to you', + activation_email: 'Activation email sent to you', + expired_reset_link: 'Mevcut sıfırlama geçiş bağlantısının süresi doldu', + email_not_confirmed: 'Önce e-postanızı onaylayın, aktivasyon bağlantısı size zaten gönderildi.', + expired_activation_link: "Bu aktivasyon bağlantısının süresi doldu", + success_activation: 'Hesabınız başarıyla etkinleştirildi', + passwords_not_match: 'Şifreler aynı değil', + problem: 'Bir sorun var, lütfen tekrar deneyin.', + latinChar: 'Please write in Latin letters', + persianChar: 'Please write in Persian letters', + whiteSpace: 'There should be no space between letters and words' + }, + optional: { + string : 'bir dizi olmalı', + boolean : 'boole olmalı', + number : 'bir sayı olmalı', + onlyValid : 'Yalnızca bu değerler kabul edilebilir' + }, + file_types: { + jpg: 'Yalnızca jpg formatı kabul edilebilir', + png: 'Sadece png formatı kabul edilebilir', + gif: 'Yalnızca gif formatı kabul edilebilir', + pdf: 'Yalnızca pdf formatı kabul edilebilir', + txt: 'Yalnızca txt formatı kabul edilebilir', + log: 'Yalnızca log formatı kabul edilebilir', + mp3: 'Yalnızca mp3 formatı kabul edilebilir', + ogg: 'Yalnızca ogg formatı kabul edilebilir', + wmv: 'Yalnızca wmv formatı kabul edilebilir', + mp4: 'Yalnızca mp4 formatı kabul edilebilir', + mov: 'Yalnızca mov formatı kabul edilebilir', + mkv: 'Yalnızca mkv formatı kabul edilebilir', + flv: 'Yalnızca flv biçimi kabul edilebilir' + } + }, + it: { + required: { + field: 'This field is required', + // convalide dello sviluppatore + Remember_me: "Remember_me parameter required", + // convalide della registrazione + name: "Inserisci nome", + first_name: "Inserisci nome", + last_name: "Inserisci il cognome", + national_code: "Il codice Nationaler è comune", + email: "Enter email", + email_personal: "L'email personale è obbligatoria", + email_company: "L'email aziendale è obbligatoria per le persone giuridiche", + company_name: "Inserisci il nome dell'azienda se sei una persona giuridica", + username: "Inserisci nome utente", + phone_number: "Inserisci numero di telefono", + password: "Inserisci password", + birthdate: 'Enter birthdate', + // indirizzamento delle convalide + country: "Inserisci paese", + province: "Inserisci provincia", + city: "Inserisci città", + address: "Inserisci indirizzo", + postal_code: "Inserisci codice postale", + plaque: "Inserisci targa", + receiver_first_name: "Inserisci il nome del destinatario", + receiver_last_name: "Inserisci il cognome del destinatario", + receiver_mobile: "Inserisci il numero di cellulare del destinatario", + // globale (post - gallery - ...) + title: "Inserisci titolo", + caption: "Inserisci didascalia", + description: "Inserisci descrizione", + category: "Seleziona categoria", + image: "L'immagine è obbligatoria", + cover: "Cover is required", + file: "Il file è obbligatorio", + message: "Scrivi messaggio", + quantity: "Inserisci quantità", + date: 'Enter date', + reason: 'Seleziona motivo', + question: 'Scrivi la domanda', + answer: 'Scrivi la risposta', + price: 'Enter Price', + type: 'Select type' + }, + format: { + phone_number: "Formato del numero di telefono non corretto", + email: "Formato email non corretto", + number: "Il valore deve essere un numero", + boolean: "Il valore deve essere booleano", + image: 'Photo format is not acceptable', + video: 'Video format is not acceptable', + national_code: "Il formato del codice nazionale non è corretto" + }, + min_char: { + min2: "Almeno 2 caratteri", + min4: "Almeno 4 caratteri", + min8: "Almeno 8 caratteri", + min10: "Almeno 10 caratteri", + min20: "Almeno 20 caratteri", + min30: "Almeno 30 caratteri", + min40: "Almeno 40 caratteri", + min50: "Almeno 50 caratteri", + min60: "Almeno 60 caratteri", + min100: "Almeno 100 caratteri", + min120: "Almeno 120 caratteri", + min150: "Almeno 150 caratteri", + min200: "Almeno 200 caratteri", + data_size: "Dimensione minima accettabile: ", + image_width_size: "Larghezza minima: ", + image_height_size: "Altezza minima: ", + }, + max_char: { + max4: "Massimo 4 caratteri", + max8: "Massimo 8 caratteri", + max10: "Massimo 10 caratteri", + max15: "Massimo 15 caratteri", + max20: "Massimo 20 caratteri", + max30: "Massimo 30 caratteri", + max40: "Massimo 40 caratteri", + max50: "Massimo 50 caratteri", + max60: "Massimo 60 caratteri", + max100: "Massimo 100 caratteri", + max120: "Massimo 120 caratteri", + max150: "Massimo 150 caratteri", + max200: "Massimo 200 caratteri", + data_size: "Dimensione massima accettabile: ", + image_width_size: "Larghezza massima: ", + image_height_size: "Altezza massima: ", + }, + not_found: { + user_id: "Nessun utente con questo profilo", + admin_id: "Nessun amministratore con questo profilo", + order_id: "Nessun ordine con questo profilo", + item_id: "Nessun articolo con questa specifica", + password: "La password o l'ID non sono corretti", + email : "Nessun utente trovato con l'email in questione" + }, + duplicated: { + username: "Questo nome utente esiste già", + email: "Questa email esiste già", + name: "Il nome è duplicato", + title: "Il titolo è duplicato", + phoneNumber : "phoneNumber esiste già" + }, + response: { + logged_in: "Hai effettuato l'accesso", + not_logged_in: "Non sei loggato", + logged_out: "Sei disconnesso", + unauthenticated: "unauthenticated", + recovery_link: "Link di ripristino inviato", + success_save: "Salvataggio riuscito", + success_remove: "Rimosso con successo", + cart_empty: "Il carrello è vuoto", + already_has_address: "Ha già indirizzo", + activation_code: 'Activation code sent to you', + activation_email: 'Activation email sent to you', + expired_reset_link: "L'attuale link del passaggio di reimpostazione è scaduto", + email_not_confirmed: "Conferma prima la tua email, il link di attivazione ti è già stato inviato.", + expired_activation_link: "Questo link di attivazione è scaduto", + success_activation: "Il tuo account è stato attivato con successo", + passwords_not_match: "Le password non sono le stesse", + problem: "Si è verificato un problema, riprova.", + latinChar: 'Please write in Latin letters', + persianChar: 'Please write in Persian letters', + whiteSpace: 'There should be no space between letters and words' + }, + optional: { + string : 'deve essere una stringa', + boolean : 'deve essere booleano', + number : 'deve essere un numero', + onlyValid : 'Solo questi valori sono accettabili' + }, + file_types: { + jpg: "È accettabile solo il formato jpg", + png: "È accettabile solo il formato png", + gif: "È accettabile solo il formato GIF", + pdf: "È accettabile solo il formato pdf", + txt: "È accettabile solo il formato txt", + log: "È accettabile solo il formato log", + mp3: "È accettabile solo il formato mp3", + ogg: "È accettabile solo il formato ogg", + wmv: "È accettabile solo il formato wmv", + mp4: "È accettabile solo il formato mp4", + mov: "È accettabile solo il formato mov", + mkv: "È accettabile solo il formato mkv", + flv: "È accettabile solo il formato flv" + } + }, + supportedImageFormats: ['jpg', 'jpeg', 'png', 'webp'], + supportedVideoFormats: ['mp4', 'avi', 'wmv'] +} diff --git a/server/routes/admin.js b/server/routes/admin.js new file mode 100644 index 0000000..e579d85 --- /dev/null +++ b/server/routes/admin.js @@ -0,0 +1,6836 @@ +const {Router} = require('express') +const router = Router(); +const {hasPermission, hasSubPermission} = require('../authentication'); +/////////////////////////////////////////////////////////// controllers +const categoryController = require('../controllers/categoryController'); +const userController = require('../controllers/userController'); +const newsController = require('../controllers/newsController'); +const newsFileController = require('../controllers/newsFileController'); +const dynamicController = require('../controllers/dynamicController'); +const pdfController = require('../controllers/pdfController'); + +const contentController = require('../controllers/contentController'); +const pollController = require('../controllers/pollController'); +const yearBannerController = require('../controllers/yearBannerController'); +const counterDayController = require('../controllers/counterDayController'); +const galleryController = require('../controllers/galleryController'); +const permissionsController = require('../controllers/permissionsController'); +const portalController = require('../controllers/portalController'); +const commentController = require('../controllers/commentController'); +const linksController = require('../controllers/linksController'); +const sliderController = require('../controllers/sliderController'); +const homeController = require('../controllers/homeController'); +const occasionController = require('../controllers/occasionController'); +const electionController = require('../controllers/electionController'); +const dataBackupController = require('../controllers/dataBackupController'); +const meetingController = require('../controllers/meetingController'); +// Permission +/** + * @swagger + * /admin/permissions: + * get: + * summary: Get all permissions + * description: Retrieves all available permissions. + * tags: + * - Admin + * responses: + * '200': + * description: Permissions retrieved successfully. + * content: + * application/json: + * schema: + * type: array + * items: + * type: string + * description: Permission name. + * '500': + * description: Internal server error. Indicates that an unexpected error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +router.get('/permissions', permissionsController.getAll); +// Portals +/** + * @swagger + * /admin/portals: + * get: + * summary: Get portals based on user's permissions + * description: Retrieves portals based on the user's permissions. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: Portals retrieved successfully. + * content: + * application/json: + * schema: + * type: array + * items: + * type: object + * properties: + * value: + * type: string + * description: Portal value. + * label: + * type: string + * description: Portal label. + * '500': + * description: Internal server error. Indicates that an unexpected error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +router.get('/portals', portalController.getAll); + +router.post('/setScope/:id' , permissionsController.SetPermission) +/////////////// home controller +/** + * @swagger + * /admin/homePageSettings: + * get: + * summary: Get home page settings + * description: Retrieves home page settings based on the user's permissions and portal. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: query + * name: portal + * schema: + * type: string + * description: The portal for which the home page settings are requested. Defaults to 'ostandari'. + * responses: + * '200': + * description: Home page settings retrieved successfully. + * content: + * application/json: + * schema: + * type: object + * properties: + * s2: + * type: string + * description: Setting value for section 2. + * s3: + * type: string + * description: Setting value for section 3. + * s4: + * type: string + * description: Setting value for section 4. + * s5: + * type: array + * description: Setting value for section 5. + * items: + * type: string + * s6: + * type: string + * description: Setting value for section 6. + * s2Side: + * type: string + * description: Setting value for section 2 side. + * s3Side: + * type: string + * description: Setting value for section 3 side. + * s4Side: + * type: string + * description: Setting value for section 4 side. + * s5Side: + * type: string + * description: Setting value for section 5 side. + * s6Side: + * type: string + * description: Setting value for section 6 side. + * '403': + * description: Forbidden. Indicates that the user does not have permission to access the requested data. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the user does not have permission to access the requested data. + * '500': + * description: Internal server error. Indicates that an unexpected error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +router.get('/homePageSettings', homeController.getHomePage) +// Home Page Setting +/** + * @swagger + * /admin/homePageSettings: + * post: + * summary: Update home page settings + * description: Updates home page settings based on the user's permissions and portal. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: query + * name: portal + * schema: + * type: string + * description: The portal for which the home page settings are to be updated. Defaults to 'ostandari'. + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * s2: + * type: string + * description: Setting value for section 2. + * s3: + * type: string + * description: Setting value for section 3. + * s4: + * type: string + * description: Setting value for section 4. + * s5: + * type: array + * description: Setting value for section 5. + * items: + * type: string + * s6: + * type: string + * description: Setting value for section 6. + * s2Side: + * type: string + * description: Setting value for section 2 side. + * s3Side: + * type: string + * description: Setting value for section 3 side. + * s4Side: + * type: string + * description: Setting value for section 4 side. + * s5Side: + * type: string + * description: Setting value for section 5 side. + * s6Side: + * type: string + * description: Setting value for section 6 side. + * responses: + * '200': + * description: Home page settings updated successfully. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message indicating that the home page settings were updated successfully. + * '403': + * description: Forbidden. Indicates that the user does not have permission to update the home page settings for the requested portal. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the user does not have permission to update the home page settings. + * '500': + * description: Internal server error. Indicates that an unexpected error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +router.post('/homePageSettings', homeController.updateHomePage); +// Change Show InHome +/** + * @swagger + * /admin/changeShowInHome: + * put: + * summary: Change show in home setting + * description: Changes the show in home setting for a specific item (e.g., news, newsFile, gallery) based on its ID and model name. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * id: + * type: string + * description: The ID of the item to update. + * modelName: + * type: string + * enum: [news, newsFile, gallery] + * description: The model name of the item (e.g., news, newsFile, gallery). + * responses: + * '200': + * description: Show in home setting changed successfully. + * content: + * application/json: + * schema: + * type: object + * properties: + * id: + * type: string + * description: The ID of the item that was updated. + * modelName: + * type: string + * description: The model name of the item that was updated. + * showInHome: + * type: boolean + * description: The updated show in home setting. + * '404': + * description: Not found. Indicates that the item with the specified ID was not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating that the item with the specified ID was not found. + * '422': + * description: Unprocessable entity. Indicates that the request body contains validation errors. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Object containing validation errors. + * '500': + * description: Internal server error. Indicates that an unexpected error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +router.put('/changeShowInHome', homeController.changeShowInHome); +// Get all Show In Home +/** + * @swagger + * /admin/getAllShowInHomeFalse: + * get: + * summary: Get items with showInHome set to false + * description: Retrieves all items (e.g., news, news files, gallery items) with the showInHome setting set to false for a specific portal. + * tags: + * - Admin + * parameters: + * - in: query + * name: portal + * schema: + * type: string + * description: The portal name to filter the items. Defaults to 'ostandari' if not provided. + * responses: + * '200': + * description: Successful response with items having showInHome set to false. + * content: + * application/json: + * schema: + * type: object + * properties: + * news: + * type: array + * items: + * $ref: '#/components/schemas/News' + * description: Array of news items with showInHome set to false. + * newsFile: + * type: array + * items: + * $ref: '#/components/schemas/NewsFile' + * description: Array of news files with showInHome set to false. + * media: + * type: array + * items: + * $ref: '#/components/schemas/Gallery' + * description: Array of gallery items with showInHome set to false. + * '500': + * description: Internal server error. Indicates that an unexpected error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +router.get('/getAllShowInHome', homeController.getAllShowInHomeFalse) + +//////////////// category policy +// router.use('/category', ); + +//////////////// category + +/** + * @swagger + * /admin/category: + * post: + * summary: Add a new category + * description: Add a new category with various properties such as title, parent, navigation index, priority, and more. + * tags: + * - Admin + * requestBody: + * required: true + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/NewCategory' + * responses: + * '200': + * description: Successful response with the newly added category. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Category' + * '403': + * description: Forbidden. Indicates that the user does not have permission to add the category. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the reason for the forbidden access. + * '422': + * description: Unprocessable Entity. Indicates that there are validation errors in the request body. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Object containing validation errors. + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +router.post('/category', hasPermission('categories'), categoryController.addCategory); + +/** + * @swagger + * /admin/category/{id}: + * put: + * summary: Update a category + * description: Update an existing category with new data. + * tags: + * - Admin + * parameters: + * - in: path + * name: id + * description: ID of the category to update + * required: true + * schema: + * type: string + * requestBody: + * required: true + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/UpdateCategory' + * responses: + * '200': + * description: Successful response with the updated category. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Category' + * '403': + * description: Forbidden. Indicates that the user does not have permission to update the category. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the reason for the forbidden access. + * '404': + * description: Not Found. Indicates that the category with the specified ID was not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating that the category was not found. + * '422': + * description: Unprocessable Entity. Indicates that there are validation errors in the request body. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Object containing validation errors. + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +router.put('/category/:id', hasPermission('categories'), categoryController.updateCategory); + +/** + * @swagger + * /admin/category/{id}: + * delete: + * summary: Delete a category + * description: Delete an existing category by ID. + * tags: + * - Admin + * parameters: + * - in: path + * name: id + * description: ID of the category to delete + * required: true + * schema: + * type: string + * responses: + * '200': + * description: Successful response with the deleted category. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Category' + * '403': + * description: Forbidden. Indicates that the user does not have permission to delete the category. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the reason for the forbidden access. + * '404': + * description: Not Found. Indicates that the category with the specified ID was not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating that the category was not found. + * '422': + * description: Unprocessable Entity. Indicates that there are validation errors in the request body. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Object containing validation errors. + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +router.delete('/category/:id', hasPermission('categories'), categoryController.deletOneCategory); +/** + * @swagger + * /admin/category/permissions: + * get: + * summary: Get categories for permissions + * description: Retrieve categories for setting permissions, optionally filtered by type. + * tags: + * - Admin + * parameters: + * - in: query + * name: type + * description: Type of the categories to filter (optional) + * schema: + * type: string + * responses: + * '200': + * description: Successful response with the categories for permissions. + * content: + * application/json: + * schema: + * type: array + * items: + * $ref: '#/components/schemas/Category' + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +router.get('/category/permissions', categoryController.permissions); +/** + * @swagger + * /admin/category/getParent: + * get: + * summary: Get parent categories + * description: Retrieve parent categories, optionally filtered by type. + * tags: + * - Admin + * parameters: + * - in: query + * name: type + * description: Type of the categories to filter (optional) + * schema: + * type: string + * responses: + * '200': + * description: Successful response with the parent categories. + * content: + * application/json: + * schema: + * type: array + * items: + * $ref: '#/components/schemas/Category' + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +router.get('/category/getParent', categoryController.getParent); +/** + * @swagger + * /admin/category: + * get: + * summary: Get all categories + * description: Retrieve all categories, optionally filtered by user permissions and portal. + * tags: + * - Admin + * responses: + * '200': + * description: Successful response with the list of categories. + * content: + * application/json: + * schema: + * type: array + * items: + * $ref: '#/components/schemas/Category' + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ + +router.get('/category', hasPermission('categories'), categoryController.getAll); +// router.get('/category/getIndex' , hasPermission('categories') , categoryController.getNavIndex); +/** + * @swagger + * /admin/category/{id}: + * get: + * summary: Get one category by ID + * description: Retrieve a category by its ID, ensuring the user has access to the category based on their permissions. + * tags: + * - Admin + * parameters: + * - in: path + * name: id + * required: true + * schema: + * type: string + * description: The ID of the category to retrieve. + * responses: + * '200': + * description: Successful response with the category data. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Category' + * '403': + * description: Forbidden. Indicates that the user does not have access to the requested category. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the user does not have permission to access the category. + * '404': + * description: Not Found. Indicates that the category was not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the category was not found. + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +router.get('/category/:id', hasPermission('categories'), categoryController.getOneCategory); +/** + * @swagger + * /admin/category/search: + * post: + * summary: Search categories + * description: Search for categories by title using a search term. The search is case-insensitive. + * tags: + * - Admin + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * term: + * type: string + * description: The search term to look for in category titles. + * responses: + * '200': + * description: Successful response with the list of matching categories. + * content: + * application/json: + * schema: + * type: array + * items: + * $ref: '#/components/schemas/Category' + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +router.post('/category/search', hasPermission('categories'), categoryController.search); +/** + * @swagger + * /admin/category/termsFile/{categoryId}: + * post: + * summary: Add terms file to a category + * description: Add a PDF terms file to a specified category by providing the title and file. + * tags: + * - Admin + * parameters: + * - in: path + * name: categoryId + * required: true + * schema: + * type: string + * description: The ID of the category to which the terms file will be added. + * requestBody: + * required: true + * content: + * multipart/form-data: + * schema: + * type: object + * properties: + * termsTitle: + * type: string + * description: The title of the terms file. + * file: + * type: string + * format: binary + * description: The PDF file to be uploaded. + * responses: + * '200': + * description: Terms file successfully added to the category. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message. + * '422': + * description: Validation error. Indicates that the input data is invalid or the file is missing/invalid format. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * properties: + * file: + * type: object + * properties: + * msg: + * type: string + * description: Error message indicating the validation issue. + * '404': + * description: Category not found. Indicates that the specified category ID does not exist. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the category was not found. + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +router.post('/category/termsFile/:categoryId', hasPermission('categories'), categoryController.addTermsFileToCategory); +/** + * @swagger + * /admin/category/termsFile/{fileId}: + * delete: + * summary: Remove terms file from a category + * description: Delete a terms file from a specified category by providing the file ID. + * tags: + * - Admin + * parameters: + * - in: path + * name: fileId + * required: true + * schema: + * type: string + * description: The ID of the terms file to be removed. + * responses: + * '200': + * description: Terms file successfully removed from the category. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message. + * '404': + * description: Terms file or category not found. Indicates that the specified file ID or category does not exist. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the terms file or category was not found. + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +router.delete('/category/termsFile/:fileId', hasPermission('categories'), categoryController.removeTermsFileFromCategory); +// router.delete('/category' , categoryController.deleteAllCategory); + +//////////////// users policy +// router.use('/user', hasPermission('users')); + +/////////////// users +/** + * @swagger + * /admin/user/registerAdmin: + * post: + * summary: Register a new admin + * description: Register a new admin user with the provided details. + * tags: + * - Admin + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * required: + * - firstName + * - lastName + * - username + * - password + * - permissions + * - portals + * properties: + * firstName: + * type: string + * description: First name of the admin + * lastName: + * type: string + * description: Last name of the admin + * username: + * type: string + * description: Username of the admin + * password: + * type: string + * description: Password for the admin account + * email: + * type: string + * description: Email address of the admin + * mobileNumber: + * type: string + * description: Mobile number of the admin + * permissions: + * type: array + * items: + * type: string + * description: List of permissions for the admin + * specialPermissions: + * type: array + * items: + * type: string + * description: List of special permissions for the admin + * portals: + * type: array + * items: + * type: string + * description: List of portals the admin has access to + * registration_done: + * type: boolean + * description: Whether the registration process is completed + * profilePic: + * type: string + * format: binary + * description: Profile picture of the admin + * responses: + * '201': + * description: Admin successfully registered. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message. + * '422': + * description: Validation error. Indicates that one or more of the provided fields are invalid. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Detailed validation errors. + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +router.post('/user/registerAdmin', hasPermission('users'), userController.registerAdmin); +/** + * @swagger + * /admin/user/changeStatus/{id}: + * put: + * summary: Change the status of a user + * description: Toggle the registration status of a user. + * tags: + * - Admin + * parameters: + * - in: path + * name: id + * schema: + * type: string + * required: true + * description: The ID of the user to change the status for + * responses: + * '200': + * description: User status successfully changed. + * content: + * application/json: + * schema: + * type: string + * example: { "message": "عملیات با موفقیت انجام شد" } + * '404': + * description: User not found. + * content: + * application/json: + * schema: + * type: string + * example: { "message": "کاربر مورد نظر پیدا نشد" } + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: string + */ +router.put('/user/changeStatus/:id', hasPermission('users'), userController.changeUserStatus); +/** + * @swagger + * /admin/user/changePass/{id}: + * put: + * summary: Change the password of a user + * description: Allows an admin to change the password of a user. + * tags: + * - Admin + * parameters: + * - in: path + * name: id + * schema: + * type: string + * required: true + * description: The ID of the user whose password is to be changed + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * password: + * type: string + * example: new_password + * description: The new password for the user + * password_confirmation: + * type: string + * example: new_password + * description: Confirmation of the new password + * responses: + * '200': + * description: User password successfully changed. + * content: + * application/json: + * schema: + * type: string + * example: { "message": "عملیات با موفقیت انجام شد" } + * '403': + * description: Forbidden. Indicates the current user is not allowed to change this user's password. + * content: + * application/json: + * schema: + * type: string + * example: { "message": "شما نمی توانید رمز عبور این کاربر را تغییر دهید" } + * '404': + * description: User not found. + * content: + * application/json: + * schema: + * type: string + * example: { "message": "کاربر مورد نظر پیدا نشد" } + * '422': + * description: Validation error. Indicates that the input data is invalid. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * example: { "password": { "msg": "طول رمز عبور باید حداقل 4 کاراکتر باشد" } } + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: string + * example: { "message": "مشکلی در اجرای درخواست شما بوجود امده است" } + */ +router.put('/user/changePass/:id', hasPermission('users'), userController.changePassword); +/** + * @swagger + * /admin/user: + * get: + * summary: Retrieve a list of all users + * description: Fetches a paginated list of all non-private users. + * tags: + * - Admin + * parameters: + * - in: query + * name: page + * schema: + * type: integer + * required: false + * description: Page number for pagination + * responses: + * '200': + * description: A paginated list of users. + * content: + * application/json: + * schema: + * type: object + * properties: + * docs: + * type: array + * items: + * $ref: '#/components/schemas/User' + * totalDocs: + * type: integer + * limit: + * type: integer + * totalPages: + * type: integer + * page: + * type: integer + * pagingCounter: + * type: integer + * hasPrevPage: + * type: boolean + * hasNextPage: + * type: boolean + * prevPage: + * type: integer + * nullable: true + * nextPage: + * type: integer + * nullable: true + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: string + * example: { "message": "مشکلی در گرفتن اطلاعات پیش آمده لطفا دوباره تلاش کنید" } + */ +router.get('/user', hasPermission('users'), userController.getAllUsers); +/** + * @swagger + * /admin/user/{id}: + * get: + * summary: Retrieve user details by admin + * description: Fetches details of a user by their ID, accessible by admin users. + * tags: + * - Admin + * parameters: + * - in: path + * name: id + * schema: + * type: string + * required: true + * description: The ID of the user to retrieve + * responses: + * '200': + * description: User details retrieved successfully. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/User' + * '404': + * description: User not found. + * content: + * application/json: + * schema: + * type: string + * example: { "message": "کاربر مورد نظر پیدا نشد" } + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: string + * example: { "message": "An error occurred while processing your request." } + */ +router.get('/user/:id', hasPermission('users'), userController.getUserByAdmin); +/** + * @swagger + * /admin/user/{id}: + * delete: + * summary: Delete a user by admin + * description: Deletes a user by their ID, accessible by admin users. Ensures that private users cannot be deleted. + * tags: + * - Admin + * parameters: + * - in: path + * name: id + * schema: + * type: string + * required: true + * description: The ID of the user to delete + * responses: + * '200': + * description: User deleted successfully. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/User' + * '403': + * description: Forbidden. Indicates that the user is private and cannot be deleted. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "شما نمیتوانید این کاربر را حذف کنید" + * '404': + * description: User not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "کاربر مورد نظر پیدا نشد" + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "An error occurred while processing your request." + */ +router.delete('/user/:id', hasPermission('users'), userController.deleteOneUser); +/** + * @swagger + * /admin/user/{id}: + * put: + * summary: Update a user by admin + * description: Updates a user's information by their ID, accessible by admin users. Ensures that private users cannot be updated by regular users. + * tags: + * - Admin + * parameters: + * - in: path + * name: id + * schema: + * type: string + * required: true + * description: The ID of the user to update + * - in: formData + * name: firstName + * schema: + * type: string + * required: true + * description: The user's first name + * - in: formData + * name: lastName + * schema: + * type: string + * required: true + * description: The user's last name + * - in: formData + * name: mobileNumber + * schema: + * type: string + * description: The user's mobile number + * - in: formData + * name: permissions + * schema: + * type: array + * items: + * type: string + * description: The user's permissions + * - in: formData + * name: specialPermissions + * schema: + * type: array + * items: + * type: string + * description: The user's special permissions + * - in: formData + * name: portals + * schema: + * type: array + * items: + * type: string + * description: The user's portals + * - in: formData + * name: registration_done + * schema: + * type: boolean + * description: The user's registration status + * requestBody: + * required: true + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/User' + * responses: + * '200': + * description: User updated successfully. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/User' + * '403': + * description: Forbidden. Indicates that the user is private and cannot be updated. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "شما نمیتوانید این کاربر را آپدیت کنید" + * '404': + * description: User not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "کاربر مورد نظر پیدا نشد" + * '422': + * description: Unprocessable Entity. Indicates that there was an issue with the request body. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * properties: + * firstName: + * type: string + * example: "فیلد نام الزامی است" + * lastName: + * type: string + * example: "فیلد نام خانوادگی الزامی است" + * ... + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "An error occurred while processing your request." + */ +router.put('/user/:id', hasPermission('users'), userController.updateUser); +/** + * @swagger + * /admin/user/search: + * post: + * summary: Search for users + * description: Searches for users based on various criteria such as name, email, phone, permissions, specialPermissions, portals, status, and username. + * tags: + * - Admin + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * name: + * type: string + * description: Name of the user + * email: + * type: string + * description: Email of the user + * phone: + * type: string + * description: Phone number of the user + * permissions: + * type: array + * items: + * type: string + * description: Permissions of the user + * specialPermissions: + * type: array + * items: + * type: string + * description: Special permissions of the user + * portals: + * type: array + * items: + * type: string + * description: Portals of the user + * status: + * type: boolean + * description: Registration status of the user + * username: + * type: string + * description: Username of the user + * responses: + * '200': + * description: Users found successfully. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/User' + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "An error occurred while processing your request." + */ +router.post('/user/search', hasPermission('users'), userController.search); +/** + * @swagger + * /admin/profile: + * get: + * summary: Get admin profile + * description: Retrieves the profile information of the authenticated admin user. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: Admin profile retrieved successfully. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/User' + * '404': + * description: Admin profile not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "کاربر مورد نظر پیدا نشد" + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "مشکلی در اجرای درخواست شما بوجود امده است" + */ +router.get('/profile', userController.getProfile); +/** + * @swagger + * /admin/profile: + * put: + * summary: Update admin profile + * description: Updates the profile information of the authenticated admin user. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * firstName: + * type: string + * lastName: + * type: string + * email: + * type: string + * mobileNumber: + * type: string + * profilePic: + * type: string + * required: + * - firstName + * - lastName + * responses: + * '200': + * description: Admin profile updated successfully. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/User' + * '422': + * description: Validation error. Indicates that the request body did not pass the validation checks. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * '404': + * description: Admin profile not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "کاربر مورد نظر پیدا نشد" + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "مشکلی در اجرای درخواست شما بوجود امده است" + */ +router.put('/profile', userController.updateProfile); +/** + * @swagger + * /admin/profile/changePass: + * put: + * summary: Change admin password + * description: Changes the password of the authenticated admin user. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * password: + * type: string + * password_confirmation: + * type: string + * required: + * - password + * - password_confirmation + * responses: + * '200': + * description: Admin password changed successfully. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "ذخیره با موفقیت انجام شد." + * '422': + * description: Validation error. Indicates that the request body did not pass the validation checks. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * '404': + * description: Admin profile not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "کاربر مورد نظر پیدا نشد" + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "مشکلی در اجرای درخواست شما بوجود امده است" + */ +router.put('/profile/changePass', userController.changePasswordProfile); + + +router.post('/book/add', pdfController.AddPDF) + +router.get('/book/:id', pdfController.GetOne) + +router.delete('/book/:id', pdfController.DeleteOne) + + +//////////////// news policy +router.use('/news', hasPermission('news')); + +/** + * @swagger + * /admin/news: + * post: + * summary: Add news + * description: Add a new news article. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * title: + * type: string + * leadTitle: + * type: string + * catId: + * type: string + * priority: + * type: boolean + * allowComment: + * type: boolean + * showInHome: + * type: boolean + * special: + * type: boolean + * notifications: + * type: boolean + * siteMap: + * type: boolean + * publish: + * type: boolean + * keywords: + * type: array + * items: + * type: string + * metaTagDesc: + * type: string + * modelType: + * type: string + * newsFileId: + * type: string + * responses: + * '200': + * description: New news article added successfully. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/News' + * '422': + * description: Validation error. Indicates that the request body did not pass the validation checks. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * '404': + * description: News file not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "پرونده خبری انتخاب شده وجود ندارد" + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "مشکلی در اجرای درخواست شما بوجود امده است" + */ +router.post('/news', newsController.addNews); +/** + * @swagger + * /admin/news/{id}: + * put: + * summary: Update news + * description: Update an existing news article. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: id + * required: true + * description: ID of the news article to update + * schema: + * type: string + * requestBody: + * required: true + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/News' + * responses: + * '200': + * description: Updated news article successfully. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/News' + * '422': + * description: Validation error. Indicates that the request body did not pass the validation checks. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * '404': + * description: News article not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "خبر مورد نظر پیدا نشد" + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "مشکلی در اجرای درخواست شما بوجود امده است" + */ +router.put('/news/:id', newsController.updateNews); +/** + * @swagger + * /admin/news/{id}: + * delete: + * summary: Delete news + * description: Delete a news article by its ID. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: id + * required: true + * description: ID of the news article to delete + * schema: + * type: string + * responses: + * '200': + * description: News article deleted successfully. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/News' + * '403': + * description: Forbidden. Indicates that the user does not have permission to delete the news article. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "شما مجاز به حذف این خبر نمی باشید" + * '404': + * description: News article not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "خبر مورد نظر پیدا نشد" + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "مشکلی در اجرای درخواست شما بوجود امده است" + */ + +router.get('/news/mostviewed' , newsController.MostViewdNews) + +router.delete('/news/:id', newsController.deletOneNews); +/** + * @swagger + * /admin/news: + * get: + * summary: Get all news articles + * description: Retrieve all news articles. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: query + * name: page + * schema: + * type: integer + * description: Page number for paginated results + * - in: query + * name: limit + * schema: + * type: integer + * description: Maximum number of news articles to return per page + * responses: + * '200': + * description: List of news articles retrieved successfully. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/NewsPagination' + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "مشکلی در گرفتن اطلاعات پیش آمده است" + */ +router.get('/news', newsController.getAll); +/** + * @swagger + * /admin/news/search: + * post: + * summary: Search news articles + * description: Search for news articles based on various criteria. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * term: + * type: string + * description: The search term to look for in the title and summary of news articles. + * catId: + * type: string + * description: The category ID to filter news articles by. + * showInHome: + * type: boolean + * description: Filter news articles based on whether they should be shown on the home page or not. + * publish: + * type: boolean + * description: Filter news articles based on their publish status. + * portals: + * type: array + * items: + * type: string + * description: The portals to filter news articles by. + * status: + * type: boolean + * description: Filter news articles based on their status. + * notifications: + * type: boolean + * description: Filter news articles based on their notification status. + * special: + * type: boolean + * description: Filter news articles based on their special status. + * newsFile: + * type: string + * description: The news file ID to filter news articles by. + * date: + * type: array + * items: + * type: string + * format: date + * description: An array containing start and end dates to filter news articles by custom date. + * responses: + * '200': + * description: List of news articles matching the search criteria retrieved successfully. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/NewsPagination' + * '500': + * description: Internal server error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "خطای سرور: مشکلی در جستجوی خبرها رخ داده است" + */ +router.post('/news/search', newsController.search); +/** + * @swagger + * /admin/news/{id}: + * get: + * summary: Get a news article by ID + * description: Retrieve a single news article by its ID. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: id + * required: true + * description: ID of the news article to retrieve. + * schema: + * type: string + * responses: + * '200': + * description: News article retrieved successfully. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/News' + * '403': + * description: Forbidden. Indicates that the user does not have permission to access the news article. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "شما اجازه دسترسی به اطلاعات این خبر را ندارید" + * '404': + * description: Not Found. Indicates that the requested news article was not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "خبر مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "خطای سرور: مشکلی در بازیابی خبر رخ داده است" + */ +router.get('/news/:id', newsController.getOneNews); +/** + * @swagger + * /admin/news/attachments/{newsId}: + * post: + * summary: Add an attachment to a news article + * description: Add an attachment to a news article by providing the news article ID. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: newsId + * required: true + * description: ID of the news article to which the attachment will be added. + * schema: + * type: string + * - in: formData + * name: attTitle + * required: true + * description: Title of the attachment. + * schema: + * type: string + * - in: formData + * name: file + * required: true + * description: The attachment file to upload (PDF format). + * schema: + * type: file + * responses: + * '200': + * description: Attachment added successfully to the news article. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "ذخیره با موفقیت انجام شد" + * '422': + * description: Unprocessable Entity. Indicates that the request was well-formed but unable to be followed due to validation errors. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * properties: + * file: + * type: string + * example: "فقط فرمت PDF قابل قبول است" + * '404': + * description: Not Found. Indicates that the requested news article was not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "خبر مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "خطای سرور: مشکلی در ذخیره اطلاعات رخ داده است" + */ +router.post('/news/attachments/:newsId', newsController.addAttachmentToNews); +/** + * @swagger + * /admin/news/attachments/{fileId}: + * delete: + * summary: Remove an attachment from a news article + * description: Remove an attachment from a news article by providing the attachment ID. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: fileId + * required: true + * description: ID of the attachment to be removed. + * schema: + * type: string + * responses: + * '200': + * description: Attachment removed successfully from the news article. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "حذف با موفقیت انجام شد" + * '404': + * description: Not Found. Indicates that the requested attachment was not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "فایل مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "خطای سرور: مشکلی در ذخیره اطلاعات رخ داده است" + */ +router.delete('/news/attachments/:fileId', newsController.removeAttachmentFromNews); + + + +/** + * @swagger + * /admin/newsFile: + * post: + * summary: Add a news file + * description: Add a news file with relevant details like title, description, category, etc. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * requestBody: + * required: true + * content: + * multipart/form-data: + * schema: + * type: object + * properties: + * title: + * type: string + * description: Title of the news file. + * description: + * type: string + * description: Description of the news file (optional). + * catId: + * type: string + * description: ID of the category associated with the news file. + * index: + * type: number + * description: Order of display for the news file. + * showInHome: + * type: boolean + * description: Indicates whether the news file should be shown on the home page. + * siteMap: + * type: boolean + * description: Indicates whether the news file should be included in the site map. + * modelType: + * type: string + * description: Model type of the news file. + * cover: + * type: string + * format: binary + * description: Cover image for the news file (optional). + * responses: + * '200': + * description: News file added successfully. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/NewsFile' + * '422': + * description: Unprocessable Entity. Indicates that one or more request parameters are missing or invalid. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Validation errors. + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "خطای سرور: مشکلی در اضافه کردن پرونده پرونده خبریی پیش آمده است" + */ +router.post('/newsFile', hasPermission('newsFile'), newsFileController.addNewsFile); +/** + * @swagger + * /admin/newsFile/{id}: + * put: + * summary: Update a news file + * description: Update details of a specific news file. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: id + * required: true + * description: ID of the news file to update. + * schema: + * type: string + * requestBody: + * required: true + * content: + * multipart/form-data: + * schema: + * type: object + * properties: + * title: + * type: string + * description: Title of the news file. + * description: + * type: string + * description: Description of the news file (optional). + * catId: + * type: string + * description: ID of the category associated with the news file. + * index: + * type: number + * description: Order of display for the news file. + * showInHome: + * type: boolean + * description: Indicates whether the news file should be shown on the home page. + * siteMap: + * type: boolean + * description: Indicates whether the news file should be included in the site map. + * modelType: + * type: string + * description: Model type of the news file. + * cover: + * type: string + * format: binary + * description: Cover image for the news file (optional). + * responses: + * '200': + * description: News file updated successfully. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/NewsFile' + * '422': + * description: Unprocessable Entity. Indicates that one or more request parameters are missing or invalid. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Validation errors. + * '403': + * description: Forbidden. Indicates that the user does not have permission to update the news file. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "شما اجازه آپدیت این پرونده خبری را ندارید" + * '404': + * description: Not Found. Indicates that the news file with the provided ID was not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "پرونده خبری مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "خطای سرور: مشکلی در آپدیت کردن پرونده خبریی پیش آمده است" + */ +router.put('/newsFile/:id', hasPermission('newsFile'), newsFileController.updateNewsFile); +/** + * @swagger + * /admin/newsFile/{id}: + * delete: + * summary: Delete a news file + * description: Delete a specific news file by its ID. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: id + * required: true + * description: ID of the news file to delete. + * schema: + * type: string + * responses: + * '200': + * description: News file deleted successfully. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/NewsFile' + * '403': + * description: Forbidden. Indicates that the user does not have permission to delete the news file. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "شما اجازه حذف این پرونده خبری را ندارید" + * '404': + * description: Not Found. Indicates that the news file with the provided ID was not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "پرونده خبری مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "Internal Server Error: Something went wrong" + */ +router.delete('/newsFile/:id', hasPermission('newsFile'), newsFileController.deletOneNewsFile); +/** + * @swagger + * /admin/newsFile: + * get: + * summary: Get all news files + * description: Retrieve all news files based on user permissions. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: A list of news files retrieved successfully. + * content: + * application/json: + * schema: + * type: array + * items: + * $ref: '#/components/schemas/NewsFile' + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "Internal Server Error: Something went wrong" + */ +router.get('/newsFile', newsFileController.getAll); +/** + * @swagger + * /admin/newsFile/{id}: + * get: + * summary: Get a news file by ID + * description: Retrieve a news file by its ID. + * tags: + * - Admin + * parameters: + * - in: path + * name: id + * required: true + * description: ID of the news file to retrieve. + * schema: + * type: string + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: The news file retrieved successfully. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/NewsFile' + * '403': + * description: Forbidden. Indicates that the user does not have access to view the requested news file. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "شما اجازه دسترسی به اطلاعات این پرونده خبری را ندارید" + * '404': + * description: Not Found. Indicates that the requested news file with the given ID does not exist. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "پرونده خبری مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "Internal Server Error: Something went wrong" + */ +router.get('/newsFile/:id', hasPermission('newsFile'), newsFileController.getOneNewsFile); +/** + * @swagger + * /admin/newsFile/search: + * post: + * summary: Search for news files + * description: Search for news files based on various criteria such as title, category, portals, etc. + * tags: + * - Admin + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * term: + * type: string + * description: The search term. + * showInHome: + * type: boolean + * description: Indicates whether the news files should be shown on the home page. + * catId: + * type: string + * description: The ID of the category to filter the news files. + * portals: + * type: array + * items: + * type: string + * description: The portals to filter the news files. + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: The search was successful. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/NewsFile' + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "Internal Server Error: Something went wrong" + */ +router.post('/newsFile/search', hasPermission('newsFile'), newsFileController.search); + +//////////////// contents policy +router.use('/content', hasPermission('contents')); + +/** + * @swagger + * /admin/content: + * post: + * summary: Add new content + * description: Add new content to the system with the provided details. + * tags: + * - Admin + * requestBody: + * required: true + * content: + * multipart/form-data: + * schema: + * type: object + * properties: + * title: + * type: string + * description: The title of the content. + * param: + * type: string + * description: The parameter for the content. + * pageContent: + * type: string + * description: The content of the page. + * email: + * type: string + * description: The email associated with the content. + * showInMenu: + * type: boolean + * description: Indicates whether the content should be shown in the menu. + * cover: + * type: string + * format: binary + * description: The cover image for the content. + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: The content was successfully added. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Content' + * '422': + * description: Unprocessable Entity. Indicates that the request was well-formed but contains invalid parameters. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Object containing validation errors. + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "Internal Server Error: Something went wrong" + */ +router.post('/content', contentController.addContent); +/** + * @swagger + * /admin/content/{param}: + * put: + * summary: Update content + * description: Update existing content with the provided details. + * tags: + * - Admin + * parameters: + * - in: path + * name: param + * required: true + * description: The parameter of the content to update. + * schema: + * type: string + * requestBody: + * required: true + * content: + * multipart/form-data: + * schema: + * type: object + * properties: + * title: + * type: string + * description: The updated title of the content. + * pageContent: + * type: string + * description: The updated content of the page. + * email: + * type: string + * description: The updated email associated with the content. + * showInMenu: + * type: boolean + * description: Indicates whether the content should be shown in the menu. + * cover: + * type: string + * format: binary + * description: The updated cover image for the content. + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: The content was successfully updated. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Content' + * '404': + * description: Not Found. Indicates that the requested content was not found. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '422': + * description: Unprocessable Entity. Indicates that the request was well-formed but contains invalid parameters. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Object containing validation errors. + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "Internal Server Error: Something went wrong" + */ +router.put('/content/:param', contentController.updateContent); +/** + * @swagger + * /admin/content/{param}: + * get: + * summary: Get one content + * description: Retrieve details of a specific content identified by its parameter. + * tags: + * - Admin + * parameters: + * - in: path + * name: param + * required: true + * description: The parameter of the content to retrieve. + * schema: + * type: string + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: The requested content details. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Content' + * '404': + * description: Not Found. Indicates that the requested content was not found. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "Internal Server Error: Something went wrong" + */ +router.get('/content/:param', contentController.getOneContent); + +//////////////// comments policy +// router.use('/comment/:model', hasPermission('newsComment')); + +router.param('model', hasSubPermission()) +/** + * @swagger + * /admin/comment/{model}/changeStatus/{id}: + * put: + * summary: Change status of a comment + * description: Change the status of a comment (allowShow) identified by its ID. + * tags: + * - Admin + * parameters: + * - in: path + * name: model + * required: true + * description: The model type of the comment. + * schema: + * type: string + * - in: path + * name: id + * required: true + * description: The ID of the comment to update. + * schema: + * type: string + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: The updated comment object. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Comment' + * '404': + * description: Not Found. Indicates that the requested comment was not found. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "Internal Server Error: Something went wrong" + */ +router.put('/comment/:model/changeStatus/:id', commentController.changeStatus); +/** + * @swagger + * /admin/comment/{model}/{id}: + * put: + * summary: Update a comment + * description: Update a comment identified by its ID. + * tags: + * - Admin + * parameters: + * - in: path + * name: model + * required: true + * description: The model type of the comment. + * schema: + * type: string + * - in: path + * name: id + * required: true + * description: The ID of the comment to update. + * schema: + * type: string + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * name: + * type: string + * description: + * type: string + * email: + * type: string + * format: email + * allowShow: + * type: boolean + * example: + * name: John Doe + * description: This is a comment. + * email: john@example.com + * allowShow: true + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: The updated comment object. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Comment' + * '404': + * description: Not Found. Indicates that the requested comment was not found. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '422': + * description: Unprocessable Entity. Indicates that there were validation errors in the request body. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * example: + * name: "Name is required" + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "Internal Server Error: Something went wrong" + */ +router.put('/comment/:model/:id', commentController.updateComment); +/** + * @swagger + * /admin/comment/{model}/{id}: + * delete: + * summary: Delete a comment + * description: Delete a comment identified by its ID. + * tags: + * - Admin + * parameters: + * - in: path + * name: model + * required: true + * description: The model type of the comment. + * schema: + * type: string + * - in: path + * name: id + * required: true + * description: The ID of the comment to delete. + * schema: + * type: string + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: The deleted comment object. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Comment' + * '404': + * description: Not Found. Indicates that the requested comment was not found. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "Internal Server Error: Something went wrong" + */ +router.delete('/comment/:model/:id', commentController.deletOneComment); +/** + * @swagger + * /admin/comment/countAll/{model}: + * get: + * summary: Get count of all comments for a specific model + * description: Retrieve the count of all comments associated with a specific model. + * tags: + * - Admin + * parameters: + * - in: path + * name: model + * required: true + * description: The model type for which comments are counted. + * schema: + * type: string + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: Success. Returns the count of all comments for the specified model. + * content: + * application/json: + * schema: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the model. + * count: + * type: number + * description: The count of comments associated with the model. + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "Internal Server Error: Something went wrong" + */ +router.get('/comment/countAll/:model', commentController.getAllforCount); +/** + * @swagger + * /admin/comment/{model}: + * get: + * summary: Get all comments for a specific model + * description: Retrieve all comments associated with a specific model. + * tags: + * - Admin + * parameters: + * - in: path + * name: model + * required: true + * description: The model type for which comments are fetched. + * schema: + * type: string + * - in: query + * name: page + * schema: + * type: integer + * description: The page number for paginated results. + * - in: query + * name: limit + * schema: + * type: integer + * description: The maximum number of comments to return per page. + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: Success. Returns the paginated list of comments for the specified model. + * content: + * application/json: + * schema: + * type: object + * properties: + * docs: + * type: array + * items: + * $ref: '#/components/schemas/Comment' + * totalDocs: + * type: integer + * description: The total number of comments. + * totalPages: + * type: integer + * description: The total number of pages. + * page: + * type: integer + * description: The current page number. + * limit: + * type: integer + * description: The maximum number of comments per page. + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "Internal Server Error: Something went wrong" + */ +router.get('/comment/:model', commentController.getAll); +/** + * @swagger + * /admin/comment/{model}/search: + * post: + * summary: Search comments for a specific model + * description: Retrieve comments associated with a specific model based on search criteria. + * tags: + * - Admin + * parameters: + * - in: path + * name: model + * required: true + * description: The model type for which comments are searched. + * schema: + * type: string + * - in: query + * name: page + * schema: + * type: integer + * description: The page number for paginated results. + * - in: query + * name: limit + * schema: + * type: integer + * description: The maximum number of comments to return per page. + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * name: + * type: string + * description: The name to search for. + * email: + * type: string + * description: The email to search for. + * read: + * type: boolean + * description: Indicates whether the comment has been read or not. + * allowShow: + * type: boolean + * description: Indicates whether the comment is allowed to be shown or not. + * date: + * type: array + * items: + * type: string + * description: Array containing start and end dates for filtering comments by creation date. + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: Success. Returns the paginated list of comments based on the search criteria. + * content: + * application/json: + * schema: + * type: object + * properties: + * docs: + * type: array + * items: + * $ref: '#/components/schemas/Comment' + * totalDocs: + * type: integer + * description: The total number of comments. + * totalPages: + * type: integer + * description: The total number of pages. + * page: + * type: integer + * description: The current page number. + * limit: + * type: integer + * description: The maximum number of comments per page. + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "Internal Server Error: Something went wrong" + */ +router.post('/comment/:model/search', commentController.search); +/** + * @swagger + * /admin/comment/{model}/{id}: + * get: + * summary: Get a single comment for a specific model + * description: Retrieve a single comment associated with a specific model by its ID. + * tags: + * - Admin + * parameters: + * - in: path + * name: model + * required: true + * description: The model type associated with the comment. + * schema: + * type: string + * - in: path + * name: id + * required: true + * description: The ID of the comment to retrieve. + * schema: + * type: string + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: Success. Returns the requested comment. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Comment' + * '404': + * description: Not Found. Indicates that the requested comment was not found. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + */ +router.get('/comment/:model/:id', commentController.getOneComment); + +/////////////// contactUs +// router.put('/contactUs' , contactUsController.updateContacUs); +// router.get('/contactUs' , contactUsController.getOneContacUs); + + +/** + * @swagger + * /admin/comment/{model}/{id}: + * get: + * summary: Get a single comment for a specific model + * description: Retrieve a single comment associated with a specific model by its ID. + * tags: + * - Admin + * parameters: + * - in: path + * name: model + * required: true + * description: The model type associated with the comment. + * schema: + * type: string + * - in: path + * name: id + * required: true + * description: The ID of the comment to retrieve. + * schema: + * type: string + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: Success. Returns the requested comment. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Comment' + * '404': + * description: Not Found. Indicates that the requested comment was not found. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + */ +router.post('/yearBanner', yearBannerController.updateYearBanner); +/** + * @swagger + * /admin/counterDay: + * post: + * summary: Update counter day settings + * description: Update the counter day settings, including the title, publish status, and expiration date. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * title: + * type: string + * description: The title of the counter day. + * publish: + * type: boolean + * description: Whether to publish the counter day. + * expireDate: + * type: string + * format: date + * description: The expiration date of the counter day (YYYY-MM-DD). + * example: + * title: Sample Counter Day + * publish: true + * expireDate: 2024-12-31 + * responses: + * '200': + * description: Success. Indicates that the counter day settings have been updated successfully. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: A success message indicating that the settings have been updated. + * '422': + * description: Unprocessable Entity. Indicates that the request parameters are invalid. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/ValidationError' + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + */ +////////////// counter day +router.post('/counterDay', counterDayController.updateCounterDay); +/** + * @swagger + * /admin/counterDay: + * get: + * summary: Get counter day settings + * description: Retrieve the counter day settings, including the title, publish status, and expiration date. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: Success. Returns the counter day settings. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/CounterDay' + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + */ +router.get('/counterDay', counterDayController.getCounterDayByAdmin); + + +router.use('/gallery', hasPermission('gallery')); + +/** + * @swagger + * /admin/gallery/uploadFile: + * post: + * summary: Upload a file to the gallery + * description: Upload a file (image, video, or graphic) to a specified gallery. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * requestBody: + * required: true + * content: + * multipart/form-data: + * schema: + * type: object + * properties: + * galleryId: + * type: string + * description: The ID of the gallery + * example: "60c72b2f9b1d4e4f88e3e9a1" + * fileType: + * type: string + * enum: ['image', 'video', 'graphic'] + * description: The type of the file being uploaded + * example: "image" + * file: + * type: string + * format: binary + * description: The file to upload + * responses: + * '200': + * description: Success. Returns the updated gallery object. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Gallery' + * '422': + * description: Unprocessable Entity. Validation error in the request. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + */ +router.post('/gallery/uploadFile', galleryController.uploadFile); +/** + * @swagger + * /admin/gallery/deleteFile: + * post: + * summary: Delete a file from the gallery + * description: Delete a specified file (image, video, or graphic) from a specified gallery. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * galleryId: + * type: string + * description: The ID of the gallery + * example: "60c72b2f9b1d4e4f88e3e9a1" + * name: + * type: string + * description: The name of the file to delete + * example: "example.jpg" + * responses: + * '200': + * description: Success. Returns the updated gallery object. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Gallery' + * '422': + * description: Unprocessable Entity. Validation error in the request. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '404': + * description: Not Found. The gallery or file was not found. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + */ +router.post('/gallery/deleteFile', galleryController.deleteFile); +/** + * @swagger + * /admin/gallery/uploadCover: + * post: + * summary: Upload a cover image for a gallery + * description: Upload a cover image for a specified gallery. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * requestBody: + * required: true + * content: + * multipart/form-data: + * schema: + * type: object + * properties: + * galleryId: + * type: string + * description: The ID of the gallery + * example: "60c72b2f9b1d4e4f88e3e9a1" + * file: + * type: string + * format: binary + * description: The cover image file to upload + * responses: + * '200': + * description: Success. Returns the updated gallery object. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Gallery' + * '422': + * description: Unprocessable Entity. Validation error in the request. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '404': + * description: Not Found. The gallery was not found. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + */ +router.post('/gallery/uploadCover', galleryController.uploadCover); +/** + * @swagger + * /admin/gallery: + * post: + * summary: Add a new gallery + * description: Adds a new gallery with the specified details. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * title: + * type: string + * description: The title of the gallery + * leadTitle: + * type: string + * description: The lead title of the gallery + * catId: + * type: string + * description: The ID of the category + * priority: + * type: number + * description: The priority of the gallery + * showInHome: + * type: boolean + * description: Whether to show the gallery on the home page + * special: + * type: boolean + * description: Whether the gallery is special + * siteMap: + * type: boolean + * description: Whether to include the gallery in the sitemap + * isEmbedded: + * type: boolean + * description: Whether the gallery is embedded + * publish: + * type: boolean + * description: Whether the gallery is published + * galleryType: + * type: string + * description: The type of the gallery (image, video, graphic) + * keywords: + * type: array + * items: + * type: string + * description: Keywords associated with the gallery + * modelType: + * type: string + * description: The model type of the gallery + * metaTagDesc: + * type: string + * description: Meta tag description for the gallery + * newsFileId: + * type: string + * description: The ID of the associated news file + * favorite: + * type: boolean + * description: Whether the gallery is marked as a favorite + * responses: + * '200': + * description: Success. Returns the created gallery object. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Gallery' + * '422': + * description: Unprocessable Entity. Validation error in the request. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '403': + * description: Forbidden. The user does not have permission to perform this action. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '404': + * description: Not Found. The category was not found. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + */ +router.post('/gallery', galleryController.addGallery); +/** + * @swagger + * /admin/gallery/{id}: + * put: + * summary: Update an existing gallery + * description: Updates the details of an existing gallery. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: id + * schema: + * type: string + * required: true + * description: The ID of the gallery to update + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * title: + * type: string + * description: The title of the gallery + * leadTitle: + * type: string + * description: The lead title of the gallery + * catId: + * type: string + * description: The ID of the category + * priority: + * type: number + * description: The priority of the gallery + * showInHome: + * type: boolean + * description: Whether to show the gallery on the home page + * special: + * type: boolean + * description: Whether the gallery is special + * siteMap: + * type: boolean + * description: Whether to include the gallery in the sitemap + * isEmbedded: + * type: boolean + * description: Whether the gallery is embedded + * embeddedCode: + * type: string + * description: The embedded code for the gallery + * publish: + * type: boolean + * description: Whether the gallery is published + * galleryType: + * type: string + * description: The type of the gallery (image, video, graphic) + * keywords: + * type: array + * items: + * type: string + * description: Keywords associated with the gallery + * modelType: + * type: string + * description: The model type of the gallery + * metaTagDesc: + * type: string + * description: Meta tag description for the gallery + * customDate: + * type: string + * description: Custom date for the gallery + * newsFileId: + * type: string + * description: The ID of the associated news file + * favorite: + * type: boolean + * description: Whether the gallery is marked as a favorite + * responses: + * '200': + * description: Success. Returns the updated gallery object. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Gallery' + * '422': + * description: Unprocessable Entity. Validation error in the request. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '403': + * description: Forbidden. The user does not have permission to perform this action. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '404': + * description: Not Found. The gallery or category was not found. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + */ +router.put('/gallery/:id', galleryController.updateGallery); +/** + * @swagger + * /admin/gallery/{id}: + * delete: + * summary: Delete an existing gallery + * description: Deletes the specified gallery. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: id + * schema: + * type: string + * required: true + * description: The ID of the gallery to delete + * responses: + * '200': + * description: Success. Returns the deleted gallery object. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Gallery' + * '403': + * description: Forbidden. The user does not have permission to perform this action. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '404': + * description: Not Found. The gallery was not found. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + */ +router.delete('/gallery/:id', galleryController.deletOneGallery); +/** + * @swagger + * /admin/gallery: + * get: + * summary: Get all galleries + * description: Retrieves a list of all galleries with pagination. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: query + * name: page + * schema: + * type: integer + * description: Page number for pagination + * - in: query + * name: limit + * schema: + * type: integer + * description: Number of items per page + * responses: + * '200': + * description: Success. Returns a list of galleries. + * content: + * application/json: + * schema: + * type: object + * properties: + * docs: + * type: array + * items: + * $ref: '#/components/schemas/Gallery' + * totalDocs: + * type: integer + * limit: + * type: integer + * totalPages: + * type: integer + * page: + * type: integer + * pagingCounter: + * type: integer + * hasPrevPage: + * type: boolean + * hasNextPage: + * type: boolean + * prevPage: + * type: integer + * nullable: true + * nextPage: + * type: integer + * nullable: true + * '500': + * description: Internal Server Error. Indicates that an unexpected error occurred while processing the request. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Error' + */ +router.get('/gallery', galleryController.getAll); +/** + * @swagger + * /admin/gallery/search: + * post: + * summary: Search for galleries + * description: Searches for galleries based on various criteria. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * term: + * type: string + * description: Search term for gallery title + * catId: + * type: string + * description: Category ID to filter galleries + * showInHome: + * type: boolean + * description: Filter by show in home + * portals: + * type: array + * items: + * type: string + * description: Filter by portals + * galleryStatus: + * type: boolean + * description: Filter by gallery status + * publish: + * type: boolean + * description: Filter by publish status + * galleryType: + * type: string + * enum: [image, video, graphic] + * description: Filter by gallery type + * date: + * type: array + * items: + * type: string + * format: date + * description: Filter by creation date range + * responses: + * '200': + * description: Success. Returns a list of galleries matching the search criteria. + * content: + * application/json: + * schema: + * type: object + * properties: + * docs: + * type: array + * items: + * $ref: '#/components/schemas/Gallery' + * totalDocs: + * type: integer + * limit: + * type: integer + * totalPages: + * type: integer + * page: + * type: integer + * pagingCounter: + * type: integer + * '422': + * description: Validation error + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * additionalProperties: + * type: object + * properties: + * msg: + * type: string + * '500': + * description: Server error + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + */ +router.post('/gallery/search', galleryController.search); +/** + * @swagger + * /admin/gallery/{id}: + * get: + * summary: Get a gallery by ID + * description: Retrieves a gallery by its ID. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: id + * required: true + * description: ID of the gallery to retrieve + * schema: + * type: string + * responses: + * '200': + * description: Success. Returns the requested gallery. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Gallery' + * '404': + * description: Gallery not found + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: Gallery not found + * '500': + * description: Server error + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + */ +router.get('/gallery/:id', galleryController.getOneGallery); + +//////////// policy +router.use('/links', hasPermission('superAdmin')); + +/** + * @swagger + * /admin/links: + * post: + * summary: Add a new link + * description: Add a new link to the system. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * title: + * type: string + * url: + * type: string + * index: + * type: number + * showInHome: + * type: boolean + * siteMap: + * type: boolean + * modelType: + * type: string + * responses: + * '200': + * description: Success. Returns the created link. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Links' + * '422': + * description: Validation error + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * properties: + * title: + * type: string + * url: + * type: string + * index: + * type: string + * showInHome: + * type: string + * siteMap: + * type: string + * '500': + * description: Server error + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + */ +router.post('/links', linksController.addLinks); +/** + * @swagger + * /admin/links/{id}: + * put: + * summary: Update a link + * description: Update an existing link in the system. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: id + * required: true + * description: ID of the link to update + * schema: + * type: string + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * title: + * type: string + * url: + * type: string + * index: + * type: number + * showInHome: + * type: boolean + * siteMap: + * type: boolean + * modelType: + * type: string + * responses: + * '200': + * description: Success. Returns the updated link. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Links' + * '422': + * description: Validation error + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * properties: + * title: + * type: string + * url: + * type: string + * index: + * type: string + * showInHome: + * type: string + * siteMap: + * type: string + * '404': + * description: Link not found + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * '500': + * description: Server error + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + */ +router.put('/links/:id', linksController.updateLinks); +/** + * @swagger + * /admin/links/{id}: + * delete: + * summary: Delete a link + * description: Delete an existing link from the system. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: id + * required: true + * description: ID of the link to delete + * schema: + * type: string + * responses: + * '200': + * description: Success. Returns the deleted link. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Links' + * '404': + * description: Link not found + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * '500': + * description: Server error + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + */ +router.delete('/links/:id', linksController.deletOneLinks); +/** + * @swagger + * /admin/links: + * get: + * summary: Get all links + * description: Retrieve all links from the system. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: Success. Returns an array of links. + * content: + * application/json: + * schema: + * type: array + * items: + * $ref: '#/components/schemas/Links' + * '500': + * description: Server error + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + */ +router.get('/links', linksController.getAll); +/** + * @swagger + * /admin/links/{id}: + * get: + * summary: Get a specific link + * description: Retrieve a specific link by its ID. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: id + * description: ID of the link to retrieve + * required: true + * schema: + * type: string + * responses: + * '200': + * description: Success. Returns the requested link. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Links' + * '403': + * description: Forbidden. User does not have access to the link. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating lack of access. + * '404': + * description: Not Found. The link with the specified ID was not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating link not found. + * '500': + * description: Server error + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating server error. + */ +router.get('/links/:id', linksController.getOneLinks); + +//////////// policy +router.use('/slider', hasPermission('superAdmin')); + +/** + * @swagger + * /admin/slider: + * post: + * summary: Add a new slider + * description: Add a new slider with the provided details. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * requestBody: + * required: true + * content: + * multipart/form-data: + * schema: + * type: object + * properties: + * title: + * type: string + * summaryTitle: + * type: string + * url: + * type: string + * index: + * type: integer + * isLocal: + * type: boolean + * siteMap: + * type: boolean + * modelType: + * type: string + * responses: + * '200': + * description: Success. Returns the newly created slider. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Slider' + * '422': + * description: Unprocessable Entity. Validation error in the request body. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Validation errors. + * '500': + * description: Server error. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating server error. + */ +router.post('/slider', sliderController.addSlider); +/** + * @swagger + * /admin/slider/{id}: + * put: + * summary: Update slider by ID + * description: Update the slider with the specified ID. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: id + * required: true + * description: ID of the slider to update + * schema: + * type: string + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * title: + * type: string + * summaryTitle: + * type: string + * url: + * type: string + * isLocal: + * type: boolean + * index: + * type: integer + * siteMap: + * type: boolean + * modelType: + * type: string + * responses: + * '200': + * description: Success. Returns the updated slider. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Slider' + * '422': + * description: Unprocessable Entity. Validation error in the request body. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Validation errors. + * '404': + * description: Not Found. The specified slider ID was not found. + * '500': + * description: Server error. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating server error. + */ +router.put('/slider/:id', sliderController.updateSlider); +/** + * @swagger + * /admin/slider/{id}: + * delete: + * summary: Delete slider by ID + * description: Delete the slider with the specified ID. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: id + * required: true + * description: ID of the slider to delete + * schema: + * type: string + * responses: + * '200': + * description: Success. Returns the deleted slider. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Slider' + * '404': + * description: Not Found. The specified slider ID was not found. + * '500': + * description: Server error. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating server error. + */ +router.delete('/slider/:id', sliderController.deletOneSlider); +/** + * @swagger + * /admin/slider: + * get: + * summary: Get all sliders + * description: Retrieve all sliders based on the user's portals. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: Success. Returns an array of sliders. + * content: + * application/json: + * schema: + * type: array + * items: + * $ref: '#/components/schemas/Slider' + * '500': + * description: Server error. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating server error. + */ +router.get('/slider', sliderController.getAllSliderByAdmin); +/** + * @swagger + * /admin/slider/search: + * post: + * summary: Search sliders + * description: Search sliders based on specified criteria. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * requestBody: + * description: Object containing search parameters. + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * term: + * type: string + * description: Term to search for in slider titles. + * portals: + * type: array + * items: + * type: string + * description: Array of portal IDs to filter sliders. + * galleryStatus: + * type: boolean + * description: Status of the sliders to filter. + * publish: + * type: boolean + * description: Publish status of the sliders to filter. + * galleryType: + * type: string + * description: Type of sliders to filter. + * date: + * type: array + * items: + * type: string + * format: date + * description: Array containing start and end dates to filter by creation date. + * responses: + * '200': + * description: Success. Returns paginated list of sliders based on search criteria. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/PaginatedSlider' + * '500': + * description: Server error. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating server error. + */ +router.post('/slider/search', sliderController.search); +/** + * @swagger + * /admin/slider/{id}: + * get: + * summary: Get a slider by ID + * description: Retrieve details of a slider by its ID. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: id + * required: true + * schema: + * type: string + * format: uuid + * description: ID of the slider to retrieve. + * responses: + * '200': + * description: Success. Returns the details of the requested slider. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Slider' + * '403': + * description: Forbidden. The user does not have permission to access the slider. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating lack of permission. + * '404': + * description: Not Found. The requested slider does not exist. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating that the slider was not found. + * '500': + * description: Server error. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating server error. + */ +router.get('/slider/:id', sliderController.getOneSlider); + +/** + * @swagger + * /admin/occasion: + * post: + * summary: Add a new occasion + * description: Add a new occasion with title, publish status, index, start date, and end date. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * title: + * type: string + * description: The title of the occasion. + * publish: + * type: boolean + * description: The publish status of the occasion. + * index: + * type: number + * description: The index of the occasion. + * startDate: + * type: string + * format: date + * description: The start date of the occasion. + * endDate: + * type: string + * format: date + * description: The end date of the occasion. + * responses: + * '200': + * description: Success. Returns the details of the added occasion. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Occasion' + * '422': + * description: Unprocessable Entity. Indicates validation errors in the request body. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Validation errors mapped by field. + * '500': + * description: Internal Server Error. Indicates a server-side error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating a server error. + */ +//////////// occasion +router.post('/occasion', occasionController.addOccasion); +/** + * @swagger + * /occasion/{id}: + * put: + * summary: Update an occasion + * description: Update an existing occasion with the specified ID. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: id + * required: true + * description: ID of the occasion to update. + * schema: + * type: string + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * title: + * type: string + * description: The updated title of the occasion. + * publish: + * type: boolean + * description: The updated publish status of the occasion. + * index: + * type: number + * description: The updated index of the occasion. + * startDate: + * type: string + * format: date + * description: The updated start date of the occasion. + * endDate: + * type: string + * format: date + * description: The updated end date of the occasion. + * responses: + * '200': + * description: Success. Returns the updated occasion details. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Occasion' + * '422': + * description: Unprocessable Entity. Indicates validation errors in the request body. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Validation errors mapped by field. + * '404': + * description: Not Found. Indicates the specified occasion was not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the occasion was not found. + * '500': + * description: Internal Server Error. Indicates a server-side error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating a server error. + */ +router.put('/occasion/:id', occasionController.updateOccasion); +/** + * @swagger + * /occasion/{id}: + * delete: + * summary: Delete an occasion + * description: Delete an existing occasion with the specified ID. + * tags: + * - Admin + * security: + * - bearerAuth: [] + * parameters: + * - in: path + * name: id + * required: true + * description: ID of the occasion to delete. + * schema: + * type: string + * responses: + * '200': + * description: Success. Indicates the occasion was successfully deleted. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message indicating the occasion was deleted. + * '404': + * description: Not Found. Indicates the specified occasion was not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the occasion was not found. + * '500': + * description: Internal Server Error. Indicates a server-side error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating a server error. + */ +router.delete('/occasion/:id', occasionController.deleteOccasion); +/** + * @swagger + * /occasion: + * get: + * summary: Get all occasions + * description: Retrieve a list of all occasions. + * tags: + * - Admin + * parameters: + * - in: query + * name: page + * description: The page number. + * schema: + * type: integer + * minimum: 1 + * default: 1 + * responses: + * '200': + * description: Success. Returns a paginated list of occasions. + * content: + * application/json: + * schema: + * type: object + * properties: + * docs: + * type: array + * items: + * $ref: '#/components/schemas/Occasion' + * totalDocs: + * type: integer + * description: Total number of occasions. + * limit: + * type: integer + * description: Maximum number of occasions per page. + * totalPages: + * type: integer + * description: Total number of pages. + * page: + * type: integer + * description: Current page number. + * pagingCounter: + * type: integer + * description: The starting index of the first occasion in the current page. + * hasPrevPage: + * type: boolean + * description: Indicates if there is a previous page. + * hasNextPage: + * type: boolean + * description: Indicates if there is a next page. + * prevPage: + * type: integer + * description: The previous page number if exists, otherwise null. + * nextPage: + * type: integer + * description: The next page number if exists, otherwise null. + * '500': + * description: Internal Server Error. Indicates a server-side error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating a server error. + */ +router.get('/occasion', occasionController.getAllOccasionByAdmin); +/** + * @swagger + * /occasion/allOccasion: + * get: + * summary: Get all occasions for index + * description: Retrieve a list of all occasions for displaying on the index page. + * tags: + * - Admin + * responses: + * '200': + * description: Success. Returns a list of occasions. + * content: + * application/json: + * schema: + * type: array + * items: + * $ref: '#/components/schemas/Occasion' + * '500': + * description: Internal Server Error. Indicates a server-side error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating a server error. + */ +router.get('/occasion/allOccasion', occasionController.getAllOccasionForIndex); +/** + * @swagger + * /occasion/search: + * post: + * summary: Search occasions + * description: Search occasions based on various criteria such as title, publish status, date range, etc. + * tags: + * - Admin + * requestBody: + * description: Object containing search parameters + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * term: + * type: string + * description: Search term to match against occasion titles. + * publish: + * type: boolean + * description: Publish status of the occasions. + * status: + * type: boolean + * description: Status of the occasions. + * date: + * type: array + * items: + * type: string + * format: date + * description: Array containing start and end date of the occasions. + * responses: + * '200': + * description: Success. Returns a list of occasions matching the search criteria. + * content: + * application/json: + * schema: + * type: object + * properties: + * docs: + * type: array + * items: + * $ref: '#/components/schemas/Occasion' + * totalDocs: + * type: number + * description: Total number of documents matching the search criteria. + * totalPages: + * type: number + * description: Total number of pages. + * page: + * type: number + * description: Current page number. + * limit: + * type: number + * description: Number of documents per page. + * '500': + * description: Internal Server Error. Indicates a server-side error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating a server error. + */ +router.post('/occasion/search', occasionController.search); +/** + * @swagger + * /occasion/{id}: + * get: + * summary: Get occasion by ID + * description: Retrieve an occasion by its ID. + * tags: + * - Admin + * parameters: + * - in: path + * name: id + * required: true + * description: ID of the occasion to retrieve. + * schema: + * type: string + * responses: + * '200': + * description: Success. Returns the occasion with the specified ID. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Occasion' + * '404': + * description: Not Found. Indicates that the occasion with the specified ID does not exist. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating that the occasion was not found. + * '500': + * description: Internal Server Error. Indicates a server-side error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating a server error. + */ +router.get('/occasion/:id', occasionController.getOccasionByAdmin); +/** + * @swagger + * /admin/clearBackups: + * post: + * summary: Remove old backups + * description: Removes old backup files and directories from the server. + * tags: + * - Admin + * responses: + * '200': + * description: Success. Indicates that old backups have been successfully removed. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message indicating that old backups have been removed. + * '500': + * description: Internal Server Error. Indicates a server-side error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating a server error. + */ +//////////// backup +router.post('/clearBackups', dataBackupController.removeOldBackups) + +router.post('/create-model' , dynamicController.CreateModel) + +router.post('/save-form' , dynamicController.SaveDataModel) + +//////////////// polls policy +router.use('/poll', hasPermission('polls')); +/** + * @swagger + * /admin/poll: + * post: + * summary: Add a new survey + * description: Creates a new survey with the provided details. + * tags: + * - Admin + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * title: + * type: string + * description: The title of the survey. + * example: "Customer Satisfaction Survey" + * catId: + * type: string + * description: The category ID associated with the survey. + * example: "60c72b2f9b1d4c4a3a1e6a6f" + * description: + * type: string + * description: A brief description of the survey. + * example: "This survey aims to gather customer feedback." + * surveyType: + * type: string + * description: The type of survey (check or radio). + * enum: + * - check + * - radio + * example: "radio" + * startDate: + * type: string + * format: date-time + * description: The start date of the survey. + * example: "2024-06-01T00:00:00.000Z" + * endDate: + * type: string + * format: date-time + * description: The end date of the survey. + * example: "2024-06-30T23:59:59.999Z" + * options: + * type: array + * description: The options available for the survey. + * items: + * type: string + * example: ["Very satisfied", "Satisfied", "Neutral", "Dissatisfied", "Very dissatisfied"] + * publish: + * type: boolean + * description: Whether the survey should be published. + * example: true + * responses: + * '200': + * description: Success. The survey has been created. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message. + * example: "اطلاعات با موفقیت ذخیره شد" + * '422': + * description: Validation Error. One or more of the provided fields are invalid. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * additionalProperties: + * type: object + * properties: + * msg: + * type: string + * description: Validation error message. + * '403': + * description: Forbidden. The user does not have permission to create a survey in the specified category. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Forbidden message. + * example: "شما نمیتوانید این دسته بندی را انتخاب کنید" + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +/////////////// polls +router.post('/poll', pollController.addSurvey); +/** + * @swagger + * /admin/poll/{id}: + * put: + * summary: Update an existing survey + * description: Updates the details of an existing survey based on the provided information. + * tags: + * - Admin + * parameters: + * - in: path + * name: id + * required: true + * schema: + * type: string + * description: The ID of the survey to update. + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * title: + * type: string + * description: The title of the survey. + * example: "Customer Satisfaction Survey" + * catId: + * type: string + * description: The category ID associated with the survey. + * example: "60c72b2f9b1d4c4a3a1e6a6f" + * description: + * type: string + * description: A brief description of the survey. + * example: "This survey aims to gather customer feedback." + * surveyType: + * type: string + * description: The type of survey (check or radio). + * enum: + * - check + * - radio + * example: "radio" + * startDate: + * type: string + * format: date-time + * description: The start date of the survey. + * example: "2024-06-01T00:00:00.000Z" + * endDate: + * type: string + * format: date-time + * description: The end date of the survey. + * example: "2024-06-30T23:59:59.999Z" + * options: + * type: array + * description: The options available for the survey. + * items: + * type: string + * example: ["Very satisfied", "Satisfied", "Neutral", "Dissatisfied", "Very dissatisfied"] + * publish: + * type: boolean + * description: Whether the survey should be published. + * example: true + * responses: + * '200': + * description: Success. The survey has been updated. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message. + * example: "اطلاعات با موفقیت ذخیره شد" + * '422': + * description: Validation Error. One or more of the provided fields are invalid. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * additionalProperties: + * type: object + * properties: + * msg: + * type: string + * description: Validation error message. + * '403': + * description: Forbidden. The user does not have permission to update the survey in the specified category. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Forbidden message. + * example: "شما نمیتوانید این دسته بندی را انتخاب کنید" + * '404': + * description: Not Found. The specified survey or category does not exist. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Not found message. + * example: "نظر سنجی مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.put('/poll/:id', pollController.updateSurvey); +/** + * @swagger + * /admin/poll/{id}: + * delete: + * summary: Delete a survey + * description: Deletes an existing survey by its ID. + * tags: + * - Admin + * parameters: + * - in: path + * name: id + * required: true + * schema: + * type: string + * description: The ID of the survey to delete. + * responses: + * '200': + * description: Success. The survey has been deleted. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message. + * example: "اطلاعات با موفقیت حذف شد" + * '403': + * description: Forbidden. The user does not have permission to delete the survey. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Forbidden message. + * example: "شما اجازه حذف این نظرسنجی را ندارید" + * '404': + * description: Not Found. The specified survey does not exist. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Not found message. + * example: "نظرسنجی مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.delete('/poll/:id', pollController.deletOneSurvey); +/** + * @swagger + * /admin/poll: + * get: + * summary: Get all surveys + * description: Retrieves a paginated list of all surveys. + * tags: + * - Admin + * parameters: + * - in: query + * name: page + * schema: + * type: integer + * example: 1 + * description: The page number for pagination. + * responses: + * '200': + * description: Success. A list of surveys is returned. + * content: + * application/json: + * schema: + * type: object + * properties: + * docs: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * example: "60d21b4667d0d8992e610c85" + * title: + * type: string + * example: "Customer Satisfaction Survey" + * catId: + * type: object + * properties: + * _id: + * type: string + * example: "60d21b4567d0d8992e610c83" + * name: + * type: string + * example: "Customer Feedback" + * description: + * type: string + * example: "Survey to gauge customer satisfaction." + * surveyType: + * type: string + * example: "radio" + * startDate: + * type: string + * format: date + * example: "2023-01-01" + * endDate: + * type: string + * format: date + * example: "2023-12-31" + * options: + * type: array + * items: + * type: string + * example: ["Excellent", "Good", "Average", "Poor"] + * publish: + * type: boolean + * example: true + * created_at: + * type: string + * format: date-time + * example: "2023-01-01T00:00:00.000Z" + * updated_at: + * type: string + * format: date-time + * example: "2023-01-02T00:00:00.000Z" + * totalDocs: + * type: integer + * example: 100 + * limit: + * type: integer + * example: 10 + * page: + * type: integer + * example: 1 + * totalPages: + * type: integer + * example: 10 + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.get('/poll', pollController.getAllSurvey); +/** + * @swagger + * /admin/poll/search: + * post: + * summary: Search for surveys + * description: Searches for surveys based on various criteria. + * tags: + * - Admin + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * term: + * type: string + * description: Search term for the survey title. + * example: "Customer Satisfaction" + * catId: + * type: string + * description: Category ID to filter surveys. + * example: "60d21b4567d0d8992e610c83" + * publish: + * type: boolean + * description: Filter by publish status. + * example: true + * date: + * type: array + * items: + * type: string + * format: date + * description: Date range to filter surveys (start date and end date). + * example: ["2023-01-01", "2023-12-31"] + * responses: + * '200': + * description: Success. A list of surveys matching the search criteria is returned. + * content: + * application/json: + * schema: + * type: object + * properties: + * docs: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * example: "60d21b4667d0d8992e610c85" + * title: + * type: string + * example: "Customer Satisfaction Survey" + * catId: + * type: object + * properties: + * _id: + * type: string + * example: "60d21b4567d0d8992e610c83" + * name: + * type: string + * example: "Customer Feedback" + * description: + * type: string + * example: "Survey to gauge customer satisfaction." + * surveyType: + * type: string + * example: "radio" + * startDate: + * type: string + * format: date + * example: "2023-01-01" + * endDate: + * type: string + * format: date + * example: "2023-12-31" + * options: + * type: array + * items: + * type: string + * example: ["Excellent", "Good", "Average", "Poor"] + * publish: + * type: boolean + * example: true + * created_at: + * type: string + * format: date-time + * example: "2023-01-01T00:00:00.000Z" + * updated_at: + * type: string + * format: date-time + * example: "2023-01-02T00:00:00.000Z" + * totalDocs: + * type: integer + * example: 50 + * limit: + * type: integer + * example: 10 + * page: + * type: integer + * example: 1 + * totalPages: + * type: integer + * example: 5 + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.post('/poll/search', pollController.search); +/** + * @swagger + * /admin/poll/{id}: + * get: + * summary: Get a specific survey + * description: Retrieves details of a specific survey by its ID. + * tags: + * - Admin + * parameters: + * - name: id + * in: path + * required: true + * description: The ID of the survey to retrieve. + * schema: + * type: string + * example: "60d21b4667d0d8992e610c85" + * responses: + * '200': + * description: Success. The details of the survey are returned. + * content: + * application/json: + * schema: + * type: object + * properties: + * _id: + * type: string + * example: "60d21b4667d0d8992e610c85" + * title: + * type: string + * example: "Customer Satisfaction Survey" + * catId: + * type: object + * properties: + * _id: + * type: string + * example: "60d21b4567d0d8992e610c83" + * name: + * type: string + * example: "Customer Feedback" + * description: + * type: string + * example: "Survey to gauge customer satisfaction." + * surveyType: + * type: string + * example: "radio" + * startDate: + * type: string + * format: date + * example: "2023-01-01" + * endDate: + * type: string + * format: date + * example: "2023-12-31" + * options: + * type: array + * items: + * type: string + * example: ["Excellent", "Good", "Average", "Poor"] + * publish: + * type: boolean + * example: true + * created_at: + * type: string + * format: date-time + * example: "2023-01-01T00:00:00.000Z" + * updated_at: + * type: string + * format: date-time + * example: "2023-01-02T00:00:00.000Z" + * '403': + * description: Forbidden. The user is not allowed to view this survey. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "شما مجاز به دیدن اطلاعات این نظرسنجی نمی باشید" + * '404': + * description: Not Found. The survey with the specified ID was not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "اطلاعات مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.get('/poll/:id', pollController.getOneSurvey); + +//////////////// election policy +router.use('/election', hasPermission('elections')); +/** + * @swagger + * /admin/election: + * post: + * summary: Add a new election + * description: Creates a new election with the provided details. + * tags: + * - Election + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * title: + * type: string + * example: "Presidential Election 2024" + * catId: + * type: string + * example: "60d21b4567d0d8992e610c83" + * description: + * type: string + * example: "Election to select the next president." + * startDate: + * type: string + * format: date + * example: "2024-01-01" + * endDate: + * type: string + * format: date + * example: "2024-12-31" + * publish: + * type: boolean + * example: true + * responses: + * '200': + * description: Success. The new election is created. + * content: + * application/json: + * schema: + * type: object + * properties: + * _id: + * type: string + * example: "60d21b4667d0d8992e610c85" + * title: + * type: string + * example: "Presidential Election 2024" + * catId: + * type: string + * example: "60d21b4567d0d8992e610c83" + * description: + * type: string + * example: "Election to select the next president." + * startDate: + * type: string + * format: date + * example: "2024-01-01" + * endDate: + * type: string + * format: date + * example: "2024-12-31" + * publish: + * type: boolean + * example: true + * _creator: + * type: string + * example: "60d21b4667d0d8992e610c86" + * _updatedBy: + * type: string + * example: "60d21b4667d0d8992e610c87" + * '403': + * description: Forbidden. The user is not allowed to create an election in the specified category. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "شما نمیتوانید این دسته بندی را انتخاب کنید" + * '404': + * description: Not Found. The specified category was not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "دسته بندی مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +/////////////// election +router.post('/election', electionController.addElection); +/** + * @swagger + * /admin/election/{id}: + * put: + * summary: Update an existing election + * description: Updates the details of an existing election by ID. + * tags: + * - Election + * parameters: + * - in: path + * name: id + * schema: + * type: string + * required: true + * description: The ID of the election to update + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * title: + * type: string + * example: "Updated Presidential Election 2024" + * catId: + * type: string + * example: "60d21b4567d0d8992e610c83" + * description: + * type: string + * example: "Updated description for the election." + * startDate: + * type: string + * format: date + * example: "2024-02-01" + * endDate: + * type: string + * format: date + * example: "2024-11-30" + * publish: + * type: boolean + * example: false + * responses: + * '200': + * description: Success. The election is updated. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "ذخیره سازی با موفقیت انجام شد" + * '403': + * description: Forbidden. The user is not allowed to update the election in the specified category. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "شما نمیتوانید این دسته بندی را انتخاب کنید" + * '404': + * description: Not Found. The specified election or category was not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "انتخابات مورد نظر پیدا نشد" or "دسته بندی مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.put('/election/:id', electionController.updateElection); +/** + * @swagger + * /admin/election/{id}: + * delete: + * summary: Delete an existing election + * description: Deletes an election by ID. + * tags: + * - Election + * parameters: + * - in: path + * name: id + * schema: + * type: string + * required: true + * description: The ID of the election to delete + * responses: + * '200': + * description: Success. The election is deleted. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "حذف با موفقیت انجام شد" + * '403': + * description: Forbidden. The user is not allowed to delete the election in the specified category. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "شما اجازه حذف این انتخابات را ندارید" + * '404': + * description: Not Found. The specified election was not found. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "انتخابات مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.delete('/election/:id', electionController.deletOneElection); +/** + * @swagger + * /admin/election: + * get: + * summary: Get all elections + * description: Retrieves a paginated list of all elections. + * tags: + * - Election + * parameters: + * - in: query + * name: page + * schema: + * type: integer + * required: false + * description: The page number to retrieve + * responses: + * '200': + * description: A paginated list of elections + * content: + * application/json: + * schema: + * type: object + * properties: + * docs: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * description: The election ID + * title: + * type: string + * description: The title of the election + * catId: + * type: object + * description: The category of the election + * description: + * type: string + * description: The description of the election + * startDate: + * type: string + * format: date-time + * description: The start date of the election + * endDate: + * type: string + * format: date-time + * description: The end date of the election + * publish: + * type: boolean + * description: The publish status of the election + * _creator: + * type: object + * properties: + * firstName: + * type: string + * description: The first name of the creator + * lastName: + * type: string + * description: The last name of the creator + * profilePic: + * type: string + * description: The profile picture of the creator + * totalDocs: + * type: integer + * description: Total number of documents + * limit: + * type: integer + * description: Limit per page + * page: + * type: integer + * description: Current page number + * totalPages: + * type: integer + * description: Total number of pages + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.get('/election', electionController.getAllElection); +/** + * @swagger + * /admin/election/search: + * post: + * summary: Search for elections + * description: | + * Searches for elections based on the provided criteria such as search term, category, publish status, and date range. + * tags: + * - Election + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * term: + * type: string + * description: The search term. + * catId: + * type: string + * description: The ID of the category to filter elections by. + * publish: + * type: boolean + * description: The publish status of the elections to filter by. + * date: + * type: array + * items: + * type: string + * format: date + * description: The date range to filter elections by. If one date is provided, it will be treated as the start and end date. + * responses: + * '200': + * description: A list of elections that match the search criteria + * content: + * application/json: + * schema: + * type: object + * properties: + * docs: + * type: array + * items: + * $ref: '#/components/schemas/Election' + * totalDocs: + * type: integer + * description: Total number of documents + * limit: + * type: integer + * description: Limit per page + * page: + * type: integer + * description: Current page number + * totalPages: + * type: integer + * description: Total number of pages + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.post('/election/search', electionController.search); +/** + * @swagger + * /admin/election/{id}: + * get: + * summary: Get information about a specific election + * description: | + * Retrieves information about a specific election identified by its ID. + * tags: + * - Election + * parameters: + * - in: path + * name: id + * required: true + * description: The ID of the election to retrieve information about. + * schema: + * type: string + * responses: + * '200': + * description: Information about the specified election + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Election' + * '404': + * description: The requested election was not found + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "اطلاعات مورد نظر پیدا نشد" + * '403': + * description: Forbidden. The user is not authorized to view the election. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "شما مجاز به دیدن اطلاعات این انتخابات نمی باشید" + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.get('/election/:id', electionController.getOneElection); +/** + * @swagger + * /admin/election/candidate/{id}: + * post: + * summary: Add a candidate to an election + * description: | + * Adds a candidate to the specified election identified by its ID. + * tags: + * - Election + * parameters: + * - in: path + * name: id + * required: true + * description: The ID of the election to which the candidate will be added. + * schema: + * type: string + * - in: formData + * name: profilePic + * required: true + * description: The profile picture of the candidate. + * schema: + * type: string + * format: binary + * - in: formData + * name: firstName + * required: true + * description: The first name of the candidate. + * schema: + * type: string + * - in: formData + * name: lastName + * required: true + * description: The last name of the candidate. + * schema: + * type: string + * - in: formData + * name: bornDate + * required: false + * description: The birth date of the candidate. + * schema: + * type: string + * format: date + * - in: formData + * name: education + * required: false + * description: The education level of the candidate. + * schema: + * type: string + * - in: formData + * name: nationalCode + * required: false + * description: The national code of the candidate. + * schema: + * type: string + * - in: formData + * name: resume + * required: false + * description: The resume of the candidate. + * schema: + * type: string + * consumes: + * - multipart/form-data + * produces: + * - application/json + * responses: + * '200': + * description: Candidate added successfully + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message. + * example: "اطلاعات با موفقیت ذخیره شد" + * '404': + * description: The specified election was not found + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "انتخابات مورد نظر پیدا نشد" + * '422': + * description: Unprocessable Entity. Missing or invalid input data. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * properties: + * profilePic: + * type: object + * properties: + * msg: + * type: string + * description: Error message. + * example: "لطفا یک فایل ارسال کنید" + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +/////////////// candidate +router.post('/election/candidate/:id', electionController.addCandidate); +/** + * @swagger + * /admin/election/candidate/{id}: + * put: + * summary: Update a candidate in an election + * description: | + * Updates the details of a candidate in the specified election identified by its ID. + * tags: + * - Election + * parameters: + * - in: path + * name: id + * required: true + * description: The ID of the election containing the candidate to be updated. + * schema: + * type: string + * - in: formData + * name: candidateId + * required: true + * description: The ID of the candidate to be updated. + * schema: + * type: string + * - in: formData + * name: profilePic + * required: false + * description: The updated profile picture of the candidate. + * schema: + * type: string + * format: binary + * - in: formData + * name: firstName + * required: true + * description: The updated first name of the candidate. + * schema: + * type: string + * - in: formData + * name: lastName + * required: true + * description: The updated last name of the candidate. + * schema: + * type: string + * - in: formData + * name: bornDate + * required: false + * description: The updated birth date of the candidate. + * schema: + * type: string + * format: date + * - in: formData + * name: education + * required: false + * description: The updated education level of the candidate. + * schema: + * type: string + * - in: formData + * name: nationalCode + * required: false + * description: The updated national code of the candidate. + * schema: + * type: string + * - in: formData + * name: resume + * required: false + * description: The updated resume of the candidate. + * schema: + * type: string + * consumes: + * - multipart/form-data + * produces: + * - application/json + * responses: + * '200': + * description: Candidate updated successfully + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message. + * example: "اطلاعات با موفقیت ذخیره شد" + * '404': + * description: The specified election or candidate was not found + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "انتخابات مورد نظر پیدا نشد" or "کاندید مورد نظر پیدا نشد" + * '422': + * description: Unprocessable Entity. Missing or invalid input data. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * properties: + * profilePic: + * type: object + * properties: + * msg: + * type: string + * description: Error message. + * example: "لطفا یک فایل ارسال کنید" + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.put('/election/candidate/:id', electionController.updateCandidate); +/** + * @swagger + * /admin/election/candidate/{id}/{canId}: + * delete: + * summary: Delete a candidate from an election + * description: | + * Deletes a candidate from the specified election identified by its ID and the candidate's ID. + * tags: + * - Election + * parameters: + * - in: path + * name: id + * required: true + * description: The ID of the election containing the candidate to be deleted. + * schema: + * type: string + * - in: path + * name: canId + * required: true + * description: The ID of the candidate to be deleted. + * schema: + * type: string + * produces: + * - application/json + * responses: + * '200': + * description: Candidate deleted successfully + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message. + * example: "مشخصات کاندیدا با موفقیت حذف شد" + * '404': + * description: The specified election or candidate was not found + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "انتخابات مورد نظر پیدا نشد" or "کاندید مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.delete('/election/candidate/:id/:canId', electionController.deleteCandidate); +/** + * @swagger + * /admin/election/voter/{id}: + * post: + * summary: Add a voter to an election + * description: | + * Adds a voter to the specified election identified by its ID. + * tags: + * - Election + * parameters: + * - in: path + * name: id + * required: true + * description: The ID of the election to which the voter will be added. + * schema: + * type: string + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * firstName: + * type: string + * description: The first name of the voter. + * lastName: + * type: string + * description: The last name of the voter. + * nationalCode: + * type: string + * description: The national code of the voter (must be 10 characters long). + * username: + * type: string + * description: The username of the voter (min. 4 characters, Latin characters and symbols only, no whitespace). + * mobileNumber: + * type: string + * description: The mobile number of the voter. + * job: + * type: string + * description: The job of the voter. + * responses: + * '200': + * description: Voter added successfully + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message. + * example: "اطلاعات رای دهنده با موفقیت ذخیره شد" + * '404': + * description: The specified election was not found + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "انتخابات مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +/////////////// voter +router.post('/election/voter/:id', electionController.addVoter); +/** + * @swagger + * /admin/election/voter/{id}: + * put: + * summary: Update a voter in an election + * description: | + * Updates a voter in the specified election identified by its ID. + * tags: + * - Election + * parameters: + * - in: path + * name: id + * required: true + * description: The ID of the election in which the voter is updated. + * schema: + * type: string + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * voterId: + * type: string + * description: The ID of the voter to be updated. + * firstName: + * type: string + * description: The updated first name of the voter. + * lastName: + * type: string + * description: The updated last name of the voter. + * nationalCode: + * type: string + * description: The updated national code of the voter. + * mobileNumber: + * type: string + * description: The updated mobile number of the voter. + * job: + * type: string + * description: The updated job of the voter. + * responses: + * '200': + * description: Voter updated successfully + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message. + * example: "اطلاعات رای دهنده با موفقیت ذخیره شد" + * '404': + * description: The specified election or voter was not found + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "انتخابات مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.put('/election/voter/:id', electionController.updateVoter); +/** + * @swagger + * /admin/election/voter/{id}/{voterId}: + * delete: + * summary: Delete a voter from an election + * description: | + * Deletes a voter from the specified election identified by its ID and the ID of the voter. + * tags: + * - Election + * parameters: + * - in: path + * name: id + * required: true + * description: The ID of the election from which the voter is deleted. + * schema: + * type: string + * - in: path + * name: voterId + * required: true + * description: The ID of the voter to be deleted. + * schema: + * type: string + * responses: + * '200': + * description: Voter deleted successfully + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message. + * example: "کاربر با موفقیت حذف شد" + * '404': + * description: The specified election or voter was not found + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "انتخابات مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.delete('/election/voter/:id/:voterId', electionController.deleteVoter); +/** + * @swagger + * /admin/meeting/{id}: + * put: + * summary: Update a meeting + * description: | + * Updates the details of a meeting specified by its ID. + * tags: + * - Meeting + * parameters: + * - in: path + * name: id + * required: true + * description: The ID of the meeting to be updated. + * schema: + * type: string + * - in: body + * name: body + * description: The meeting details to be updated. + * required: true + * schema: + * type: object + * properties: + * name: + * type: string + * subject: + * type: string + * description: + * type: string + * email: + * type: string + * format: email + * phoneNumber: + * type: string + * nationalCode: + * type: string + * responses: + * '200': + * description: Meeting updated successfully + * content: + * application/json: + * schema: + * type: object + * properties: + * name: + * type: string + * description: Updated name of the meeting. + * subject: + * type: string + * description: Updated subject of the meeting. + * description: + * type: string + * description: Updated description of the meeting. + * email: + * type: string + * format: email + * description: Updated email of the meeting. + * phoneNumber: + * type: string + * description: Updated phone number of the meeting. + * nationalCode: + * type: string + * description: Updated national code of the meeting. + * '404': + * description: The specified meeting was not found + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "درخواست مورد نظر پیدا نشد" + * '422': + * description: Validation error. The request body contains invalid data. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Validation errors mapped by field names. + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +//////////// meeting +router.put('/meeting/:id', meetingController.updateMeeting); +/** + * @swagger + * /admin/meeting/{id}: + * delete: + * summary: Delete a meeting + * description: Deletes a meeting specified by its ID. + * tags: + * - Meeting + * parameters: + * - in: path + * name: id + * required: true + * description: The ID of the meeting to be deleted. + * schema: + * type: string + * responses: + * '200': + * description: Meeting deleted successfully + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message. + * example: "Meeting deleted successfully" + * '404': + * description: The specified meeting was not found + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "درخواست مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ + +router.delete('/meeting/:id', meetingController.deletOneMeeting); +/** + * @swagger + * /admin/meeting: + * get: + * summary: Get all meetings + * description: Retrieve all meetings. + * tags: + * - Meeting + * parameters: + * - in: query + * name: page + * schema: + * type: integer + * description: The page number for pagination (default: 1) + * - in: query + * name: limit + * schema: + * type: integer + * description: The maximum number of meetings per page + * responses: + * '200': + * description: A list of meetings + * content: + * application/json: + * schema: + * type: object + * properties: + * docs: + * type: array + * items: + * $ref: '#/components/schemas/Meeting' + * totalDocs: + * type: integer + * description: Total number of meetings + * totalPages: + * type: integer + * description: Total number of pages + * page: + * type: integer + * description: Current page number + * limit: + * type: integer + * description: Maximum number of meetings per page + * nextPage: + * type: integer + * description: Next page number (null if no next page) + * prevPage: + * type: integer + * description: Previous page number (null if no previous page) + * pagingCounter: + * type: integer + * description: Counter for pagination + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.get('/meeting', meetingController.getAll); +/** + * @swagger + * /admin/meeting/getCount: + * get: + * summary: Get count of all meetings + * description: Retrieve the total count of all meetings. + * tags: + * - Meeting + * responses: + * '200': + * description: The total count of meetings + * content: + * application/json: + * schema: + * type: integer + * description: Total count of meetings + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.get('/meeting/getCount', meetingController.getAllForCount); +/** + * @swagger + * /admin/meeting/search: + * post: + * summary: Search meetings + * description: Retrieve meetings based on search criteria. + * tags: + * - Meeting + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * name: + * type: string + * description: Name of the meeting. + * email: + * type: string + * format: email + * description: Email address associated with the meeting. + * terms: + * type: string + * description: Search terms to match against the subject and description of the meeting. + * phoneNumber: + * type: string + * description: Phone number associated with the meeting. + * nationalCode: + * type: string + * description: National code associated with the meeting. + * read: + * type: boolean + * description: Indicates if the meeting has been read or not. + * date: + * type: array + * items: + * type: string + * format: date + * description: Range of dates for which meetings were created. + * responses: + * '200': + * description: Successfully retrieved meetings based on search criteria + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Meeting' + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.post('/meeting/search', meetingController.search); +/** + * @swagger + * /admin/meeting/{id}: + * get: + * summary: Get a meeting by ID + * description: Retrieve a meeting specified by its ID. + * tags: + * - Meeting + * parameters: + * - in: path + * name: id + * required: true + * description: The ID of the meeting to retrieve. + * schema: + * type: string + * responses: + * '200': + * description: Successfully retrieved the meeting + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Meeting' + * '404': + * description: The specified meeting was not found + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "درخواست مورد نظر پیدا نشد" + * '500': + * description: Internal Server Error. An error occurred while processing the request. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message. + * example: "مشکلی در اجرای درخواست شما بوجود آمده است" + */ +router.get('/meeting/:id', meetingController.getOneMeeting); + +module.exports = router; diff --git a/server/routes/auth.js b/server/routes/auth.js new file mode 100644 index 0000000..2c0aa0c --- /dev/null +++ b/server/routes/auth.js @@ -0,0 +1,321 @@ +const {Router} = require('express') +const router = Router() +const userController = require('../controllers/userController'); +const electionController = require('../controllers/electionController'); + +/** + * @swagger + * /auth/login: + * post: + * summary: User login + * description: Allows users to log in with their username or email and password. + * tags: + * - Auth + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * username: + * type: string + * password: + * type: string + * remember_me: + * type: boolean + * example: + * username: johndoe + * password: password123 + * remember_me: true + * responses: + * '200': + * description: User logged in successfully. + * content: + * application/json: + * schema: + * type: object + * properties: + * token: + * type: string + * example: + * token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." + * '401': + * description: Unauthorized. Indicates that the provided credentials are invalid. + * '403': + * description: Forbidden. Indicates that the account is inactive. Contact the admin for assistance. + * '422': + * description: Validation error. Indicates that the request body contains invalid data. + */ +// Login User +router.post('/login', userController.login); +/** + * @swagger + * /auth/logout: + * delete: + * summary: User logout + * description: Logs out the user by invalidating the token associated with the request. + * tags: + * - Auth + * responses: + * '200': + * description: User logged out successfully. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: + * message: "You are logged out." + * '401': + * description: Unauthorized. Indicates that the user is not logged in. + */ +// Logout User +router.delete('/logout', userController.logout); +/** + * @swagger + * /auth/user: + * get: + * summary: Get user information + * description: Retrieves information about the authenticated user. + * tags: + * - Auth + * responses: + * '200': + * description: User information retrieved successfully. + * content: + * application/json: + * schema: + * type: object + * properties: + * user: + * $ref: '#/components/schemas/User' + * '401': + * description: Unauthorized. Indicates that the user is not authenticated or the token is invalid. + */ +// Data User +router.get('/user', userController.getuser); +/** + * @swagger + * /auth/forget-password: + * post: + * summary: Generate token for password reset + * description: Sends a token to the user's email for password reset. + * tags: + * - Auth + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * email: + * type: string + * responses: + * '200': + * description: Token generated successfully and sent to the user's email. + * content: + * application/json: + * schema: + * type: string + * description: Token generated for password reset. + * '422': + * description: Validation error. Indicates that the provided email is not valid. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Error messages for validation failures. + * '404': + * description: User not found. Indicates that the provided email does not belong to any user. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating that the user was not found. + * '500': + * description: Internal server error. Indicates that an unexpected error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +// Change Password +router.post('/changePassword' , userController.forgetPassGenerateToken); +/** + * @swagger + * /auth/changePassword/{token}: + * put: + * summary: Reset password using token + * description: Resets the user's password using the provided token. + * tags: + * - Auth + * parameters: + * - in: path + * name: token + * required: true + * description: The token sent to the user's email for password reset. + * schema: + * type: string + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * password: + * type: string + * description: The new password. + * responses: + * '200': + * description: Password reset successful. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message indicating that the password was reset successfully. + * '422': + * description: Validation error. Indicates that the provided password does not meet the requirements or the passwords do not match. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Error messages for validation failures. + * '500': + * description: Internal server error. Indicates that an unexpected error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +// Change Password :token param +router.put('/changePassword/:token' , userController.forgetPassGetToken); + +///////// voter + +/** + * @swagger + * /auth/voter/login: + * post: + * summary: Voter login + * description: Logs in a voter to participate in an election. + * tags: + * - Auth + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * username: + * type: string + * description: The username of the voter. + * password: + * type: string + * description: The password of the voter. + * responses: + * '200': + * description: Voter login successful. + * content: + * application/json: + * schema: + * type: object + * properties: + * token: + * type: string + * description: The token associated with the voter. + * '422': + * description: Validation error. Indicates that the provided username or password is incorrect. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Error message for validation failure. + * '500': + * description: Internal server error. Indicates that an unexpected error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ + +//Voter Login +router.post('/voter/login' , electionController.voterLogin); +/** + * @swagger + * /auth/voter/user: + * get: + * summary: Get voter user + * description: Retrieves the details of the logged-in voter. + * tags: + * - Auth + * security: + * - BearerAuth: [] + * responses: + * '200': + * description: Voter user details retrieved successfully. + * content: + * application/json: + * schema: + * type: object + * properties: + * user: + * type: object + * description: Details of the logged-in voter. + * '422': + * description: Validation error. Indicates that the token is invalid or the voter does not exist. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Error message for validation failure. + * '500': + * description: Internal server error. Indicates that an unexpected error occurred. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Error message indicating the internal server error. + */ +// user Voter Data +router.get('/voter/user' , electionController.getVoterUser); + +module.exports = router diff --git a/server/routes/public.js b/server/routes/public.js new file mode 100644 index 0000000..5aa9105 --- /dev/null +++ b/server/routes/public.js @@ -0,0 +1,1717 @@ +const {isVoter} = require('../authentication'); +const {Router} = require('express') +const router = Router() + +/////////////////////////////////////////////////////////// controllers +const categoryController = require('../controllers/categoryController'); +const newsController = require('../controllers/newsController'); +const galleryController = require('../controllers/galleryController'); +const contentController = require('../controllers/contentController'); +const commentController = require('../controllers/commentController'); +const newsFileController = require('../controllers/newsFileController'); +const linksController = require('../controllers/linksController'); +const sliderController = require('../controllers/sliderController'); +const homeController = require('../controllers/homeController'); +const yearBannerController = require('../controllers/yearBannerController'); +const counterDayController = require('../controllers/counterDayController'); +const captchaController = require('../controllers/captchaController'); +const dataBackupController = require('../controllers/dataBackupController'); +const pollController = require('../controllers/pollController'); +const meetingController = require('../controllers/meetingController'); +const electionController = require('../controllers/electionController'); +const feedBackController = require('../controllers/feedBackController'); +const pdfController = require('../controllers/pdfController'); + + +/** + * @swagger + * /public/home: + * get: + * summary: Get home page data by user + * description: Fetches various sections of the home page including occasions, sliders, news, galleries, and notifications. + * tags: + * - Public + * parameters: + * - in: query + * name: portal + * schema: + * type: string + * description: The portal type to filter the content + * responses: + * 200: + * description: A JSON object containing home page data + * content: + * application/json: + * schema: + * type: object + * properties: + * occasion: + * type: array + * items: + * type: object + * s1: + * type: array + * items: + * type: object + * s2: + * type: array + * items: + * type: object + * s3: + * type: array + * items: + * type: object + * s4: + * type: object + * properties: + * nameTag: + * type: string + * news: + * type: array + * items: + * type: object + * s5: + * type: array + * items: + * type: object + * s6: + * type: array + * items: + * type: object + * s1Side: + * type: array + * items: + * type: object + * s2Side: + * type: array + * items: + * type: object + * s3Side: + * type: array + * items: + * type: object + * s4Side: + * type: array + * items: + * type: object + * s5Side: + * type: array + * items: + * type: object + * s6Side: + * type: array + * items: + * type: object + * s7Side: + * type: array + * items: + * type: object + * notificationsSide: + * type: array + * items: + * type: object + * 500: + * description: Internal server error + */ +// Home Swagger +router.get('/home', homeController.getHomeByUser); + +router.get('/pdf', pdfController.GetAll); + +// Search Swagger +/** + * @swagger + * /public/search: + * get: + * summary: Search for news, galleries, and categories + * description: Searches for news articles, gallery items, and categories based on the provided search terms. + * tags: + * - Public + * parameters: + * - in: query + * name: portal + * schema: + * type: string + * description: The portal type to filter the content (optional) + * - in: query + * name: terms + * schema: + * type: string + * required: true + * description: The search terms to filter the content + * responses: + * 200: + * description: A JSON object containing search results + * content: + * application/json: + * schema: + * type: object + * properties: + * news: + * type: array + * items: + * type: object + * media: + * type: array + * items: + * type: object + * pages: + * type: array + * items: + * type: object + * 500: + * description: Internal server error + */ +router.get('/search', homeController.search); +// Year Banner Swagger +/** + * @swagger + * /public/year-banner: + * get: + * summary: Get year banner + * description: Fetches the year banner settings including social media links and display options. + * tags: + * - Public + * responses: + * 200: + * description: A JSON object containing year banner settings + * content: + * application/json: + * schema: + * type: object + * properties: + * mainCover: + * type: string + * description: The URL of the main cover image + * iranFlag: + * type: boolean + * description: Display Iran flag + * electionBtn: + * type: boolean + * description: Display election button + * hasEmail: + * type: boolean + * description: Display email option + * hasGPlus: + * type: boolean + * description: Display Google Plus option + * hasTweeter: + * type: boolean + * description: Display Twitter option + * hasInstagram: + * type: boolean + * description: Display Instagram option + * email: + * type: string + * description: Email address + * gPlus: + * type: string + * description: Google Plus URL + * tweeter: + * type: string + * description: Twitter URL + * instagram: + * type: string + * description: Instagram URL + * 500: + * description: Internal server error + */ +router.get('/yearBanner', yearBannerController.getYearBanner); +router.get('/books', pdfController.GetAll) + +router.get('/books/:id', pdfController.GetOne) + + +// GetMenu Swagger +/** + * @swagger + * /public/menu: + * get: + * summary: Get menu items + * description: Fetches menu items including categories and static content pages for the specified portal. + * tags: + * - Public + * parameters: + * - in: query + * name: portal + * schema: + * type: string + * description: The portal type to filter the menu items (optional) + * responses: + * 200: + * description: A JSON object containing menu items + * content: + * application/json: + * schema: + * type: object + * properties: + * categories: + * type: array + * items: + * type: object + * properties: + * title: + * type: string + * description: The title of the category + * childs: + * type: array + * items: + * type: object + * properties: + * title: + * type: string + * description: The title of the sub-category + * navIndex: + * type: number + * description: The navigation index + * url: + * type: string + * description: The URL of the category + * modelType: + * type: string + * description: The portal type + * treeCat: + * type: object + * description: The tree structure of the category + * defaultPageType: + * type: string + * description: The default page type of the category + * staticContents: + * type: boolean + * description: Indicates whether static content pages are available in the menu + * 500: + * description: Internal server error + */ +router.get('/getMenu', categoryController.getMenu); + +// Filter Data +router.post('/news/:length/:userViews',newsController.FilterNews); + +router.get('/news/ostandar' , newsController.OstandarNews) + +// View News Swagger +/** + * @swagger + * /public/viewNews/{title}: + * get: + * summary: View news details + * description: Fetches the details of a specific news article by its title, including the creator and comments. + * tags: + * - Public + * parameters: + * - in: path + * name: title + * schema: + * type: string + * required: true + * description: The ID of the news article to view + * responses: + * 200: + * description: A JSON object containing the news article and its comments + * content: + * application/json: + * schema: + * type: object + * properties: + * news: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the news article + * title: + * type: string + * description: The title of the news article + * content: + * type: string + * description: The content of the news article + * userViews: + * type: number + * description: The number of user views + * _creator: + * type: object + * properties: + * firstName: + * type: string + * description: The first name of the creator + * lastName: + * type: string + * description: The last name of the creator + * profilePic: + * type: string + * description: The profile picture URL of the creator + * catId: + * type: object + * properties: + * title: + * type: string + * description: The title of the category + * comments: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the comment + * content: + * type: string + * description: The content of the comment + * allowShow: + * type: boolean + * description: Whether the comment is allowed to be shown + * 404: + * description: News article not found + * 500: + * description: Internal server error + */ +router.get('/viewNews/:title', newsController.viewNews); +// Get News From DB Swagger +/** + * @swagger + * /public/getnews: + * get: + * summary: Get all news + * description: Fetches news articles based on various flags, categories, and other filters. + * tags: + * - Public + * parameters: + * - in: query + * name: flag + * schema: + * type: string + * enum: [category, all, new, slider, special, random, popular, events] + * description: Filter news by type + * - in: query + * name: catId + * schema: + * type: string + * description: The category ID to filter news by + * - in: query + * name: portal + * schema: + * type: string + * description: The portal type to filter news by + * - in: query + * name: limit + * schema: + * type: integer + * default: 10 + * description: The number of news articles to return + * - in: query + * name: page + * schema: + * type: integer + * default: 1 + * description: The page number for pagination + * responses: + * 200: + * description: A JSON object containing paginated news articles + * content: + * application/json: + * schema: + * type: object + * properties: + * docs: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the news article + * title: + * type: string + * description: The title of the news article + * summaryTitle: + * type: string + * description: The summary title of the news article + * customDate: + * type: string + * format: date-time + * description: The custom date of the news article + * userViews: + * type: number + * description: The number of user views + * totalDocs: + * type: integer + * description: The total number of news articles + * limit: + * type: integer + * description: The number of news articles per page + * totalPages: + * type: integer + * description: The total number of pages + * page: + * type: integer + * description: The current page number + * 500: + * description: Internal server error + */ +router.get('/getnews', newsController.getAllNews); +// GetCategory From title Swagger +/** + * @swagger + * /public/getCategory/{title}: + * get: + * summary: Get news by category + * description: Fetches news articles and related content for a specific category. + * tags: + * - Public + * parameters: + * - in: path + * name: title + * required: true + * schema: + * type: string + * description: The title of the category + * - in: query + * name: page + * schema: + * type: integer + * default: 1 + * description: The page number for pagination + * responses: + * 200: + * description: A JSON object containing news and related content for the specified category + * content: + * application/json: + * schema: + * type: object + * properties: + * category: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the category + * title: + * type: string + * description: The title of the category + * heroNews: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the news article + * title: + * type: string + * description: The title of the news article + * news: + * type: object + * properties: + * docs: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the news article + * title: + * type: string + * description: The title of the news article + * totalDocs: + * type: integer + * description: The total number of news articles + * limit: + * type: integer + * description: The number of news articles per page + * totalPages: + * type: integer + * description: The total number of pages + * page: + * type: integer + * description: The current page number + * newsFile: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the news file + * title: + * type: string + * description: The title of the news file + * specials: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the special news article + * title: + * type: string + * description: The title of the special news article + * events: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the event news article + * title: + * type: string + * description: The title of the event news article + * polls: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the poll + * question: + * type: string + * description: The question of the poll + * latestNews: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the latest news article + * title: + * type: string + * description: The title of the latest news article + * 404: + * description: Category not found + * 500: + * description: Internal server error + */ +router.get('/getCategory/:title', newsController.getNewsByCategory); +// Get Realated News Swagger +/** + * @swagger + * /public/getRelatedNews: + * get: + * summary: Get related news articles + * description: Fetches news articles related to a specific news article based on its category. + * tags: + * - Public + * parameters: + * - in: query + * name: portal + * required: true + * schema: + * type: string + * description: The portal type to filter the content + * - in: query + * name: title + * required: true + * schema: + * type: string + * description: The ID of the target news article + * responses: + * 200: + * description: A JSON object containing related news articles + * content: + * application/json: + * schema: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the news article + * title: + * type: string + * description: The title of the news article + * summary: + * type: string + * description: The summary of the news article + * customDate: + * type: string + * format: date-time + * description: The custom date of the news article + * catId: + * type: string + * description: The category ID of the news article + * modelType: + * type: string + * description: The portal type of the news article + * 500: + * description: Internal server error + */ +router.get('/getRelatedNews', newsController.getRelated); +// Get Gallery Cat Swagger +/** + * @swagger + * /getGalleryCat/{catId}: + * get: + * summary: Get gallery items by category + * description: Fetches gallery items based on the specified category ID and gallery type. + * tags: + * - Public + * parameters: + * - in: path + * name: catId + * required: true + * schema: + * type: string + * description: The ID of the category to filter the gallery items + * - in: query + * name: type + * required: true + * schema: + * type: string + * description: The type of gallery items to fetch (e.g., image, video) + * - in: query + * name: page + * schema: + * type: integer + * default: 1 + * description: The page number for pagination + * responses: + * 200: + * description: A JSON object containing gallery items and favorites + * content: + * application/json: + * schema: + * type: object + * properties: + * all: + * type: object + * properties: + * docs: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the gallery item + * title: + * type: string + * description: The title of the gallery item + * customDate: + * type: string + * format: date-time + * description: The custom date of the gallery item + * catId: + * type: string + * description: The category ID of the gallery item + * galleryType: + * type: string + * description: The type of the gallery item + * galleryStatus: + * type: boolean + * description: The status of the gallery item + * _creator: + * type: object + * properties: + * firstName: + * type: string + * lastName: + * type: string + * totalDocs: + * type: integer + * description: The total number of gallery items + * limit: + * type: integer + * description: The number of items per page + * page: + * type: integer + * description: The current page number + * totalPages: + * type: integer + * description: The total number of pages + * pagingCounter: + * type: integer + * description: The paging counter + * hasPrevPage: + * type: boolean + * description: Whether there is a previous page + * hasNextPage: + * type: boolean + * description: Whether there is a next page + * prevPage: + * type: integer + * description: The previous page number + * nextPage: + * type: integer + * description: The next page number + * favorites: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the favorite gallery item + * title: + * type: string + * description: The title of the favorite gallery item + * customDate: + * type: string + * format: date-time + * description: The custom date of the favorite gallery item + * catId: + * type: string + * description: The category ID of the favorite gallery item + * galleryType: + * type: string + * description: The type of the favorite gallery item + * galleryStatus: + * type: boolean + * description: The status of the favorite gallery item + * 500: + * description: Internal server error + */ +router.get('/getGalleryCat/:catId', galleryController.getGalleryPublic); + +router.get('/gallery/archive' , galleryController.GetArchive) + +// Get All Gallery Swagger +/** + * @swagger + * /public/getAllGallery: + * get: + * summary: Get all gallery items + * description: Fetches all gallery items based on type, page, and portal. + * tags: + * - Public + * parameters: + * - in: query + * name: type + * required: true + * schema: + * type: string + * description: The type of gallery items to fetch (e.g., image, video) + * - in: query + * name: page + * schema: + * type: integer + * default: 1 + * description: The page number for pagination + * - in: query + * name: portal + * schema: + * type: string + * description: The portal type to filter the content + * responses: + * 200: + * description: A JSON object containing gallery items, hero item, and favorites + * content: + * application/json: + * schema: + * type: object + * properties: + * all: + * type: object + * properties: + * docs: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the gallery item + * title: + * type: string + * description: The title of the gallery item + * customDate: + * type: string + * format: date-time + * description: The custom date of the gallery item + * catId: + * type: string + * description: The category ID of the gallery item + * galleryType: + * type: string + * description: The type of the gallery item + * galleryStatus: + * type: boolean + * description: The status of the gallery item + * _creator: + * type: object + * properties: + * firstName: + * type: string + * lastName: + * type: string + * totalDocs: + * type: integer + * description: The total number of gallery items + * limit: + * type: integer + * description: The number of items per page + * page: + * type: integer + * description: The current page number + * totalPages: + * type: integer + * description: The total number of pages + * pagingCounter: + * type: integer + * description: The paging counter + * hasPrevPage: + * type: boolean + * description: Whether there is a previous page + * hasNextPage: + * type: boolean + * description: Whether there is a next page + * prevPage: + * type: integer + * description: The previous page number + * nextPage: + * type: integer + * description: The next page number + * hero: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the hero gallery item + * title: + * type: string + * description: The title of the hero gallery item + * customDate: + * type: string + * format: date-time + * description: The custom date of the hero gallery item + * catId: + * type: string + * description: The category ID of the hero gallery item + * galleryType: + * type: string + * description: The type of the hero gallery item + * galleryStatus: + * type: boolean + * description: The status of the hero gallery item + * favorites: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the favorite gallery item + * title: + * type: string + * description: The title of the favorite gallery item + * customDate: + * type: string + * format: date-time + * description: The custom date of the favorite gallery item + * catId: + * type: string + * description: The category ID of the favorite gallery item + * galleryType: + * type: string + * description: The type of the favorite gallery item + * galleryStatus: + * type: boolean + * description: The status of the favorite gallery item + * 500: + * description: Internal server error + */ +router.get('/getAllGallery', galleryController.getAllGallery); +// Get Gallery Title +/** + * @swagger + * /public/getGallery/{title}: + * get: + * summary: View a gallery item + * description: Fetches a single gallery item by its title. + * tags: + * - Public + * parameters: + * - in: path + * name: title + * required: true + * schema: + * type: string + * description: The title (ID) of the gallery item to fetch + * responses: + * 200: + * description: A JSON object containing the gallery item details + * content: + * application/json: + * schema: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the gallery item + * title: + * type: string + * description: The title of the gallery item + * customDate: + * type: string + * format: date-time + * description: The custom date of the gallery item + * catId: + * type: string + * description: The category ID of the gallery item + * galleryType: + * type: string + * description: The type of the gallery item + * galleryStatus: + * type: boolean + * description: The status of the gallery item + * _creator: + * type: object + * properties: + * firstName: + * type: string + * lastName: + * type: string + * profilePic: + * type: string + * description: The URL of the creator's profile picture + * userViews: + * type: integer + * description: The number of user views for the gallery item + * 404: + * description: Gallery item not found + * 500: + * description: Internal server error + */ +router.get('/getGallery/:title', galleryController.viewGallery); +// Get Related Gallery +/** + * @swagger + * /public/getRelatedGallery: + * get: + * summary: Get related gallery items + * description: Fetches related gallery items based on the provided type and excludes the current gallery item. + * tags: + * - Public + * parameters: + * - in: query + * name: type + * required: true + * schema: + * type: string + * description: The type of gallery items to fetch + * - in: query + * name: title + * required: true + * schema: + * type: string + * description: The title (ID) of the current gallery item to exclude from the results + * responses: + * 200: + * description: A JSON array of related gallery items + * content: + * application/json: + * schema: + * type: array + * items: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the gallery item + * title: + * type: string + * description: The title of the gallery item + * customDate: + * type: string + * format: date-time + * description: The custom date of the gallery item + * catId: + * type: string + * description: The category ID of the gallery item + * galleryType: + * type: string + * description: The type of the gallery item + * galleryStatus: + * type: boolean + * description: The status of the gallery item + * _creator: + * type: object + * properties: + * firstName: + * type: string + * lastName: + * type: string + * userViews: + * type: integer + * description: The number of user views for the gallery item + * 500: + * description: Internal server error + */ +router.get('/getRelatedGallery', galleryController.getRelated); +// router.get('/getFooter', contentController.footer); +// View Contents +/** + * @swagger + * /public/viewContent/{param}: + * get: + * summary: View content by parameter + * description: Retrieves content based on the provided parameter. + * tags: + * - Public + * parameters: + * - in: path + * name: param + * required: true + * schema: + * type: string + * description: The parameter used to identify the content. + * responses: + * 200: + * description: A JSON object containing the content. + * content: + * application/json: + * schema: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the content. + * title: + * type: string + * description: The title of the content. + * description: + * type: string + * description: The description of the content. + * param: + * type: string + * description: The parameter used to identify the content. + * content: + * type: string + * description: The actual content. + * createdAt: + * type: string + * format: date-time + * description: The date and time when the content was created. + * 404: + * description: Content not found. + * 500: + * description: Internal server error. + */ +router.get('/viewContent/:param', contentController.viewContent); +// Add Comment +/** + * @swagger + * /public/addComment: + * post: + * summary: Add a comment + * description: Adds a comment to a news article, category, or contact form. + * tags: + * - Public + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * name: + * type: string + * description: + * type: string + * email: + * type: string + * modelId: + * type: string + * modelName: + * type: string + * captcha: + * type: string + * responses: + * 200: + * description: A JSON object containing the added comment. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Comment' + * 422: + * description: Validation error. The request body contains invalid data. + * 403: + * description: Forbidden. The user is not allowed to add a comment to the specified model. + * 404: + * description: Not found. The specified model does not exist. + * 500: + * description: Internal server error. + */ +router.post('/addComment', commentController.addComment); +// Get Comments Id +/** + * @swagger + * /public/getComments/{id}: + * get: + * summary: Get comments by model ID + * description: Retrieves comments associated with a specific model ID. + * tags: + * - Public + * parameters: + * - in: path + * name: id + * required: true + * description: The ID of the model. + * schema: + * type: string + * responses: + * 200: + * description: An array of comments associated with the specified model ID. + * content: + * application/json: + * schema: + * type: array + * items: + * $ref: '#/components/schemas/Comment' + * 500: + * description: Internal server error. + */ +router.get('/getComments/:id', commentController.getCommentById); +// Get News Files +/** + * @swagger + * /public/getNewsFile: + * get: + * summary: Get news files + * description: Retrieves news files based on the provided query parameters. + * tags: + * - Public + * parameters: + * - in: query + * name: portal + * schema: + * type: string + * description: The portal type to filter the news files. + * - in: query + * name: limit + * schema: + * type: integer + * default: 4 + * description: The maximum number of news files to retrieve. Defaults to 4 if not provided. + * - in: query + * name: skip + * schema: + * type: integer + * default: 0 + * description: The number of news files to skip. Defaults to 0 if not provided. + * responses: + * '200': + * description: An array of news files. + * content: + * application/json: + * schema: + * type: array + * items: + * $ref: '#/components/schemas/NewsFile' + * '500': + * description: Internal server error. + */ +router.get('/getNewsFile', newsFileController.getAllNewsFile); + +// Get News File Title +/** + * @swagger + * /public/getNewsFile/{title}: + * get: + * summary: View news file by title + * description: Retrieves a specific news file along with related news articles. + * tags: + * - Public + * parameters: + * - in: path + * name: title + * required: true + * description: The title of the news file. + * schema: + * type: string + * responses: + * '200': + * description: A news file and related news articles. + * content: + * application/json: + * schema: + * type: object + * properties: + * newsFile: + * $ref: '#/components/schemas/NewsFile' + * news: + * type: object + * properties: + * docs: + * type: array + * items: + * $ref: '#/components/schemas/News' + * '500': + * description: Internal server error. + */ +router.get('/getNewsFile/:title', newsFileController.viewNewsFile); +// Get Links +/** + * @swagger + * /public/getLinks: + * get: + * summary: Get all links + * description: Retrieves all links based on the provided query parameters. + * tags: + * - Public + * parameters: + * - in: query + * name: portal + * schema: + * type: string + * description: The portal type to filter the links. If not provided, defaults to 'ostandari'. + * responses: + * '200': + * description: An array of links. + * content: + * application/json: + * schema: + * type: array + * items: + * $ref: '#/components/schemas/Link' + * '500': + * description: Internal server error. + */ +router.get('/getLinks', linksController.getAllLinks); +// Get Sliders +/** + * @swagger + * /public/getSliders: + * get: + * summary: Get all sliders by user + * description: Retrieves all sliders based on the provided query parameters. + * tags: + * - Public + * parameters: + * - in: query + * name: portal + * schema: + * type: string + * description: The portal type to filter the sliders. If not provided, defaults to 'ostandari'. + * responses: + * '200': + * description: An array of sliders. + * content: + * application/json: + * schema: + * type: array + * items: + * $ref: '#/components/schemas/Slider' + * '500': + * description: Internal server error. + */ +router.get('/getSliders', sliderController.getAllSliderByUser); + +// Get Sections +/** + * @swagger + * /public/getSections: + * get: + * summary: Get sections + * description: Retrieves sections based on the provided portal type. + * tags: + * - Public + * parameters: + * - in: query + * name: portal + * schema: + * type: string + * description: The portal type to filter the sections. + * responses: + * '200': + * description: Sections retrieved successfully. + * content: + * application/json: + * schema: + * type: object + * properties: + * sectionOne: + * type: array + * items: + * $ref: '#/components/schemas/Section' + * sectionTwo: + * type: array + * items: + * $ref: '#/components/schemas/Section' + * sectionThree: + * type: array + * items: + * $ref: '#/components/schemas/Section' + * '500': + * description: Internal server error. + */ +router.get('/getSections', newsController.getSections); +// Search News bytitle +/** + * @swagger + * /public/searchnewsbytitle/{title}: + * get: + * summary: Search news by title + * description: Retrieves news based on the provided title search term. + * tags: + * - Public + * parameters: + * - in: path + * name: title + * required: true + * schema: + * type: string + * description: The title search term. + * responses: + * '200': + * description: News retrieved successfully. + * content: + * application/json: + * schema: + * type: array + * items: + * $ref: '#/components/schemas/News' + * '500': + * description: Internal server error. + */ +router.get('/searchnewsbytitle/:title', newsController.searchForSlider); + +// Counter Day +/** + * @swagger + * /public/counterDay: + * get: + * summary: Get counter day by user + * description: Retrieves the counter day information for the current user. + * tags: + * - Public + * responses: + * '200': + * description: Counter day information retrieved successfully. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/CounterDay' + * '500': + * description: Internal server error. + */ +router.get('/counterDay', counterDayController.getCounterDayByUser); +// Get Captcha +/** + * @swagger + * /public/getCaptcha: + * get: + * summary: Get CAPTCHA + * description: Retrieves a CAPTCHA image for verification purposes. + * tags: + * - Public + * responses: + * '200': + * description: CAPTCHA image retrieved successfully. + * content: + * image/svg+xml: + * schema: + * type: string + * format: binary + * '500': + * description: Internal server error. + */ +router.get('/getCaptcha', captchaController.getCaptcha); +// Add Answer +/** + * @swagger + * /public/answer: + * post: + * summary: Submit answers to a survey + * description: Submit user answers to a survey. + * tags: + * - Public + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * surveyId: + * type: string + * description: The ID of the survey. + * option: + * type: array + * items: + * type: string + * description: An array of selected options. + * pollToken: + * type: string + * description: Token for the survey. + * responses: + * '200': + * description: Survey response submitted successfully. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Confirmation message. + * '500': + * description: Internal server error. + */ +router.post('/answer', pollController.answer); +// Meet Ostandari +/** + * @swagger + * /public/meetingOstandar: + * post: + * summary: Add a meeting request + * description: Submit a meeting request to Ostandar. + * tags: + * - Public + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * name: + * type: string + * description: The name of the person requesting the meeting. + * subject: + * type: string + * description: The subject of the meeting. + * description: + * type: string + * description: The description of the meeting. + * email: + * type: string + * format: email + * description: The email of the person requesting the meeting (optional). + * phoneNumber: + * type: string + * description: The phone number of the person requesting the meeting. + * nationalCode: + * type: string + * description: The national code of the person requesting the meeting. + * captcha: + * type: string + * description: The captcha code for verification. + * responses: + * '200': + * description: Meeting request submitted successfully. + * content: + * application/json: + * schema: + * type: object + * properties: + * name: + * type: string + * description: The name of the person requesting the meeting. + * subject: + * type: string + * description: The subject of the meeting. + * description: + * type: string + * description: The description of the meeting. + * phoneNumber: + * type: string + * description: The phone number of the person requesting the meeting. + * email: + * type: string + * format: email + * description: The email of the person requesting the meeting. + * nationalCode: + * type: string + * description: The national code of the person requesting the meeting. + * '500': + * description: Internal server error. + */ +router.post('/meetingOstandar', meetingController.addMeeting); +// Add FeedBack +/** + * @swagger + * /public/addFeedBack: + * post: + * summary: Add feedback + * description: Submit feedback from users. + * tags: + * - Public + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * name: + * type: string + * description: The name of the person providing the feedback. + * description: + * type: string + * description: The feedback description. + * email: + * type: string + * format: email + * description: The email of the person providing the feedback (optional). + * phoneNumber: + * type: string + * description: The phone number of the person providing the feedback. + * captcha: + * type: string + * description: The captcha code for verification. + * responses: + * '200': + * description: Feedback submitted successfully. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: A success message indicating the feedback was saved. + * '422': + * description: Validation error. Indicates missing or invalid fields in the request body. + * content: + * application/json: + * schema: + * type: object + * properties: + * validation: + * type: object + * description: Object containing details about the validation errors. + * '500': + * description: Internal server error. + */ +router.post('/addFeedBack', feedBackController.addFeedBack); + +////////////// election +// Get Electronic +/** + * @swagger + * /public/getElection: + * get: + * summary: Get election by user + * description: Retrieves the election information for the logged-in user. + * tags: + * - Public + * security: + * - bearerAuth: [] + * responses: + * '200': + * description: Election information retrieved successfully. + * content: + * application/json: + * schema: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the election. + * title: + * type: string + * description: The title of the election. + * description: + * type: string + * description: The description of the election. + * startDate: + * type: string + * format: date-time + * description: The start date of the election. + * endDate: + * type: string + * format: date-time + * description: The end date of the election. + * voters: + * type: array + * description: List of voters. + * items: + * type: object + * properties: + * _id: + * type: string + * description: The ID of the voter. + * voted: + * type: boolean + * description: Indicates whether the voter has already voted. + * '403': + * description: Access forbidden. Indicates that the user does not have permission to view the election. + * '500': + * description: Internal server error. + */ +router.get('/getElection' , isVoter , electionController.getElectionByUser); +// Add Vote +/** + * @swagger + * /public/addVote: + * post: + * summary: Add vote + * description: Allows a logged-in user to cast a vote in an election. + * tags: + * - Public + * security: + * - bearerAuth: [] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * electionId: + * type: string + * description: The ID of the election. + * candidateId: + * type: string + * description: The ID of the candidate. + * responses: + * '200': + * description: Vote added successfully. + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * description: Success message indicating the vote was added successfully. + * '403': + * description: Access forbidden. Indicates that the user does not have permission to vote. + * '404': + * description: Not found. Indicates that the specified election or candidate does not exist. + * '500': + * description: Internal server error. + */ +router.post('/addVote' , isVoter , electionController.addVote); + +///////////// backup +/** + * @swagger + * /public/backup/{token}: + * get: + * summary: Create backup + * description: Allows authorized users with specific permissions to create a backup of the database. + * tags: + * - Public + * parameters: + * - in: path + * name: token + * required: true + * description: User token for authorization. Add 'Bearer ' before the token. + * schema: + * type: string + * security: + * - BearerAuth: [] + * responses: + * '200': + * description: Backup created successfully. + * content: + * application/zip: + * schema: + * type: string + * format: binary + * '401': + * description: Unauthorized. Indicates that the user is not authorized to create a backup. + * '500': + * description: Internal server error. + */ +router.get('/backup/:token', dataBackupController.createBackUp) + +//////////// add all news imported +// router.post('/addAllNews', newsController.addAllNews) +// router.get('/deleted', newsController.deleteAllNews) + +module.exports = router diff --git a/server/routes/user.js b/server/routes/user.js new file mode 100644 index 0000000..448cbaf --- /dev/null +++ b/server/routes/user.js @@ -0,0 +1,5 @@ +const {Router} = require('express') +const router = Router() + + +module.exports = router diff --git a/static/favicon.png b/static/favicon.png new file mode 100644 index 0000000..4e45e1d Binary files /dev/null and b/static/favicon.png differ diff --git a/static/images/patterns/black_lozenge.png b/static/images/patterns/black_lozenge.png new file mode 100644 index 0000000..67485d9 Binary files /dev/null and b/static/images/patterns/black_lozenge.png differ diff --git a/static/images/patterns/bo_play_pattern.png b/static/images/patterns/bo_play_pattern.png new file mode 100644 index 0000000..cdfde09 Binary files /dev/null and b/static/images/patterns/bo_play_pattern.png differ diff --git a/static/images/patterns/ecailles.png b/static/images/patterns/ecailles.png new file mode 100644 index 0000000..dc1f3a4 Binary files /dev/null and b/static/images/patterns/ecailles.png differ diff --git a/static/images/patterns/pattern-2rq4.png b/static/images/patterns/pattern-2rq4.png new file mode 100644 index 0000000..d304ae9 Binary files /dev/null and b/static/images/patterns/pattern-2rq4.png differ diff --git a/static/images/patterns/pattern-apuv.png b/static/images/patterns/pattern-apuv.png new file mode 100644 index 0000000..7c9870e Binary files /dev/null and b/static/images/patterns/pattern-apuv.png differ diff --git a/static/images/patterns/pattern-eq4r.png b/static/images/patterns/pattern-eq4r.png new file mode 100644 index 0000000..4022f9b Binary files /dev/null and b/static/images/patterns/pattern-eq4r.png differ diff --git a/static/images/patterns/px_by_Gre3g.png b/static/images/patterns/px_by_Gre3g.png new file mode 100644 index 0000000..aad9ba5 Binary files /dev/null and b/static/images/patterns/px_by_Gre3g.png differ diff --git a/static/images/patterns/rebel.png b/static/images/patterns/rebel.png new file mode 100644 index 0000000..1ccea5a Binary files /dev/null and b/static/images/patterns/rebel.png differ diff --git a/static/images/patterns/woven.png b/static/images/patterns/woven.png new file mode 100644 index 0000000..b9f74da Binary files /dev/null and b/static/images/patterns/woven.png differ diff --git a/static/img/avatar.png b/static/img/avatar.png new file mode 100644 index 0000000..e16488e Binary files /dev/null and b/static/img/avatar.png differ diff --git a/static/img/bgFrame.png b/static/img/bgFrame.png new file mode 100644 index 0000000..2aaf471 Binary files /dev/null and b/static/img/bgFrame.png differ diff --git a/static/img/logo-re3-150x150.png b/static/img/logo-re3-150x150.png new file mode 100644 index 0000000..ed7eac6 Binary files /dev/null and b/static/img/logo-re3-150x150.png differ diff --git a/static/img/logo-re30-150x150.png b/static/img/logo-re30-150x150.png new file mode 100644 index 0000000..a439087 Binary files /dev/null and b/static/img/logo-re30-150x150.png differ diff --git a/static/img/no-cover.jpg b/static/img/no-cover.jpg new file mode 100644 index 0000000..f60a467 Binary files /dev/null and b/static/img/no-cover.jpg differ diff --git a/static/js/flipBook/flipbook.book3.min.js b/static/js/flipBook/flipbook.book3.min.js new file mode 100644 index 0000000..586e2e8 --- /dev/null +++ b/static/js/flipBook/flipbook.book3.min.js @@ -0,0 +1,5 @@ +/* v 3.17 +author http://codecanyon.net/user/creativeinteractivemedia/portfolio?ref=creativeinteractivemedia +*/ + +var FLIPBOOK=FLIPBOOK||{};FLIPBOOK.Book3=function(t,e,i){this.options=i,this.model=e,this.singlePage=i.singlePageMode,this.pageWidth=this.options.pageWidth,this.pageHeight=this.options.pageHeight,this.wrapper=t,this.$wrapper=jQuery(this.wrapper).addClass("flipbook-book3"),this.$bookLayer=this.$wrapper.parent(),this.bookLayer=this.$bookLayer[0],this.flipEasing="easeInOutCubic",this.flipEasing="easeOutSine",this.flipEasing="easeOutQuad",this.scroll=new FLIPBOOK.IScroll(this.bookLayer,{zoom:!0,scrollX:!0,scrollY:!0,scrollbars:!0,keepInCenterV:!0,keepInCenterH:!0,freeScroll:!0,preventDefault:!1});var o=this;e.on("toolMove",function(){o.updateTool()}),e.on("toolSelect",function(){o.updateTool()}),this.scroll.on("zoomEnd",function(){var t;isNaN(o.scroll.scale)?o.zoomTo(i.zoomMin):(i.main.onZoom(o.scroll.scale/o.ratio),t=i.main.zoom,o.scroll.options.eventPassthrough=1").appendTo(this.$wrapper).addClass("flipbook-center-container3"),this.$centerContainer.css({"-webkit-perspective":a,perspective:a}),this.centerContainerStyle=this.$centerContainer[0].style,this.centerContainerStyle.width=2*this.pageWidth+"px",this.centerContainerStyle.height=this.pageHeight+"px",this.pagesArr=[],this.animating=!1,this.setRightIndex(i.rightToLeft?i.pages.length:0),o.updateFlipped(),this.numPages=i.pages.length;for(var h=0;hthis.options.zoomMin&&1this.options.pages.length&&(t=this.options.pages.length),t!=this.rightIndex)){if(e||this.options.instantFlip)return this.setRightIndex(t),this.updateFlipped(),this.updateVisiblePages(),void this.options.main.turnPageComplete();this.flipping=!0;var i=this.flipEasing;void 0===jQuery.easing[i]&&this.options.main.initEasing();var o=700*this.options.pageFlipDuration;this.options.singlePageMode||(1==this.view?tthis.rightIndex?(end=180,(s.angle<=0||180<=s.angle||!s.angle)&&(s.angle=1)):tt},FLIPBOOK.Page3=function(t,e,i,o){this.book=t,this.options=t.options,this.texture=i,this.html=o,this.index=e,this.$wrapper=jQuery("
").addClass("flipbook-page3").width(t.options.pageWidth).height(t.options.pageHeight),this.wrapper=this.$wrapper[0],this.htmlContentScale=this.book.$wrapper.height()/1e3;var s=t.options;this.$inner=jQuery("
").appendTo(this.$wrapper).addClass("flipbook-page3-inner"),this.$bg=jQuery("
").appendTo(this.$inner).addClass("flipbook-page3-bg"),this.$html=jQuery("
").appendTo(this.$inner).addClass("flipbook-page3-html").addClass("page_"+e),this.$shadow=jQuery("
").appendTo(this.$wrapper).addClass("flipbook-page3-shadow"),s.pagePreloader?this.$preloader=jQuery('').appendTo(this.$wrapper):this.$preloader=jQuery('').appendTo(this.$wrapper),this.shadow=this.$shadow[0],this.hidden=!1,this.hide(),this.zIndex=0,this.options.rightToLeft&&this.options.oddPages&&e++,this.options.singlePageMode||e%2==0?(this.$wrapper.css("left",String(this.book.options.pageWidth-1)+"px").addClass("flipbook-page3-front"),this.type="front"):(this.$wrapper.addClass("flipbook-page3-back"),this.type="back")},FLIPBOOK.Page3.prototype={load:function(o){var s,t;1!=this.loaded?(this.loaded=!0,t=(s=this).options.rightToLeft?this.book.pagesArr.length-this.index-1:this.index,this.options.main.loadPageHTML(t,function(t){t&&(s.$html.empty().append(jQuery(t)),s.$html[0].style.transform="scale("+s.htmlContentScale+") translateZ(0)"),s.options.doublePage&&s.index%2==0&&0s&&(s=this.book.pagesArr[n].zIndex);this._setZIndex(s+1)}},_setZIndex:function(t){this.zIndex!=t&&(this.wrapper.style["z-index"]=t),this.zIndex=t},_setStyle:function(t,e,i){t&&(t[e]=i)}}; \ No newline at end of file diff --git a/static/js/flipBook/flipbook.min.js b/static/js/flipBook/flipbook.min.js new file mode 100644 index 0000000..26e0c2f --- /dev/null +++ b/static/js/flipBook/flipbook.min.js @@ -0,0 +1,5 @@ +/* v 3.17 +author http://codecanyon.net/user/creativeinteractivemedia/portfolio?ref=creativeinteractivemedia +*/ + +var FLIPBOOK=FLIPBOOK||{};!function(y,M,L,a){y.fn.flipBook=function(e){return new FLIPBOOK.Main(e,this)},y.fn.swipeBook=function(e){return e.viewMode="swipe",new FLIPBOOK.Main(e,this)},y.fn.flipBook.options={name:"",pages:[],tableOfContent:[],tableOfContentCloseOnClick:!0,thumbsCloseOnClick:!0,deeplinkingEnabled:!1,deeplinkingPrefix:"",assets:{preloader:"images/preloader.jpg",overlay:"images/overlay.png",flipMp3:"mp3/turnPage.mp3",spinner:"images/spinner.gif"},pdfUrl:null,pdfBrowserViewerIfMobile:!1,pdfBrowserViewerIfIE:!1,pdfBrowserViewerFullscreen:!0,pdfBrowserViewerFullscreenTarget:"_blank",pdfPageScale:1,pdfOutline:!0,rangeChunkSize:64,htmlLayer:!0,rightToLeft:!1,startPage:0,sound:!0,backgroundColor:"rgb(81, 85, 88)",backgroundImage:"",backgroundPattern:"",backgroundTransparent:!1,thumbSize:130,loadAllPages:!1,loadPagesF:2,loadPagesB:1,autoplayOnStart:!1,autoplayInterval:3e3,autoplayLoop:!0,skin:"light",layout:"1",menuOverBook:!1,menuFloating:!1,menuBackground:"",menuShadow:"",menuMargin:0,menuPadding:0,menuTransparent:!1,menu2OverBook:!0,menu2Floating:!1,menu2Background:"",menu2Shadow:"",menu2Margin:0,menu2Padding:0,menu2Transparent:!0,skinColor:"",skinBackground:"",btnColor:"",btnBackground:"none",btnSize:14,btnRadius:2,btnMargin:2,btnShadow:"",btnTextShadow:"",btnBorder:"",btnColorHover:"",btnBackgroundHover:"",sideBtnColor:"#FFF",sideBtnBackground:"#00000033",sideBtnSize:30,sideBtnRadius:0,sideBtnMargin:0,sideBtnPaddingV:5,sideBtnPaddingH:0,sideBtnShadow:"",sideBtnTextShadow:"",sideBtnBorder:"",sideBtnColorHover:"#FFF",sideBtnBackgroundHover:"#00000066",floatingBtnColor:"#EEE",floatingBtnBackground:"#00000044",floatingBtnSize:null,floatingBtnRadius:null,floatingBtnMargin:null,floatingBtnShadow:"",floatingBtnTextShadow:"",floatingBtnBorder:"",floatingBtnColorHover:"",floatingBtnBackgroundHover:"",btnOrder:["currentPage","btnFirst","btnPrev","btnNext","btnLast","btnZoomIn","btnZoomOut","btnRotateLeft","btnRotateRight","btnAutoplay","btnSearch","btnSelect","btnBookmark","btnToc","btnThumbs","btnShare","btnPrint","btnDownloadPages","btnDownloadPdf","btnSound","btnExpand","btnClose"],currentPage:{enabled:!0,title:"Current page",vAlign:"top",hAlign:"left",marginH:0,marginV:0,color:"",background:""},btnFirst:{enabled:!1,title:"First page",icon:"fa-angle-double-left",icon2:"first_page"},btnPrev:{enabled:!0,title:"Previous page",icon:"fa-angle-left",icon2:"chevron_left"},btnNext:{enabled:!0,title:"Next page",icon:"fa-angle-right",icon2:"chevron_right"},btnLast:{enabled:!1,title:"Last page",icon:"fa-angle-double-right",icon2:"last_page"},btnZoomIn:{enabled:!0,title:"Zoom in",icon:"fa-plus",icon2:"zoom_in"},btnZoomOut:{enabled:!0,title:"Zoom out",icon:"fa-minus",icon2:"zoom_out"},btnRotateLeft:{enabled:!1,title:"Rotate left",icon:"fas fa-undo"},btnRotateRight:{enabled:!1,title:"Rotate right",icon:"fas fa-redo"},btnAutoplay:{enabled:!0,title:"Autoplay",icon:"fa-play",icon2:"play_arrow",iconAlt:"fa-pause",iconAlt2:"pause"},btnSearch:{enabled:!1,title:"Search",icon:"fas fa-search",icon2:"search"},btnSelect:{enabled:!0,title:"Select tool",icon:"fas fa-i-cursor",icon2:"text_format"},btnBookmark:{enabled:!0,title:"Bookmark",icon:"fas fa-bookmark",icon2:"bookmark"},btnToc:{enabled:!0,title:"Table of Contents",icon:"fa-list-ol",icon2:"toc"},btnThumbs:{enabled:!0,title:"Pages",icon:"fa-th-large",icon2:"view_module"},btnShare:{enabled:!0,title:"Share",icon:"fa-link",icon2:"share",hideOnMobile:!0},btnPrint:{enabled:!0,title:"Print",icon:"fa-print",icon2:"print",hideOnMobile:!0},btnDownloadPages:{enabled:!0,title:"Download pages",icon:"fa-download",icon2:"file_download",url:"images/pages.zip",name:"allPages.zip"},btnDownloadPdf:{forceDownload:!1,enabled:!0,title:"Download PDF",icon:"fa-file",icon2:"picture_as_pdf",url:null,openInNewWindow:!0,name:"allPages.pdf"},btnSound:{enabled:!0,title:"Volume",icon:"fa-volume-up",iconAlt:"fa-volume-off",icon2:"volume_up",iconAlt2:"volume_mute",hideOnMobile:!0},btnExpand:{enabled:!0,title:"Toggle fullscreen",icon:"fa-expand",icon2:"fullscreen",iconAlt:"fa-compress",iconAlt2:"fullscreen_exit"},btnClose:{title:"Close",icon:"fa-times",icon2:"close",hAlign:"right",vAlign:"top",size:20},btnShareIfMobile:!1,btnSoundIfMobile:!1,btnPrintIfMobile:!1,sideNavigationButtons:!0,hideMenu:!1,twitter:{enabled:!0,url:null,description:null},facebook:{enabled:!0,load_sdk:!0,url:null,app_id:null,title:null,caption:null,description:null,image:null},pinterest:{enabled:!0,url:null,image:null,description:null},email:{enabled:!0,title:null,description:null,url:null},pdf:{annotationLayer:!1},pageTextureSize:2048,pageTextureSizeSmall:1500,pageTextureSizeMobile:null,pageTextureSizeMobileSmall:1024,viewMode:"webgl",singlePageMode:!1,singlePageModeIfMobile:!1,zoomMin:.95,zoomMax2:null,zoomSize:null,zoomStep:2,zoomTime:300,zoomReset:!1,zoomResetTime:300,wheelDisabledNotFullscreen:!1,arrowsDisabledNotFullscreen:!1,arrowsAlwaysEnabledForNavigation:!1,touchSwipeEnabled:!0,responsiveView:!0,responsiveViewTreshold:768,minPixelRatio:1,pageFlipDuration:1,contentOnStart:!1,thumbnailsOnStart:!1,searchOnStart:!1,sideMenuOverBook:!0,sideMenuOverMenu:!1,sideMenuOverMenu2:!0,sideMenuPosition:"left",lightBox:!1,lightBoxOpened:!1,lightBoxFullscreen:!1,lightboxCloseOnClick:!1,lightboxResetOnOpen:!0,lightboxBackground:null,lightboxBackgroundColor:null,lightboxBackgroundPattern:null,lightboxBackgroundImage:null,lightboxStartPage:null,lightboxMarginV:"0",lightboxMarginH:"0",lightboxCSS:"",lightboxPreload:!1,lightboxShowMenu:!1,lightboxCloseOnBack:!0,disableImageResize:!0,pan:0,panMax:10,panMax2:2,panMin:-10,panMin2:-2,tilt:0,tiltMax:0,tiltMax2:0,tiltMin:-20,tiltMin2:-5,rotateCameraOnMouseMove:!1,rotateCameraOnMouseDrag:!0,lights:!0,lightColor:16777215,lightPositionX:0,lightPositionZ:1400,lightPositionY:350,lightIntensity:.6,shadows:!0,shadowMapSize:1024,shadowOpacity:.2,shadowDistance:15,pageRoughness:1,pageMetalness:0,pageHardness:2,coverHardness:2,pageSegmentsW:5,pageSegmentsH:1,pageMiddleShadowSize:2,pageMiddleShadowColorL:"#999999",pageMiddleShadowColorR:"#777777",antialias:!1,preloaderText:"",fillPreloader:{enabled:!1,imgEmpty:"images/logo_light.png",imgFull:"images/logo_dark.png"},logoImg:"",logoUrl:"",logoCSS:"position:absolute;",logoHideOnMobile:!1,printMenu:!0,downloadMenu:!0,cover:!0,backCover:!0,textLayer:!0,googleAnalyticsTrackingCode:null,minimumAndroidVersion:6,linkColor:"rgba(255, 255, 0, .05)",linkColorHover:"rgba(255, 255, 0, .2)",rightClickEnabled:!0,strings:{print:"Print",printLeftPage:"Print left page",printRightPage:"Print right page",printCurrentPage:"Print current page",printAllPages:"Print all pages",download:"Download",downloadLeftPage:"Download left page",downloadRightPage:"Download right page",downloadCurrentPage:"Download current page",downloadAllPages:"Download all pages",bookmarks:"Bookmarks",bookmarkLeftPage:"Bookmark left page",bookmarkRightPage:"Bookmark right page",bookmarkCurrentPage:"Bookmark current page",search:"Search",findInDocument:"Find in document",pagesFoundContaining:"pages found containing",thumbnails:"Thumbnails",tableOfContent:"Table of Contents",share:"Share",pressEscToClose:"Press ESC to close",password:"Password"},mobile:{shadows:!1}},FLIPBOOK.Main=function(e,t){var n=this;this.elem=t,this.$elem=y(t),this.$body=y("body"),this.body=this.$body[0],this.$window=y(M),this.bodyHasVerticalScrollbar=function(){return n.body.scrollHeight>M.innerHeight},this.isZoomed=function(){return 1').width("100%").height("100%").attr("data",S.pdfUrl).appendTo(n.$elem)}function x(){var e,t,o;n.disposed||(e=M.location.hash,(o=t=n.getPageFromHash())<1?t=1:n.numPages&&t>n.numPages&&(t=n.numPages),t&&(t=S.rightToLeft&&S.pages&&S.pages.length?S.pages.length-t+1:t,n.started?n.Book&&(n.lightbox&&!FLIPBOOK.lightboxOpened&&(n.lightbox.openLightbox(),n.lightboxStart()),n.goToPage(t,-1==e.indexOf("flip"))):(S.startPage=o,S.lightBox&&(O(),S.lightBoxFullscreen&&setTimeout(function(){n.toggleExpand()},100)))))}function O(){var t;S.fillPreloader.enabled?(n.$fillPreloader=y("
").addClass("flipbook-fillPreloader"),(t=new Image).src=S.fillPreloader.imgEmpty,t.onload=function(){var e=new Image;e.src=S.fillPreloader.imgFull,e.onload=function(){y(t).appendTo(n.$fillPreloader),n.$fillPreloaderImg=y(e).appendTo(n.$fillPreloader),n.$fillPreloader.appendTo(n.wrapper),T()}}):T()}function T(){n.initialized||(n.id=Date.now(),n.addPageItems(),S.pdfMode?n.initPdf():n.initJpg(),n.setLoadingProgress(.1),n.lightbox&&n.options.lightboxShowMenu&&n.createMenu(),n.initialized=!0)}this.strings=S.strings,S.pageShininess=S.pageShininess/2,this.s=0,S.googleAnalyticsTrackingCode&&(this.gaCode=S.googleAnalyticsTrackingCode,M.ga||(g=L,f="script",b="ga",(u=M).GoogleAnalyticsObject=b,u.ga=u.ga||function(){(u.ga.q=u.ga.q||[]).push(arguments)},u.ga.l=+new Date,m=g.createElement(f),k=g.getElementsByTagName(f)[0],m.async=1,m.src="https://www.google-analytics.com/analytics.js",k.parentNode.insertBefore(m,k)),ga("create",this.gaCode,"auto")),S.isMobile&&(S.singlePageMode=!!S.singlePageModeIfMobile||S.singlePageMode,S.viewModeMobile&&(S.viewMode=S.viewModeMobile),S.pageTextureSizeMobile&&(S.pageTextureSize=S.pageTextureSizeMobile),S.pageTextureSizeMobileSmall&&(S.pageTextureSizeSmall=S.pageTextureSizeMobileSmall),S.touchSwipeEnabled=!0),"3dSinglePage"==S.viewMode&&(S.singlePageMode=!0),"2dSinglePage"==S.viewMode&&(S.singlePageMode=!0,S.viewMode="2d"),S.singlePageMode&&("2d"!=S.viewMode&&"swipe"!=S.viewMode&&(S.viewMode="3d"),S.rightToLeft&&(S.viewMode="swipe")),S.singlePageMode&&"3d"==S.viewMode&&(S.rightToLeft=!1),"simple"==S.viewMode&&(S.viewMode="3d",S.instantFlip=!0),S.sideMenuPosition=S.rightToLeft?"right":"left","webgl"==S.viewMode&&(!this.hasWebGl||parseFloat(!!(w=(v=(v||navigator.userAgent).toLowerCase()).match(/android\s([0-9\.]*)/))&&w[1])
'):S.lightBox?this.preloader=y(".flipbook-preloader"):this.preloader=y('
'),y(".flipbook-loading-text").text(S.preloaderText),this.setLoadingProgress(0),!S.deeplinkingPrefix&&S.deeplinking&&S.deeplinking.prefix&&(S.deeplinkingPrefix=S.deeplinking.prefix),S.deeplinkingEnabled=S.deeplinkingPrefix||S.deeplinkingEnabled||S.deeplinking&&S.deeplinking.enabled,S.deeplinkingEnabled&&(x(),y(M).bind("hashchange",function(e){x()})),this.dispose=function(){this.disposed=!0},S.main=this,(P={_events:{},on:function(e,t){this._events[e]||(this._events[e]=[]),this._events[e].push(t)},off:function(e,t){var o;!this._events[e]||-1<(o=this._events[e].indexOf(t))&&this._events[e].splice(o,1)},trigger:function(e){if(this._events[e]){var t=0,o=this._events[e].length;if(o)for(;t')),"undefined"==typeof IScroll){if(!FLIPBOOK.scriptsAdded[FLIPBOOK.iscrollSrc])return void n.loadScript(FLIPBOOK.iscrollSrc,n.createBook);if(!FLIPBOOK.scriptsLoaded[FLIPBOOK.iscrollSrc])return void setTimeout(function(){n.createBook()},100)}if(this.options.searchOnStart&&(this.options.btnSearch.enabled=!0),this.options.btnSearch.enabled){if(!FLIPBOOK.scriptsAdded[FLIPBOOK.markSrc])return void n.loadScript(FLIPBOOK.markSrc,n.createBook);if(!FLIPBOOK.scriptsLoaded[FLIPBOOK.markSrc])return void setTimeout(function(){n.createBook()},100)}if(n.setLoadingProgress(.9),"webgl"==n.options.viewMode){if("undefined"==typeof THREE){if(!FLIPBOOK.scriptsAdded[FLIPBOOK.threejsSrc])return void n.loadScript(FLIPBOOK.threejsSrc,n.createBook);if(!FLIPBOOK.scriptsLoaded[FLIPBOOK.threejsSrc])return void setTimeout(function(){n.createBook()},100)}if(void 0===FLIPBOOK.BookWebGL){if(!FLIPBOOK.scriptsAdded[FLIPBOOK.flipbookWebGlSrc])return void n.loadScript(FLIPBOOK.flipbookWebGlSrc,n.createBook);if(!FLIPBOOK.scriptsLoaded[FLIPBOOK.flipbookWebGlSrc])return void setTimeout(function(){n.createBook()},100)}}else if("swipe"==n.options.viewMode){if(void 0===FLIPBOOK.BookSwipe){if(!FLIPBOOK.scriptsAdded[FLIPBOOK.flipBookSwipeSrc])return void n.loadScript(FLIPBOOK.flipBookSwipeSrc,n.createBook);if(!FLIPBOOK.scriptsLoaded[FLIPBOOK.flipBookSwipeSrc])return void setTimeout(function(){n.createBook()},100)}}else if(void 0===FLIPBOOK.Book3){if(!FLIPBOOK.scriptsLoaded[FLIPBOOK.flipbookBook3Src])return void n.loadScript(FLIPBOOK.flipbookBook3Src,n.createBook);if(!FLIPBOOK.scriptsAdded[FLIPBOOK.flipbookBook3Src])return void setTimeout(function(){n.createBook()},100)}if(this.setLoadingProgress(1),this.initEasing(),n.options.doublePage&&2')[0]}"webgl"==n.options.viewMode?((e=n.options).scroll=n.scroll,(e.parent=n).Book=new FLIPBOOK.BookWebGL(n.book[0],t,e),n.webglMode=!0,n.initSwipe(),d()):"swipe"==n.options.viewMode?(n.Book=new FLIPBOOK.BookSwipe(n.book[0],n.bookLayer[0],t,o),n.initSwipe()):("2d"!=n.options.viewMode&&(n.options.viewMode="3d"),n.Book=new FLIPBOOK.Book3(n.book[0],t,o),n.initSwipe(),n.webglMode=!1,d()),this.resize(),n.Book.enable(),n.book.hide().fadeIn("slow"),this.tocCreated=!1,this.createMenu(),this.onZoom(this.options.zoom),1==this.options.pages.length&&(this.rightToLeft=!1),FLIPBOOK.books=FLIPBOOK.books||{},FLIPBOOK.books[n.id]=n.Book;var h=y(n.Book);h.bind("loadPagesFromPdf",function(e,t,o,i){n.loadPagesFromPdf(t,o,i)}),h.bind("turnPageComplete",function(e){n.turnPageComplete()}),h.bind("initEasing",function(e){n.initEasing()}),h.bind("playFlipSound",function(e){n.playFlipSound()}),h.bind("closeLightbox",function(e){n.closeLightbox()}),h.bind("updateCurrentPage",function(e){n.updateCurrentPage()}),this.createLogo(),this.onBookCreated()},addPageItems:function(){var e=this.options.pages;this.id;for(var t in e){var o=e[t];if(o.htmlContent=o.htmlContent||"",o.items)for(var i in o.items){var n,s=o.items[i];switch(s.type){case"iframe":a='',o.htmlContent+=a;break;case"image":a='',o.htmlContent+=a;break;case"link":a=y("").addClass("flipbook-page-item").width(s.width).height(s.height).css({top:s.y+"px",left:s.x+"px",background:this.options.linkColor}).attr("onmouseover",'this.style.background="'+this.options.linkColorHover+'"').attr("onmouseout",'this.style.background="'+this.options.linkColor+'"'),s.url?a.attr("href",s.url).attr("target","_blank"):s.page&&(n="#"+this.options.deeplinkingPrefix+s.page,s.flip&&(n+="flip"),a.attr("href",n)),o.htmlContent+=a[0].outerHTML;break;case"video":var a=y("
").appendTo(this.bookLayer).css("position","absolute").css("width","200px").css("height","200px").css("margin-top","-100px").css("background","#f00").css("right","0").css("top","200px").bind("touchend click",function(e){e.stopPropagation(),e.preventDefault(),t.nextPage()})},playFlipSound:function(){var e=this;this.options.sound&&this.Book.enabled&&void 0!==this.flipsound.play&&(this.flipsound.currentTime=0,setTimeout(function(){try{e.flipsound.play()}catch(e){}},100))},onMouseWheel:function(e){if("wheelDeltaX"in e)wheelDeltaX=e.wheelDeltaX/12,wheelDeltaY=e.wheelDeltaY/12;else if("wheelDelta"in e)wheelDeltaX=wheelDeltaY=e.wheelDelta/12;else{if(!("detail"in e))return;wheelDeltaX=wheelDeltaY=3*-e.detail}0this.options.zoomMax&&(this.zoom=this.options.zoomMax),this.options.zoomMax2&&this.zoom>this.options.zoomMax2&&(this.zoom=this.options.zoomMax2),this.model.zoom=this.zoom,this.Book.zoomTo(this.zoom,t,i,n),this.onZoom(this.zoom)},zoomOut:function(e){var t,o=this.zoom/this.options.zoomStep;o<1&&1this.options.zoomSize&&(o=this.options.zoomSize/this.bookLayer.height()),this.zoom!=o&&(this.zoom=o,t=this.options.zoomTime,this.zoomTo(this.zoom,t,e))},nextPage:function(){this.Book&&this.Book.nextPage()},prevPage:function(){this.Book&&this.Book.prevPage()},firstPage:function(){this.goToPage(1)},lastPage:function(){this.goToPage(this.options.pages.length)},goToPage:function(e,t){e<1?e=1:e>this.options.numPages&&!this.options.rightToLeft&&(e=this.options.numPages),this.Book&&this.Book.goToPage(e,t)},moveBook:function(e){this.Book&&this.Book.move&&this.Book.move(e)},onZoom:function(e){this.zoom=e,this.enableButton(this.btnZoomIn,ethis.options.zoomMin),this.enableSwipe(e<=1),this.model.zoom=e},enableSwipe:function(e){this.swipeEnabled=e},createCurrentPage:function(){var o=this,i=this.options,e="flipbook-currentPageHolder ",t="top"==i.currentPage.vAlign?"left"==i.currentPage.hAlign?this.menuTL:"right"==i.currentPage.hAlign?this.menuTR:this.menuTC:"left"==i.currentPage.hAlign?this.menuBL:"right"==i.currentPage.hAlign?this.menuBR:this.menuBC,n="top"==i.currentPage.vAlign&&i.menu2Transparent||"top"!=i.currentPage.vAlign&&i.menuTransparent,s=n?i.floatingBtnBackground:"",a=n?i.floatingBtnColor:i.btnColor,r=n?i.floatingBtnTextShadow:"",l=n?i.floatingBtnRadius:i.btnRadius,d=(n?i.floatingBtnMargin:i.btnMargin,y("
").appendTo(t));d.css("margin",i.currentPage.marginV+"px "+i.currentPage.marginH+"px"),n||(e+="skin-color "),d.addClass(e).css({color:a,background:s,"text-shadow":r,"border-radius":l+"px"}),i.currentPage.order&&d.css("order",i.currentPage.order),this.currentPageHolder=d,this.currentPage=y(L.createElement("div")).addClass("flipbook-currentPageNumber").appendTo(d);var h=y("
").appendTo(d).submit(function(e){var t=(t=parseInt(o.currentPageInput.val()))>i.pages.length?i.pages.length:t;return o.options.rightToLeft&&(t=i.pages.length-t+1),o.goToPage(t),o.currentPageInput.trigger("blur"),!1});this.currentPageInput=y('').addClass("flipbook-currentPageInput").css({margin:i.currentPage.marginV+"px "+i.currentPage.marginH+"px",color:a}).appendTo(h).val("").focus(function(){o.currentPageInput.val(""),o.currentPage.addClass("flipbook-color-transparent")}).blur(function(){o.currentPageInput.val(""),o.currentPage.removeClass("flipbook-color-transparent")}),n||this.currentPageInput.addClass("skin-color")},createMenuHeader:function(e,t,o){var i=this,n=y("
").addClass("flipbook-menu-header skin-clor flipbook-font").appendTo(e),t=y("").text(t).addClass("flipbook-menu-title skin-color").appendTo(n),s=y("").appendTo(n).addClass("flipbook-btn-close").bind("touchend click",function(e){e.stopPropagation(),e.preventDefault(),i.closeMenus()});this.createIcon(this.options.btnClose,null,!0).appendTo(s)},createToc:function(){var i=this,e=this.options.tableOfContent;if(e&&e.length||!this.pdfService||this.pdfService.outlineLoaded){if(this.tocHolder=y("
").addClass("flipbook-tocHolder flipbook-side-menu skin-color-bg").appendTo(this.wrapper).css(this.options.sideMenuPosition,"0").hide(),this.createMenuHeader(this.tocHolder,this.strings.tableOfContent,this.toggleToc),this.toc=y("
").addClass("flipbook-toc").appendTo(this.tocHolder),this.tocScroller=y("
").addClass("flipbook-toc-scroller").appendTo(this.toc),this.tocScroll=new FLIPBOOK.IScroll(i.toc[0],{bounce:!1,mouseWheel:!0,scrollbars:!0,interactiveScrollbars:!0}),e&&0").attr("aria-hidden","true").appendTo(a).addClass("fa fa-chevron-"+(o?"left":"right")+" skin-color").hide(),l=y("").attr("aria-hidden","true").appendTo(a).addClass("fa fa-chevron-down skin-color").hide();if(y(L.createElement("span")).appendTo(s).addClass("title").text(i.title).css("width",String(170-10*s.level)+"px"),y(L.createElement("span")).appendTo(s).width("25px").css("display","inline-block").css("text-align","right").text(i.page),i.items&&i.items.length){s.items=[];for(var d=0;d').appendTo(this.wrapper),e=y('').appendTo(this.printMenu),t=y('').appendTo(e),this.createMenuHeader(t,this.strings.print,this.togglePrintMenu),y('
'+this.strings.printCurrentPage+"
").appendTo(t).bind("touchend click",function(e){o.printPage(o.cPage[0],this)}),y('
'+this.strings.printLeftPage+"
").appendTo(this.printMenu).appendTo(t).bind("touchend click",function(e){o.printPage(o.cPage[0],this)}),y('
'+this.strings.printRightPage+"
").appendTo(this.printMenu).appendTo(t).bind("touchend click",function(e){o.printPage(o.cPage[1],this)}),y('
'+this.strings.printAllPages+"
").appendTo(t).bind("touchend click",function(e){o.togglePrintWindow()}),this.closeMenus(),this.printMenuShowing=!0,this.initColors(),this.updateCurrentPage())},toggleDownloadMenu:function(){var e,t,i=this;this.dlMenu?this.dlMenuShowing?(this.dlMenu.hide(),this.dlMenuShowing=!1):(this.dlMenu.show(),this.closeMenus(),this.dlMenuShowing=!0,this.updateCurrentPage()):(this.dlMenu=y('
').appendTo(this.wrapper),e=y('').appendTo(this.dlMenu),t=y('').appendTo(e),this.createMenuHeader(t,this.strings.download,this.toggleDownloadMenu),y('
'+this.strings.downloadCurrentPage+"
").appendTo(t).bind("touchend click",function(e){i.downloadPage(i.cPage[0],this)}),y('
'+this.strings.downloadLeftPage+"
").appendTo(t).bind("touchend click",function(e){i.downloadPage(i.cPage[0],this)}),y('
'+this.strings.downloadRightPage+"
").appendTo(t).bind("touchend click",function(e){i.downloadPage(i.cPage[1],this)}),y('
'+this.strings.downloadAllPages+"
").appendTo(t).bind("touchend click",function(e){var t=L.createElement("a");t.href=i.options.btnDownloadPages.url;var o=t.href.split("/").pop().split("#")[0].split("?")[0];t.download=o,t.dispatchEvent(new MouseEvent("click"))}),this.closeMenus(),this.dlMenuShowing=!0,this.initColors(),this.updateCurrentPage())},toggleShareMenu:function(){var e,t,o,i;this.shareMenu?this.shareMenuShowing?(this.shareMenu.hide(),this.shareMenuShowing=!1):(this.shareMenu.show(),this.closeMenus(),this.shareMenuShowing=!0):(this.shareMenu=y('
').appendTo(this.wrapper),e=y('').appendTo(this.shareMenu),t=y('').appendTo(e),this.createMenuHeader(t,this.options.strings.share,this.toggleShareMenu),o=y('').appendTo(t),i=this.options,this.share=new Share(o[0],{networks:{twitter:i.twitter,facebook:i.facebook,pinterest:i.pinterest,email:i.email}}),this.closeMenus(),this.shareMenuShowing=!0,this.initColors())},bookmarkPage:function(e){var t=this.getBookmarkedPages();t.indexOf(String(e))<0&&t.push(e),this.setBookmarkedPages(t),this.thumbs.showBookmarkedThumbs(),this.bookmarkShowing||this.toggleBookmark()},removeBookmark:function(e){var t=this.getBookmarkedPages();-1",i+="",i+="Print canvas",i+="",i+='',i+="",i+="",(n=M.open("","Print","height=1600,width=800")).document.open(),n.document.write(i),n.document.close(),n.document.addEventListener("load",function(){n.focus(),n.print(),n.document.close(),n.close()},!0)):(s=this).loadPage(e,this.options.pageTextureSize,function(){s.printPage(e)})},downloadPage:function(e){var t,o,i,n,s;this.options.pages[e]&&this.options.pages[e].download?t=this.options.pages[e].download:this.options.pages[e]&&this.options.pages[e].src?t=this.options.pages[e].src:this.options.pages[e]&&this.options.pages[e].canvas&&this.options.pages[e].canvas[this.options.pageTextureSize]&&(o=L.createElement("canvas"),i=this.options.pageWidth/this.options.pageHeight,o.width=this.options.pageTextureSize*i,o.height=this.options.pageTextureSize,o.getContext("2d").drawImage(this.options.pages[e].canvas[this.options.pageTextureSize],0,0),t=o.toDataURL("image/jpeg",.5)),t?((n=L.createElement("a")).href=t,n.download="page"+String(e+1),L.body.appendChild(n),n.click(),L.body.removeChild(n)):(s=this).loadPage(e,this.options.pageTextureSize,function(){s.downloadPage(e)})},printPdf:function(e){var t;this.options.isMobile?M.open(e,"_blank","directories=0,titlebar=0,toolbar=0,location=0,status=0,menubar=0").onload=function(){this.document.body.children[0].style.display="none",this.print()}:(t=this._printIframe,this._printIframe||(t=this._printIframe=L.createElement("iframe"),L.body.appendChild(t),t.style.display="none",t.onload=function(){setTimeout(function(){t.focus(),t.contentWindow.print()},1)}),t.src=e)},togglePrintWindow:function(e){var n=this;function t(){link="about:blank";var e=M.open(link,"_new");e.document.open();for(var t="",o=0;o\n');var i="\n\nTemporary Printing Window\n