[
  {
    "path": ".browserslistrc",
    "content": "defaults\n"
  },
  {
    "path": ".gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files for more about ignoring files.\n#\n# If you find yourself ignoring temporary files generated by your text editor\n# or operating system, you probably want to add a global ignore instead:\n#   git config --global core.excludesfile '~/.gitignore_global'\n\n# Ignore bundler config.\n/.bundle\n\n# Ignore the default SQLite database.\n/db/*.sqlite3\n/db/*.sqlite3-journal\n/db/*.sqlite3-*\n\n# Ignore all logfiles and tempfiles.\n/log/*\n/tmp/*\n!/log/.keep\n!/tmp/.keep\n\n# Ignore uploaded files in development.\n/storage/*\n!/storage/.keep\n\n/public/assets\n.byebug_history\n\n# Ignore master key for decrypting credentials and more.\n/config/master.key\n\n# Ignore Redis dump\n/dump.rdb\n\n/public/packs\n/public/packs-test\n/node_modules\n/yarn-error.log\nyarn-debug.log*\n.yarn-integrity\n"
  },
  {
    "path": ".tool-versions",
    "content": "ruby 3.2.2\nnodejs 20.2.0\n"
  },
  {
    "path": "Gemfile",
    "content": "source \"https://rubygems.org\"\ngit_source(:github) { |repo| \"https://github.com/#{repo}.git\" }\n\n# Bundle edge Rails instead: gem \"rails\", github: \"rails/rails\", branch: \"main\"\ngem \"rails\", \"~> 7.1.2\"\n\ngem 'sprockets-rails'\ngem 'sqlite3'\ngem 'puma'\ngem 'jbuilder'\ngem 'redis'\ngem 'bootsnap', require: false\ngem 'vite_rails'\ngem 'foreman'\ngem 'route_translator'\ngem 'kaminari'\ngem 'ransack'\ngem 'devise'\ngem 'cypress-rails'\n\n# Windows does not include zoneinfo files, so bundle the tzinfo-data gem\ngem \"tzinfo-data\", platforms: %i[ mingw mswin x64_mingw jruby ]\n\ngroup :development, :test do\n  # See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem\n  gem \"debug\", platforms: %i[ mri mingw x64_mingw ]\nend\n\ngroup :development do\n  # Use console on exceptions pages [https://github.com/rails/web-console]\n  gem \"web-console\"\nend\n\ngroup :test do\n  gem 'capybara'\n  gem 'minitest'\n  gem 'minitest-rails'\n  gem 'minitest-spec-rails'\n  gem 'minitest-focus'\n  gem 'capybara-email'\n  gem 'json-schema'\n  gem 'warden'\n  gem 'selenium-webdriver'\n  gem 'webdrivers'\nend\n"
  },
  {
    "path": "Procfile",
    "content": "vite: bin/vite dev\nweb: bin/rails s --port 3000 -b 0.0.0.0\n"
  },
  {
    "path": "README.md",
    "content": "# Rails + Vite + Vue + Pina Demo App\n\n### This repo is no longer maintained \nFeel free to grab some ideas, but I will no longer update this codebase. \n\n## Description\n\nDemo Single Page Application based on Ruby on Rails 7.0.2, using Vue 3 + Pina, compiled with Vite.\nAll the basic features you need to build a real world app with:\n\n- **Front / Admin namespaces**\n- **I18n** (server side + client side)\n- **Forms** (with progress and error handling)\n- **Authentication** (Devise)\n- **Pagination** (Kaminari)\n- **Dynamic search filters** (Ransack)\n- **Websockets** (ActionCable)\n- **Bootstrap like grid** (using CSS Grid layout)\n\nAll of this is designed with maintainability and readability in mind, slightly inspired by the Rails conventions.\n\nThis is the follow up of the previous Rails + Vue + Vuex app from 2017 which is still\navailable on the Rails6 branch.  \n\nA lot of things has been updated/rewrote for this version, notably:\n\n- Webpacker is now replaced by Vite\n- Vue app in using Composition API \n- Vuex is now replaced by Pinia to handle state management\n- No longer depends on JQuery for API calls (replaced by Axios)\n\nNonetheless, a lot of opinions and conventions from the previous version remain valid, you may have a look at the original blog post for details (https://guillaume.barillot.me/2017/12/02/how-to-organize-your-vue-files-in-a-rails-5-1-project-using-webpack/). \n\nBoostrapping the plumbing for basic stuff can take some time, but once you get the basic it's\npretty easy to extend and to get really efficient with Vue + Rails. With this example you have \nall you need to build up your new project in minutes.\n\n## Installation\n\n```\ngit clone git@github.com:gbarillot/rails-vue-demo-app.git\ncd rails-vue-demo-app\nbundle install\nyarn install\nbundle exec rails db:migrate\nbundle exec rails db:seed\n```\n\n## Booting the app\n\n```\nforeman start\n```\n\nHot Module Reloading (HMR) is enabled by default. If you prefer to turn it off, set \"hmr\" to false \nin /vite.config.ts.\n## Running tests\n\n### Rails side\n\n```\nrails test\n```\n\n### JS side\n\n```\nyarn test\n```\n\n## A note on CSS\nCSS is done right in the public/css/development directory.\n\nPros:\n- No compile time, greatly speed up page load time in dev\n- Allows CSS editing + saving directly from Chrome Devtools\n- Easier / more fexible to manage imports\n\nCons:\n- You should disable cache in DevTools in Dev\n- As of today, not suitable for production!\n\nThe purpose of this repo is Vue + Vite + Rails, not CSS, so feel free to use whatever method \nyou'd prefer to handle CSS. Sprocket is left as is and still works.\n\n## Contributions\n\nPR and feedbacks welcome!\n\n## Licence\n\nMIT\n"
  },
  {
    "path": "Rakefile",
    "content": "# Add your own tasks in files placed in lib/tasks ending in .rake,\n# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.\n\nrequire_relative \"config/application\"\n\nRails.application.load_tasks\n"
  },
  {
    "path": "app/assets/config/manifest.js",
    "content": "//= link_tree ../images\n//= link_directory ../stylesheets .css\n//= link_tree ../../javascript .js\n//= link_tree ../../../vendor/javascript .js\n"
  },
  {
    "path": "app/assets/images/.keep",
    "content": ""
  },
  {
    "path": "app/assets/stylesheets/application.css",
    "content": "/*\n * This is a manifest file that'll be compiled into application.css, which will include all the files\n * listed below.\n *\n * Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's\n * vendor/assets/stylesheets directory can be referenced here using a relative path.\n *\n * You're free to add application-wide styles to this file and they'll appear at the bottom of the\n * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS\n * files in this directory. Styles in this file should be added after the last require_* statement.\n * It is generally better to create a new file per style scope.\n *\n *= require_self\n */\n"
  },
  {
    "path": "app/channels/application_cable/channel.rb",
    "content": "module ApplicationCable\n  class Channel < ActionCable::Channel::Base\n  end\nend\n"
  },
  {
    "path": "app/channels/application_cable/connection.rb",
    "content": "module ApplicationCable\n  class Connection < ActionCable::Connection::Base\n  end\nend\n"
  },
  {
    "path": "app/channels/chat_channel.rb",
    "content": "class ChatChannel < ApplicationCable::Channel\n\n  def subscribed\n    stream_from \"ChatChannel\"\n  end\n\n  def receive(data)\n    ActionCable.server.broadcast(\"ChatChannel\", {\n      message: data['message'].upcase\n    })\n  end\nend"
  },
  {
    "path": "app/controllers/admin_controller.rb",
    "content": "class AdminController < ApplicationController\n  before_action :auth_user! \n\n  def index\n    render template: 'admin'\n  end\n\n  private \n\n  # Proper redirect using I18n.locale\n  # Devise's authenticate_user! doesn't handle I18n properly here\n  def auth_user!\n    redirect_to new_user_session_path unless current_user \n  end\nend\n"
  },
  {
    "path": "app/controllers/api/admin/admin_controller.rb",
    "content": "class Api::Admin::AdminController < Api::ApiController\n  before_action :authenticate_user!\n\n  def search_params\n    params[:q] ||= {} if params[:q] != ''\n  end\nend\n"
  },
  {
    "path": "app/controllers/api/admin/dashboard_controller.rb",
    "content": "class Api::Admin::DashboardController < Api::Admin::AdminController\n  def index\n    render json: {metrics: {musicians: Musician.count}}\n  end\nend\n"
  },
  {
    "path": "app/controllers/api/admin/musicians_controller.rb",
    "content": "class Api::Admin::MusiciansController < Api::Admin::AdminController\n  # DELETE ME: Dummy emulation of a slow network so you can see the UI animation in dev. mode\n  before_action :slow, only: [:create, :update] \n  before_action :load_musician, except: [:index, :new, :create]  \n\n  def index\n    @musicians = Musician.ransack(search_params)\n                         .result\n                         .page(params[:page])\n                         .per(params[:per_page])\n  end\n\n  def new\n    @musician = Musician.new\n  end\n\n  def create\n    @musician = Musician.create(musician_params)\n\n    if @musician.errors.empty?\n      render template: '/api/admin/musicians/edit'\n    else\n      render json: {errors: @musician.errors.messages}.to_json, status: 422      \n    end\n  end\n\n  def edit\n  end\n\n  def update\n    if @musician.update(musician_params)\n      head :ok\n    else\n      render json: {errors: @musician.errors.messages}.to_json, status: 422\n    end\n  end\n\n  def destroy\n    if @musician.destroy    \n      head :ok\n    else\n      render json: {errors: @musician.errors.messages}.to_json, status: 422\n    end\n  end\n\n  private\n\n  def musician_params\n    params.require(:musician).permit(\n      :name,\n      :band\n    )\n  end\n\n  def load_musician\n    @musician = Musician.find(params[:id])\n  end\n\n  def slow\n    sleep 1\n  end\nend\n"
  },
  {
    "path": "app/controllers/api/api_controller.rb",
    "content": "class Api::ApiController < ApplicationController\n\nend\n"
  },
  {
    "path": "app/controllers/api/musicians_controller.rb",
    "content": "class Api::MusiciansController < Api::ApiController\n\n  def index\n    @musicians = Musician.all\n  end\n\n  def show    \n    if params[:id] == \"this-will-trigger-a-500\"\n      # Render a 500 to demonstrate how the front-end handles server side errors\n      render json: {error: \"Internal server error\"}, status: 500\n    elsif params[:id] == \"this-will-trigger-a-401\"\n      # Render a 401 to demonstrate how the front-end handles server side errors\n      render json: {error: \"Not authenticated\"}, status: 401\n    else\n      @musician = Musician.find(params[:id])\n    end\n  end\n\nend\n"
  },
  {
    "path": "app/controllers/application_controller.rb",
    "content": "class ApplicationController < ActionController::Base\n  protect_from_forgery with: :exception\n  around_action :set_locale_from_url\n  #rescue_from Exception, with: :render_error\n\n  def index\n    render template: 'application'\n  end\n\n  def set_locale\n    I18n.locale = params[:locale] || session[:locale] || I18n.default_locale\n    session[:locale] = I18n.locale\n  end\n\n  def self.default_url_options\n    { locale: I18n.locale }\n  end\n\n  def after_sign_in_path_for(resource) \n    admin_root_path\n  end\n\n  private\n  def render_error(e)\n    if e.class.name == \"ActiveRecord::RecordNotFound\"\n      render json: {error: \"Not found\"}.to_json, status: 404\n    else\n      render json: {error: \"Internal server error\"}.to_json, status: 500\n    end\n  end\nend\n"
  },
  {
    "path": "app/controllers/concerns/.keep",
    "content": ""
  },
  {
    "path": "app/helpers/application_helper.rb",
    "content": "module ApplicationHelper\n\n  def ui_translations(section)\n    translations = {current: I18n.t('.')[:vue][section]}\n    translations.to_json.html_safe\n  end\n\n  def paginate(scope, default_per_page = scope.default_per_page)\n    collection = scope.page(params[:page]).per((params[:per_page] || default_per_page).to_i)\n    current, total, per_page = collection.current_page, collection.total_pages, collection.limit_value\n\n    {\n      current:  current,\n      previous: (current > 1 ? (current - 1) : nil),\n      next:     (current == total ? nil : (current + 1)),\n      per_page: per_page,\n      pages:    total,\n      count:    collection.total_count\n    }\n  end\nend\n"
  },
  {
    "path": "app/javascript/admin/routes.js",
    "content": "import { createWebHistory, createRouter } from 'vue-router'\n\nimport DashboardIndex from '@/admin/views/dashboard/index.vue';\nimport MusicianIndex from '@/admin/views/musicians/index.vue';\nimport MusicianNew from '@/admin/views/musicians/new.vue';\nimport MusicianEdit from '@/admin/views/musicians/edit.vue';\nimport WebsocketIndex from '@/admin/views/websockets/index.vue';\n\nconst router = createRouter({\n  history: createWebHistory(`/${I18n.prefix}admin`),\n  routes: [\n    { path: '/', component: DashboardIndex, name: 'root_path' },\n    { path: '/musicians', component: MusicianIndex, name: 'musicians_path' },\n    { path: '/musicians/new', component: MusicianNew, name: 'new_musician_path' },\n    { path: '/musicians/:id/edit', component: MusicianEdit, name: 'edit_musician_path' },\n    { path: '/websockets', component: WebsocketIndex, name: 'websockets_path' }\n  ]\n});\n\n// Handles 404 Not found\nrouter.beforeEach((to, from, next) => {\n  if (!to.matched.length) {\n    window.location.href = '/404'\n  } else {\n    next();\n  }\n});\n\nexport default router;"
  },
  {
    "path": "app/javascript/admin/stores/dashboard_store.js",
    "content": "import { defineStore } from 'pinia'\n\nexport const DashboardStore = defineStore('dashboard', {\n  state: () => {\n    return {\n      metrics: {}\n    }\n  },\n\n  actions: {\n    async index() {\n      return this.Api.get('/dashboard').then(response => {    \n        this.metrics = response.data.metrics;        \n      })  \n    }\n  }\n})"
  },
  {
    "path": "app/javascript/admin/stores/musician_store.js",
    "content": "import { defineStore } from 'pinia'\n\nexport const MusicianStore = defineStore('musicians', {\n  state: () => {\n    return {\n      progress: '',\n      errors: {},\n      bands: [],\n      musician: {},\n      musicians: [],\n      pagination: {}\n    }\n  },\n\n  actions: {\n    async index(path) {\n      return this.Api.get(path).then(response => {  \n        this.pagination = response.data.pagination;\n        this.bands = response.data.bands;    \n        this.musicians = response.data.musicians;        \n      })  \n    },\n    async new() {\n      this.errors = {}; \n      this.musician = {};\n      return this.Api.get(`/musicians/new`).then(response => {             \n        this.musician = response.data.musician;\n      })  \n    },\n    async create() {\n      this.errors = {};\n      this.progress = 'loading';\n      return this.Api.post(`/musicians`, this.musician).then(response => {        \n        this.musician = response.data.musician;\n        return true;\n      }).catch(error => {\n        this.errors = error.response.data.errors;\n        return false;\n      }).finally(() => {\n        this.progress = '';\n      })\n    },\n    async edit(id) {\n      this.errors = {};\n      this.musician = {};\n      return this.Api.get(`/musicians/${id}/edit`).then(response => {             \n        this.musician = response.data.musician;\n      })  \n    },\n    async update(id) {\n      this.errors = {};\n      this.progress = 'loading';\n      return this.Api.put(`/musicians/${id}`, this.musician).then(response => {        \n        this.errors = {};\n      }).catch(error => {\n        this.errors = error.response.data.errors;\n      }).finally(() => {\n        this.progress = '';\n      })\n    },\n    async destroy(id) {      \n      return this.Api.destroy(`/musicians/${id}`).then(response => {  \n        this.errors = {};      \n      }).catch(error => {\n        this.errors = error.response.data.errors;\n      }) \n    }\n  }\n})"
  },
  {
    "path": "app/javascript/admin/views/dashboard/index.vue",
    "content": "<template>\n  <section class=\"container\">\n    <div class=\"row\">\n      <div class=\"col-xs-12 col-md-3 card\">\n        <h3>Rails 7</h3>\n        <p><a href=\"https://edgeguides.rubyonrails.org/\" target=\"_blank\">An awesome server side Framework</a></p>\n      </div>\n      <div class=\"col-xs-12 col-md-3 card\">\n        <h3>Vue 3</h3>\n        <p><a href=\"https://vuejs.org/guide/\" target=\"_blank\">SPA without the pain</a></p>\n      </div>\n      <div class=\"col-xs-12 col-md-3 card\">\n        <h3>Pinia</h3>\n        <p><a href=\"https://pinia.vuejs.org/\" target=\"_blank\">State manager</a></p>\n      </div>\n      <div class=\"col-xs-12 col-md-3 card\">\n        <h3>Vue Router</h3>\n        <p><a href=\"https://router.vuejs.org/\" target=\"_blank\">Flexible</a></p>\n      </div>\n      <div class=\"col-xs-12 col-md-3 card\">\n        <h3>Axios</h3>\n        <p><a href=\"https://axios-http.com/docs/intro\" target=\"_blank\">Handles AJAX requests, no JQuery</a></p>\n      </div>\n      <div class=\"col-xs-12 col-md-3 card\">\n        <h3>Vite</h3>\n        <p><a href=\"https://vitejs.dev/\" target=\"_blank\">Next generation Frontend tooling</a></p>\n      </div>\n      <div class=\"col-xs-12 col-md-3 card\">\n        <h3>Devise</h3>\n        <p><a href=\"https://github.com/heartcombo/devise\" target=\"_blank\">Simple authentication using regular cookies that just works</a></p>\n      </div>\n      <div class=\"col-xs-12 col-md-3 card\">\n        <h3>I18n</h3>\n        <p><a href=\"https://kazupon.github.io/vue-i18n/\" target=\"_blank\">\n          {{ $t('dashboard.musicians', 0) }}, \n          {{ $t('dashboard.musicians', 1) }}, \n          {{ store.metrics.musicians + ' ' + $t('dashboard.musicians', store.metrics.musicians) }}</a>\n        </p> \n      </div>\n      <div class=\"col-xs-12 col-md-3 card\">\n        <h3>ActionCable</h3>\n        <p><a href=\"https://guides.rubyonrails.org/action_cable_overview.html\" target=\"_blank\">Websockets with 2 way bindings</a></p>\n      </div>\n      <div class=\"col-xs-12 col-md-3 card\">\n        <h3>Kaminari</h3>\n        <p><a href=\"https://github.com/kaminari/kaminari\" target=\"_blank\">Efficient Pagination</a></p>\n      </div>\n      <div class=\"col-xs-12 col-md-3 card\">\n        <h3>Ransack</h3>\n        <p><a href=\"https://github.com/activerecord-hackery/ransack\" target=\"_blank\">ActiveRecord wizardry for dynamic search filters</a></p>\n      </div>\n      <div class=\"col-xs-12 col-md-3 card\">\n        <h3>Bootstrap grid</h3>\n        <p><a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout\" target=\"_blank\">... but using native CSS Grid layout</a></p>\n      </div>\n    </div>\n  </section>\n</template>\n\n<script setup>\nimport { DashboardStore } from \"@/admin/stores/dashboard_store.js\";\nconst store = DashboardStore();\n\nonMounted(() => {\n  store.index();    \n})\n</script>\n"
  },
  {
    "path": "app/javascript/admin/views/musicians/_filters.vue",
    "content": "<template>  \n  <section class=\"filters\">\n    <a href=\"#\" @click.prevent=\"toggleForm\" class=\"openable\">{{ $t('filter') }}</a>\n\n    <form @submit.prevent=\"search\" ref=\"filters\" accept-charset=\"UTF-8\" class=\"card hidden\">  \n      <div class=\"row\">      \n        <div class=\"col-xs-12 col-md-6 col-xl-5\"> \n          <label>{{ $t('musicians.form.name') }}</label>    \n          <input type=\"text\" v-model=\"form.name_cont\" placeholder=\"name\">\n        </div>  \n        <div class=\"col-xs-12 col-md-6 col-xl-4\">     \n          <label>{{ $t('musicians.form.band') }}</label>\n          <select v-model=\"form.band_eq\">\n            <option :value=\"null\">{{ $t('any') }}</option>\n            <option v-for=\"band in bands\" :key=\"band.key\" :value=\"band.key\">{{ band.name }}</option>\n          </select>\n        </div> \n        \n        <div class=\"col-xs-12 col-md-2 col-xl-3\">\n          <label class=\"hidden-sm hidden-md hidden-lg\">&nbsp;</label>\n          <input type=\"submit\" role=\"button\" class=\"button button-primary\" :value=\"$t('filter')\">\n        </div>\n        <div class=\"col-xs-12 col-md-5\">\n          <a @click=\"reset\" href=\"#\" class=\"secondary outline fill\">{{ $t('reset_filters') }}</a>\n        </div>  \n      </div>      \n    </form>\n\n  </section>\n</template>\n\n<script setup>\nconst location = useRoute();\nconst router = useRouter();\nconst props = defineProps(['bands']);\nconst filters = ref(null);\n\nconst form = () => {\n  return {\n    name_cont: '',\n    band_eq: null\n  } \n}\n\nconst toggleForm = (e) => {\n  e.target.classList.toggle('open');\n  filters.value.classList.toggle('hidden');  \n}\n\nconst search = () => {\n  const query = Object.fromEntries(\n    Object.entries(form).map(entry => [`q[${entry[0]}]`, entry[1]])\n  );\n  router.push({path: location.path, query: query});\n}\n\nconst reset = () => {\n  form.name_cont = '';\n  form.band_eq = null;\n  router.push({path: location.path, query: ''})\n}\n</script>\n"
  },
  {
    "path": "app/javascript/admin/views/musicians/_form.vue",
    "content": "<template>  \n  <fieldset>\n    <label>{{ $t('musicians.form.name') }}</label>\n    <errors attr=\"name\" :messages=\"data.errors\" />\n    <input type=\"text\" v-model=\"data.musician.name\" :aria-invalid=\"data.errors.name ? true : ''\">\n  </fieldset>\n\n  <fieldset>\n    <label>{{ $t('musicians.form.band') }}</label>\n    <errors attr=\"band\" :messages=\"data.errors\" />\n    <select v-model=\"data.musician.band\" :aria-invalid=\"data.errors.band ? true : ''\">\n      <option v-for=\"band in data.musician.bands\" :key=\"band.key\" :value=\"band.key\">{{ band.name }}</option>\n    </select>\n  </fieldset>     \n</template>\n\n<script setup>\nimport errors from \"../shared/_errors.vue\";\ndefineProps(['data'])\n</script>\n"
  },
  {
    "path": "app/javascript/admin/views/musicians/edit.vue",
    "content": "<template>  \n  <section class=\"container\">\n    <ul class=\"breadcrumb\">\n      <li><router-link :to=\"{ name: 'root_path' }\">{{ $t('title') }}</router-link></li>\n      <li><router-link :to=\"{ name: 'musicians_path' }\">{{ $t('nav.musicians') }}</router-link></li>\n      <li>{{ store.musician.name }}</li>\n    </ul>\n\n    <form @submit.prevent=\"update\" class=\"card\" :class=\"store.progress\">\n      <MusicianForm :data=\"store\" /> \n\n      <div class=\"row\">\n        <div class=\"col-xs-12 col-sm-8 col-md-9 col-lg-10 hidden-xs\">\n          <a @click=\"destroy\" href=\"#\" role=\"button\" class=\"secondary outline\">{{ $t('delete') }}</a> \n        </div>\n        <div class=\"col-xs-12 col-sm-4 col-md-3 col-lg-2 ta-right\">\n          <input type=\"submit\" :value=\"$t('save')\" />      \n        </div>\n        <a @click=\"destroy\" href=\"#\" class=\"visible-xs\">{{ $t('delete') }}</a>\n      </div>\n    </form>\n \n    <div class=\"row\">\n      <div class=\"col-xs-12\">\n        <p>{{ $t('musicians.comment') }}</p>\n      </div>\n    </div>\n  </section>\n</template>\n\n<script setup>\nimport MusicianForm from \"./_form.vue\";\nimport { MusicianStore } from \"@/admin/stores/musician_store.js\";\n\nconst store = MusicianStore();\nconst router = useRouter();\nconst location = useRoute();\n\nconst update = (event => {\n  store.update(location.params.id);\n});\n\nconst destroy = (event => {\n  if(confirm(t('confirm'))) {\n    store.destroy(location.params.id).then(response => {\n      router.push({name: 'musicians_path'});\n    })\n  }  \n});\n\nonMounted(() => {\n  store.edit(location.params.id)\n});\n</script>\n"
  },
  {
    "path": "app/javascript/admin/views/musicians/index.vue",
    "content": "<template>\n  <section class=\"container\">\n    <div class=\"row\">\n      <div class=\"col-xs-12 col-lg-8 col-xl-9\">      \n        <ul class=\"breadcrumb\">\n          <li><router-link :to=\"{name: 'root_path'}\">{{ $t('title') }}</router-link></li>\n          <li>{{ $t('nav.musicians') }}</li>\n        </ul>\n      </div>\n      <div class=\"col-xs-12 col-lg-4 col-xl-3 ta-right\">\n        <router-link :to=\"{name: 'new_musician_path'}\" role=\"button\" class=\"outline\" style=\"width: 100%\">{{ $t('musicians.create') }}</router-link> \n      </div>\n    </div>\n\n    <filters :bands=\"store.bands\" />\n \n    <div ref=\"listing\" >\n      <table v-if=\"store.musicians && store.musicians.length > 0\">\n        <thead>\n          <tr>\n            <th>{{ $t('musicians.form.id') }}</th>\n            <th>{{ $t('musicians.form.name') }}</th>\n            <th>{{ $t('musicians.form.band') }}</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr v-for=\"musician in store.musicians\" :key=\"musician.id\">\n            <td><router-link :to=\"{ name: 'edit_musician_path', params: {id: musician.id}}\">{{ musician.id }}</router-link></td>\n            <td><router-link :to=\"{ name: 'edit_musician_path', params: {id: musician.id}}\">{{ musician.name }}</router-link></td>\n            <td><router-link :to=\"{ name: 'edit_musician_path', params: {id: musician.id}}\">{{ musician.band }}</router-link></td>\n          </tr>\n        </tbody>\n      </table>\n      <div v-else>\n        <h3 class=\"card ta-center\">{{ $t('no_result') }}</h3>\n      </div>\n\n      <pagination v-if=\"store.pagination\" :store=\"store\" @clicked=\"index\"></pagination>\n    </div>\n  </section>\n</template>\n\n<script setup>\nimport Filters from './_filters.vue';\nimport Pagination from '../shared/_pagination.vue';\n\nimport { MusicianStore } from \"@/admin/stores/musician_store.js\";\nconst store = MusicianStore();\n\nconst location = useRoute();\nconst index = (event => {  \n  store.index(location.fullPath)\n});\n\nonMounted(() => {\n  index(); \n});\n</script>\n"
  },
  {
    "path": "app/javascript/admin/views/musicians/new.vue",
    "content": "<template>  \n  <section class=\"container\">\n    <ul class=\"breadcrumb\">\n      <li><router-link :to=\"{ name: 'root_path' }\">{{ $t('title') }}</router-link></li>\n      <li><router-link :to=\"{ name: 'musicians_path' }\">{{ $t('nav.musicians') }}</router-link></li>\n      <li><span>{{ $t('musicians.new') }}</span></li>\n    </ul>\n\n    <div ref=\"animation\">\n      <form @submit.prevent=\"create\" accept-charset=\"UTF-8\" class=\"card\">\n        <MusicianForm :data=\"store\" /> \n\n        <div class=\"row\">\n          <div class=\"col-sm-4 col-start-sm-21 ta-right\">\n            <input type=\"submit\" :value=\"$t('save')\" />      \n          </div>\n        </div>\n      </form>\n    </div> \n  </section>\n</template>\n\n<script setup>\nimport MusicianForm from \"./_form.vue\";\nimport { MusicianStore } from \"@/admin/stores/musician_store.js\";\nconst store = MusicianStore();\n\nconst location = useRoute();\n\nconst create = (event => {\n  store.create(location.params.id);\n});\n\nonMounted(() => {\n  store.new(location.params.id)\n});\n</script>\n"
  },
  {
    "path": "app/javascript/admin/views/shared/_errors.vue",
    "content": "<template>  \n  <span class=\"error\" v-if=\"message != ''\">{{ message }}</span>\n</template>\n\n<script setup>\nconst props = defineProps(['attr', 'messages'])\n\nconst message = computed(() => {\n  return !!props.messages[props.attr] ? props.messages[props.attr].join(',') : ''\n})\n</script>\n"
  },
  {
    "path": "app/javascript/admin/views/shared/_footer.vue",
    "content": "<template>    \n  <footer>\n    <div class=\"container\">\n      <div class=\"row\">\n        <div class=\"col-xs-12 col-lg-8\">\n          Guillaume Barillot 2024 - \n          <a href=\"https://github.com/gbarillot\">Github</a> | \n          <a href=\"https://twitter.com/gbarillot\">Twitter</a>\n        </div>\n        <div class=\"col-xs-12 col-lg-4 ta-right\">\n          <b>Theme: </b> \n          <a href=\"#\" @click.prevent=\"setTheme('light')\">light</a> | \n          <a href=\"#\" @click.prevent=\"setTheme('dark')\">dark</a>\n        </div>\n      </div>\n    </div>\n  </footer>\n</template>\n\n<script setup>\nconst setTheme = ((theme) => {\n  let root = document.querySelector('html');\n  root.setAttribute('data-theme', theme);\n  document.cookie = `theme=${theme}; path=/`;\n})\n\nconst getCookie = ((name) => {\n\tlet value = '; ' + document.cookie;\n\tlet parts = value.split(`; ${name}=`);\n\tif (parts.length == 2) return parts.pop().split(';').shift();\n})\n\nonMounted(() => {\n  const theme = getCookie('theme');\n  theme ? setTheme(theme) : setTheme('light');\n})\n</script>\n"
  },
  {
    "path": "app/javascript/admin/views/shared/_nav.vue",
    "content": "<template>\n  <section class=\"top-nav\">\n    <div class=\"container\">\n      <div class=\"row\">\n        <div class=\"col-xs-12 col-lg-10\">\n          <nav>\n            <ul>\n              <li :class=\"activeOn(['root_path'])\">\n                <router-link :to=\"{name: 'root_path'}\">{{ $t('nav.dashboard') }}</router-link>\n              </li>\n              <li :class=\"activeOn(['musicians_path', 'edit_musician_path', 'new_musician_path'])\">\n                <router-link :to=\"{name: 'musicians_path'}\">{{ $t('nav.musicians') }}</router-link>\n              </li>\n              <li :class=\"activeOn(['websockets_path'])\">\n                <router-link :to=\"{name: 'websockets_path'}\">{{ $t('nav.websockets') }}</router-link>\n              </li>\n              <li>\n                <a :href=\"'/' + localePrefix() + 'users/sign_out'\">{{ $t('nav.logout') }}</a>\n              </li>\n            </ul>\n          </nav>\n        </div>\n        <div class=\"col-xs-12 col-lg-2 hidden-xs hidden-sm hidden-md\">\n          <select v-model=\"locale\">\n            <option v-for=\"locale in availableLocales\" :value=\"locale\" :key=\"locale\">\n              {{ locale.toUpperCase() }}\n            </option>\n          </select> \n        </div>\n      </div>\n    </div>\n  </section>\n</template>\n\n<script setup>\nconst location = useRoute();\nconst { t } = useI18n({});\n\nconst availableLocales = ref(window.I18n.availableLocales);\nconst locale = ref(window.I18n.locale);\n\nconst activeOn = ((paths) => {\n  return paths.includes(location.name) ? 'active' : ''\n})\nconst localePrefix = ((paths) => {\n  return window.I18n.prefix;\n})\n\nwatch(locale, (newLocale, _oldLocale) => {\n  let redirectTo = `/${newLocale}/admin${location.path}`;\n  if (newLocale === availableLocales.value[0]) {\n    redirectTo = `/admin${location.path}`;\n  }\n  window.location.href = redirectTo;\n});\n</script>\n"
  },
  {
    "path": "app/javascript/admin/views/shared/_pagination.vue",
    "content": "<template>\n  <section clas=\"container\">    \n    <div v-if=\"store.pagination.next || store.pagination.previous\">      \n      <ul class=\"pagination\">\n        <li v-if=\"store.pagination.previous != null\">\n          <router-link :to=\"{path: $route.path, query: setQuery(store.pagination.previous)}\" v-if=\"store.pagination.previous\">\n            <span>&laquo;</span>\n          </router-link>\n        </li>\n\n        <li v-for=\"page in store.pagination.pages\" :key=\"page\" :class=\"[store.pagination.current == page ? 'active' : '']\">\n          <router-link :to=\"{path: $route.path, query: setQuery(page)}\" v-if=\"page != store.pagination.current && (page == 1 || page == 2 || page == 3 || page == store.pagination.pages || page == store.pagination.pages - 1 || page == store.pagination.pages - 2)\">{{ page }}</router-link>\n\n          <span v-if=\"page != store.pagination.current && page == 4\">...</span>\n          <span v-if=\"page == store.pagination.current\">{{ page }}</span>\n          <span v-if=\"page == store.pagination.current && page == 4\">...</span>\n        </li>\n\n        <li v-if=\"store.pagination.next != null && store.pagination.pages > 0\">\n          <router-link :to=\"{path: $route.path, query: setQuery(store.pagination.next)}\"  v-if=\"store.pagination.next\">\n            <span>&raquo;</span>\n          </router-link>\n        </li>\n      </ul>\n    </div>\n  </section>\n</template>\n\n<script setup>\nconst clickEvent = defineEmits(['clicked'])\nconst location = useRoute();\nconst props = defineProps(['store']);\n\nwatch(() => location.query, () => {\n  clickEvent('clicked', true);\n});\n\nconst setQuery = (page) => {\n  const query = JSON.parse(JSON.stringify(location.query));\n  query['page'] = page;\n  return query;\n}\n</script>\n"
  },
  {
    "path": "app/javascript/admin/views/shared/layout.vue",
    "content": "<template>    \n  <main>\n    <nav-bar />\n    <router-view />\n  </main>\n  <bottom />\n</template>\n\n<script setup>\nimport NavBar from './_nav.vue';\nimport Bottom from './_footer.vue';\n</script>\n"
  },
  {
    "path": "app/javascript/admin/views/websockets/index.vue",
    "content": "<template>\n  <section class=\"container\">\n    <ul class=\"breadcrumb\">\n      <li><router-link :to=\"{name: 'root_path'}\">{{ $t('title') }}</router-link></li>\n      <li>{{ $t('nav.websockets') }}</li>\n    </ul>\n\n    <div class=\"row\">\n      <div class=\"col-xs-12 col-sm-6 card\">\n        <form @submit.prevent=\"publish\" accept-charset=\"UTF-8\">\n          <input type=\"input\" v-model=\"message\" :placeholder=\"$t('websockets.placeholder')\" />\n          <br /><br />\n          <input type=\"submit\" :value=\"$t('websockets.publish')\" />\n        </form>\n\n        <div class=\"card\">\n          <p>{{ $t('websockets.comment1') }}</p>\n          <code>{{ $t('websockets.code_example') }}</code>\n        </div>\n      </div>\n\n      <div class=\"col-xs-12 col-sm-6 card\">\n        <p>{{ $t('websockets.comment2') }}\n           <b>{{ $t('websockets.server_side') }}</b>\n           {{ $t('websockets.comment3') }}\n        </p>\n        \n        <div v-if=\"messages.length > 0\">\n          <p v-for=\"(message, index) in messages\" :key=\"index\"><i>{{ message }}</i></p>\n        </div>\n        <div v-else>\n          <p><i>{{ $t('websockets.waiting_messages') }}</i></p>\n        </div> \n      </div>\n    </div>\n  </section>\n</template>\n\n<script setup>\nconst messages = ref([]);\nconst message = ref('');\nconst cable = inject('cable')\n\nconst publish = (() => {\n  cable.send(message.value);\n  message.value = '';\n})\n\nonMounted(() => {\n  cable.on('chat', (event) => {\n    messages.value.unshift(event['message']);\n  })\n});\n</script>\n"
  },
  {
    "path": "app/javascript/entrypoints/admin.js",
    "content": "import { createApp } from 'vue';\nconst app = createApp(Layout);\n\nimport Router from '@/admin/routes.js';\nimport Layout from '@/admin/views/shared/layout.vue';\nimport Axios from \"axios\";\n\n// ActionCable setup\nimport { createCable } from '@/plugins/cable';\nconst Cable = createCable({channel: 'ChatChannel'})\n\n// Pinia + Axios setup\nimport { createApi } from '@/plugins/api';\nimport { createPinia } from 'pinia';\nconst Pinia = createPinia();\nPinia.use(({ store }) => { store.Api = createApi({handler: Axios, namespace: '/admin'}) })\n\n// I18n loader\nimport { createI18n } from 'vue-i18n';\nconst I18n = createI18n({locale: 'current',  messages: translations, legacy: false});\n\napp.use(Router)\n   .use(Pinia)\n   .use(I18n)\n   .use(Cable)\n   .mount('#app')"
  },
  {
    "path": "app/javascript/entrypoints/front.js",
    "content": "import { createApp } from 'vue';\nconst app = createApp(Layout);\n\nimport Router from '@/front/routes.js';\nimport Layout from '@/front/views/shared/layout.vue';\nimport Axios from \"axios\";\n\n// API + Axios wrapper\nimport { createApi } from '@/plugins/api';\nconst Api = createApi({handler: Axios, namespace: ''});\n\n// Pinia + Axios setup\nimport { createPinia } from 'pinia';\nconst Pinia = createPinia();\nPinia.use(({ store }) => { store.Api = Api })\n\n// I18n loader\nimport { createI18n } from 'vue-i18n';\nconst I18n = createI18n({locale: 'current',  messages: translations, legacy: false});\n\napp.use(Router)\n   .use(Pinia)\n   .use(I18n)\n   .mount('#app')"
  },
  {
    "path": "app/javascript/front/routes.js",
    "content": "import { createWebHistory, createRouter } from 'vue-router'\n\nimport PageIndex from './views/pages/index.vue';\nimport MusicianIndex from './views/musicians/index.vue';\nimport MusicianShow from './views/musicians/show.vue';\n\nconst router = createRouter({\n  history: createWebHistory(`/${I18n.prefix}`),\n  routes: [\n    { path: '/', component: MusicianIndex, name: 'root_path' },\n    { path: '/pages', component: PageIndex, name: 'pages_path' },\n    { path: '/musicians', component: MusicianIndex, name: 'musicians_path' },\n    { path: '/musicians/:id', component: MusicianShow, name: 'musician_path' },\n  ]\n});\n\n// Handles 404 Not found\nrouter.beforeEach((to, from, next) => {\n  if (!to.matched.length) {\n    window.location.href = '/404'\n  } else {\n    next();\n  }\n});\n\nexport default router;"
  },
  {
    "path": "app/javascript/front/stores/musician_store.js",
    "content": "import { defineStore } from 'pinia'\n\nexport const MusicianStore = defineStore('musicians', {\n  state: () => {\n    return {\n      musicians: [],\n      musician: {}      \n    }\n  },\n\n  actions: {\n    async index(path) {\n      return this.Api.get('/musicians').then(response => {      \n        this.musicians = response.data.musicians;\n      })  \n    },\n    async show(id) {\n      return this.Api.get(`/musicians/${id}`).then(response => {      \n        this.musician = response.data.musician;\n      })  \n    }\n  }\n})"
  },
  {
    "path": "app/javascript/front/views/musicians/index.vue",
    "content": "<template>\n  <section class=\"container\">\n    <h1>{{ $t('home.title') }}</h1>\n\n    <ul class=\"breadcrumb\">\n      <li><span>{{ $t('home.breadcrumb') }}</span></li>\n    </ul>\n\n    <div class=\"row\">\n      <div v-for=\"musician in store.musicians\" :key=\"musician.id\" class=\"col-xs-12 col-md-3 card\">\n        <router-link :to=\"{ name: 'musician_path', params: {id: musician.id}}\">{{ musician.name }}</router-link>\n      </div>\n    </div>\n  </section>\n</template>\n\n<script setup>  \nimport { MusicianStore } from \"../../stores/musician_store.js\";\nconst store = MusicianStore();\n\nonMounted(() => {\n  store.index()\n});\n</script>\n"
  },
  {
    "path": "app/javascript/front/views/musicians/show.vue",
    "content": "<template>  \n  <section class=\"container\">\n    <h1>{{ $t('home.title') }}</h1>\n\n    <ul class=\"breadcrumb\">\n      <li><router-link :to=\"{ name: 'root_path' }\">{{ $t('home.breadcrumb') }}</router-link></li>\n      <li>{{ store.musician.name }}</li>\n    </ul>\n\n    <h2>{{ $t('musicians.title') }}</h2>\n    <p>\n      <b>{{ $t('musicians.id') }}:</b> {{ store.musician.id }}<br />\n      <b>{{ $t('musicians.name') }}:</b> {{ store.musician.name }}<br /> \n      <b>{{ $t('musicians.band') }}:</b> {{ store.musician.band }}\n    </p>\n  </section>\n</template>\n\n<script setup>\nimport { MusicianStore } from \"../../stores/musician_store.js\";\nconst store = MusicianStore();\nconst location = useRoute();\n\nonMounted(() => {\n  store.show(location.params.id)\n});\n</script>"
  },
  {
    "path": "app/javascript/front/views/pages/index.vue",
    "content": "<template>\n  <section class=\"container\">\n    <h1>{{ $t('pages.title') }}</h1>\n\n    <p><a href=\"/dead-link\">{{ $t('pages.server_404') }}</a></p>\n    <p><router-link to=\"/dead-link\">{{ $t('pages.client_404') }}</router-link></p>\n    <p><a @click.prevent=\"unauthorized\" href=\"#\">{{ $t('pages.server_401') }}</a></p>\n    <p><a @click.prevent=\"crash\" href=\"#\">{{ $t('pages.server_500') }}</a></p>\n    <br />\n    <b><a href=\"admin\">{{ $t('pages.admin_link') }}</a></b>\n  </section>\n</template>\n\n<script setup>\nimport { MusicianStore } from \"../../stores/musician_store\";\nconst store = MusicianStore();\n\nconst unauthorized = (() => {\n  store.show('this-will-trigger-a-401');        \n})\nconst crash = (() => {\n  store.show('this-will-trigger-a-500'); \n})\n</script>\n"
  },
  {
    "path": "app/javascript/front/views/shared/_footer.vue",
    "content": "<template>    \n  <footer>\n    <div class=\"container\">\n      <div class=\"row\">\n        <div class=\"col-xs-12 col-lg-8\">\n          Guillaume Barillot 2024 - \n          <a href=\"https://github.com/gbarillot\">Github</a> | \n          <a href=\"https://twitter.com/gbarillot\">Twitter</a>\n        </div>\n        <div class=\"col-xs-12 col-lg-4 ta-right\">\n          <b>Theme: </b> \n          <a href=\"#\" @click.prevent=\"setTheme('light')\">light</a> | \n          <a href=\"#\" @click.prevent=\"setTheme('dark')\">dark</a>\n        </div>\n      </div>\n    </div>\n  </footer>\n</template>\n\n<script setup>\nconst setTheme = ((theme) => {\n  let root = document.querySelector('html');\n  root.setAttribute('data-theme', theme);\n  document.cookie = `theme=${theme}; path=/`;\n})\n\nconst getCookie = ((name) => {\n\tlet value = '; ' + document.cookie;\n\tlet parts = value.split(`; ${name}=`);\n\tif (parts.length == 2) return parts.pop().split(';').shift();\n})\n\nonMounted(() => {\n  const theme = getCookie('theme');\n  theme ? setTheme(theme) : setTheme('light');\n})\n</script>\n"
  },
  {
    "path": "app/javascript/front/views/shared/_nav.vue",
    "content": "<template>\n  <section class=\"top-nav\">\n    <div class=\"container\">\n      <div class=\"row\">\n        <div class=\"col-xs-8 col-sm-9\">\n          <nav>\n            <ul>\n              <li :class=\"activeOn(['root_path', 'musicians_path', 'musician_path'])\">\n                <router-link to=\"/\" >{{ $t('nav.homepage') }}</router-link>\n              </li>\n              <li :class=\"activeOn(['pages_path'])\">\n                <router-link :to=\"{name: 'pages_path'}\">{{ $t('nav.pages') }}</router-link>\n              </li>\n            </ul>\n          </nav>\n        </div>\n        <div class=\"col-xs-4 col-sm-3\">\n          <select v-model=\"locale\">\n            <option v-for=\"locale in availableLocales\" :value=\"locale\" :key=\"locale\">\n              {{ locale.toUpperCase() }}\n            </option>\n          </select> \n        </div>\n      </div>\n    </div>\n\n  </section>\n</template>\n\n<script setup>\nconst location = useRoute();\nconst { t } = useI18n({});\n\nconst availableLocales = ref(window.I18n.availableLocales);\nconst locale = ref(window.I18n.locale);\n\nconst activeOn = ((paths) => {\n  return paths.includes(location.name) ? 'active' : ''\n})\n\nwatch(locale, (newLocale, _oldLocale) => {\n  let redirectTo = `/${newLocale}${location.path}`;\n  if (newLocale === availableLocales.value[0]) {\n    redirectTo = `${location.path}`;\n  }\n  window.location.href = redirectTo;\n});\n</script>\n"
  },
  {
    "path": "app/javascript/front/views/shared/layout.vue",
    "content": "<template>    \n  <main>\n    <nav-bar /> \n    <router-view />\n  </main>  \n  <bottom />\n</template>\n\n<script setup>\nimport NavBar from './_nav.vue';\nimport Bottom from './_footer.vue';\n</script>\n"
  },
  {
    "path": "app/javascript/plugins/api.js",
    "content": "import Axios from \"axios\";\n\nfunction Api() {\n  const get = function (route) {\n    return Axios.get(route);\n  };\n  const post = function (route, params) {\n    return Axios.post(route, params);\n  };\n  const put = function (route, params) {\n    return Axios.put(route, params);\n  };\n  const destroy = function (route) {\n    return Axios.delete(route);\n  };\n\n  return { get, post, put, destroy };\n}\n\nexport function createApi(args) {\n  args.handler.defaults.baseURL = `/${window.I18n.prefix}api${args.namespace}/`;\n  args.handler.defaults.headers.common[\"X-CSRF-Token\"] = document\n    .querySelector('meta[name=\"csrf-token\"]')\n    .getAttribute(\"content\");\n  args.handler.interceptors.response.use(\n    (response) => {\n      return response;\n    },\n    (error) => {\n      switch (error.response.status) {\n        case 500:\n          window.location.href = \"/500\";\n          break;\n        case 401:\n          alert(\"not authenticated\");\n          break;\n      }\n\n      return Promise.reject(error);\n    }\n  );\n\n  return new Api();\n}\n"
  },
  {
    "path": "app/javascript/plugins/cable.js",
    "content": "import { createConsumer } from \"@rails/actioncable\"\nimport mitt from 'mitt';\n\nconst protocol = window.location.protocol === 'https:' ? 'wss' : 'ws';\nconst consumer = createConsumer(`${protocol}://${window.location.host}/cable`);\nconst emitter = mitt();\nlet channel = null;\n\nfunction Cable() {}\n\nCable.prototype.on = function(channel, callback) {\n  return emitter.on(channel, callback);\n};\n\nCable.prototype.send = function(message) {\n  channel.send({message: message})\n};\n\nCable.prototype.install = function(app) {\n  app.plugin = this;\n  app.provide('cable', this)\n}\n\nexport function createCable(options) {\n  channel = consumer.subscriptions.create({ channel: options.channel}, {\n    received(data) {    \n      emitter.emit('chat', data)\n    }\n  })\n\n  return new Cable();\n}\n"
  },
  {
    "path": "app/jobs/application_job.rb",
    "content": "class ApplicationJob < ActiveJob::Base\n  # Automatically retry jobs that encountered a deadlock\n  # retry_on ActiveRecord::Deadlocked\n\n  # Most jobs are safe to ignore if the underlying records are no longer available\n  # discard_on ActiveJob::DeserializationError\nend\n"
  },
  {
    "path": "app/mailers/application_mailer.rb",
    "content": "class ApplicationMailer < ActionMailer::Base\n  default from: \"from@example.com\"\n  layout \"mailer\"\nend\n"
  },
  {
    "path": "app/models/application_record.rb",
    "content": "class ApplicationRecord < ActiveRecord::Base\n  primary_abstract_class\nend\n"
  },
  {
    "path": "app/models/concerns/.keep",
    "content": ""
  },
  {
    "path": "app/models/musician.rb",
    "content": "class Musician < ApplicationRecord\n  paginates_per 5\n\n  validates_presence_of :name, :band\n\n  enum band: [:rolling_stones, :beatles, :acdc]\n\n  def self.ransackable_attributes(auth_object = nil)\n    [\"band\", \"name\"]\n  end\nend\n"
  },
  {
    "path": "app/models/user.rb",
    "content": "class User < ApplicationRecord\n  paginates_per 10\n\n  devise :database_authenticatable\n\n  validates_presence_of :email\nend\n"
  },
  {
    "path": "app/views/admin.html.erb",
    "content": "<html data-theme=\"light\">\n  <head>\n    <title>Boilerplate | Admin</title>\n    <meta charset=\"UTF-8\">\n    <%= csrf_meta_tags %>\n    \n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <link rel=\"stylesheet\" href=\"https://unpkg.com/@picocss/pico@latest/css/pico.min.css\">\n    <link rel=\"stylesheet\" href=\"/css/development/front.css\">\n    <link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/favicon.ico\" />\n\n    <script type='text/javascript'>\n      const translations = <%= ui_translations(:admin) %>;\n    </script>\n    <script type='text/javascript'>\n      I18n = {\n        prefix: '<%= I18n.locale == I18n.default_locale ? \"\" : \"#{I18n.locale}/\" %>',\n        locale: '<%= I18n.locale %>',\n        availableLocales: <%= raw(I18n.available_locales.map {|loc| loc.to_s}) %>\n      }\n    </script>\n  </head>\n  <body>\n    <div id=\"app\"></div>\n    <%= vite_javascript_tag 'admin' %>\n  </body>\n</html>\n"
  },
  {
    "path": "app/views/api/admin/musicians/edit.json.jbuilder",
    "content": "json.musician do\n  json.id @musician.id\n  json.name @musician.name\n  json.band @musician.band\n  json.bands Musician.bands.each do |name, _|\n    json.key name\n    json.name t(name, scope: 'bands')\n  end\nend\n"
  },
  {
    "path": "app/views/api/admin/musicians/index.json.jbuilder",
    "content": "json.musicians @musicians.each do |musician|\n  json.id musician.id\n  json.created_at l(musician.created_at, format: :default)\n  json.name musician.name\n  json.band t(musician.band, scope: 'bands')\nend\n\njson.bands Musician.bands.each do |band, key|\n  json.key key\n  json.name t(band, scope: 'bands')\nend\n\njson.partial! partial: '/api/admin/shared/pagination', locals: {\n  kind: @musicians\n}\n"
  },
  {
    "path": "app/views/api/admin/musicians/new.json.jbuilder",
    "content": "json.musician do\n  json.name @musician.name\n  json.bands Musician.bands.each do |name, _|\n    json.key name\n    json.name t(name, scope: 'bands')\n  end\nend\n"
  },
  {
    "path": "app/views/api/admin/shared/_pagination.json.jbuilder",
    "content": "obj = paginate(kind)\njson.pagination do\n  json.current obj[:current]\n  json.previous obj[:previous]\n  json.next obj[:next]\n  json.per_page obj[:per_page]\n  json.pages obj[:pages]\n  json.count obj[:count]\nend\n"
  },
  {
    "path": "app/views/api/admin/users/edit.json.jbuilder",
    "content": "json.user do\n  json.id @user.id\n  json.email @user.email\nend\n"
  },
  {
    "path": "app/views/api/admin/users/index.json.jbuilder",
    "content": "json.users @users.each do |user|\n  json.id user.id\n  json.created_at l(user.created_at, format: :default)\n  json.email user.email\nend\n\njson.partial! partial: '/api/admin/shared/pagination', locals: {\n  kind: @users,\n  callback: 'UserStore/index'\n}\n"
  },
  {
    "path": "app/views/api/admin/users/new.json.jbuilder",
    "content": "json.user do\n  json.email @user.email\nend\n"
  },
  {
    "path": "app/views/api/musicians/index.json.jbuilder",
    "content": "json.musicians @musicians.each do |musician|\n  json.id musician.id\n  json.created_at l(musician.created_at, format: :default)\n  json.name musician.name\n  json.band t(musician.band, scope: 'bands')\nend\n"
  },
  {
    "path": "app/views/api/musicians/show.json.jbuilder",
    "content": "json.musician do\n  json.id @musician.id\n  json.name @musician.name\n  json.band t(@musician.band, scope: 'bands')\nend\n"
  },
  {
    "path": "app/views/application.html.erb",
    "content": "<html data-theme=\"light\">\n  <head>\n    <title>Boilerplate</title>\n    <meta charset=\"UTF-8\">\n    <%= csrf_meta_tags %>\n    <link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/favicon.ico\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <link rel=\"stylesheet\" href=\"https://unpkg.com/@picocss/pico@latest/css/pico.min.css\">\n    <link rel=\"stylesheet\" href=\"/css/development/front.css\">\n    \n    <script type=\"text/javascript\">\n      const translations = <%= ui_translations(:front) %>;\n    </script>\n\n    <script type=\"text/javascript\">\n      I18n = {\n        prefix: '<%= I18n.locale == I18n.default_locale ? \"\" : \"#{I18n.locale}/\" %>',\n        locale: '<%= I18n.locale %>',\n        availableLocales: <%= raw(I18n.available_locales.map {|loc| loc.to_s}) %>\n      }\n    </script>\n  </head>\n  <body>\n    <div id=\"app\"></div>\n    \n    <%= vite_javascript_tag 'front' %>\n  </body>\n</html>\n"
  },
  {
    "path": "app/views/devise/sessions/new.html.erb",
    "content": "<section class=\"container devise\">\n  <div class=\"row\">\n    <div class=\"col-xs-12 col-sm-10 col-md-6\">\n\n      <div class=\"card\">\n        <h2><%= t('devise.sign_in') %></h2>\n        <%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>\n          <fieldset>\n            <%= f.label :email %>\n            <%= f.email_field :email, value: \"admin@domain.com\", autofocus: true, class: \"uk-input\" %>\n          </fieldset>\n\n          <fieldset>\n            <%= f.label :password %>\n            <%= f.password_field :password, value: \"password\", autocomplete: \"off\", class: \"uk-input\" %>\n          </fieldset>\n\n          <div class=\"actions\">\n            <%= f.submit t('devise.sign_in'), class: \"button button-primary\" %>\n          </div>\n        <% end %>\n      </div>\n\n    </div>\n  </div>\n</section>\n"
  },
  {
    "path": "app/views/layouts/devise.html.erb",
    "content": "<html data-theme=\"light\">\n  <head>\n    <title>Boilerplate</title>\n    <%= csrf_meta_tags %>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <link rel=\"stylesheet\" href=\"https://unpkg.com/@picocss/pico@latest/css/pico.min.css\">\n    <link rel=\"stylesheet\" href=\"/css/development/front.css\">\n\n    <link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/favicon.ico\" />\n  </head>\n  <body>\n    <%= yield %>\n  </body>\n</html>\n"
  },
  {
    "path": "app/views/layouts/mailer.html.erb",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n    <style>\n      /* Email styles need to be inline */\n    </style>\n  </head>\n\n  <body>\n    <%= yield %>\n  </body>\n</html>\n"
  },
  {
    "path": "app/views/layouts/mailer.text.erb",
    "content": "<%= yield %>\n"
  },
  {
    "path": "bin/bootsnap",
    "content": "#!/usr/bin/env ruby\n# frozen_string_literal: true\n\n#\n# This file was generated by Bundler.\n#\n# The application 'bootsnap' is installed as part of a gem, and\n# this file is here to facilitate running it.\n#\n\nENV[\"BUNDLE_GEMFILE\"] ||= File.expand_path(\"../Gemfile\", __dir__)\n\nbundle_binstub = File.expand_path(\"bundle\", __dir__)\n\nif File.file?(bundle_binstub)\n  if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/\n    load(bundle_binstub)\n  else\n    abort(\"Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.\nReplace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.\")\n  end\nend\n\nrequire \"rubygems\"\nrequire \"bundler/setup\"\n\nload Gem.bin_path(\"bootsnap\", \"bootsnap\")\n"
  },
  {
    "path": "bin/bundle",
    "content": "#!/usr/bin/env ruby\n# frozen_string_literal: true\n\n#\n# This file was generated by Bundler.\n#\n# The application 'bundle' is installed as part of a gem, and\n# this file is here to facilitate running it.\n#\n\nrequire \"rubygems\"\n\nm = Module.new do\n  module_function\n\n  def invoked_as_script?\n    File.expand_path($0) == File.expand_path(__FILE__)\n  end\n\n  def env_var_version\n    ENV[\"BUNDLER_VERSION\"]\n  end\n\n  def cli_arg_version\n    return unless invoked_as_script? # don't want to hijack other binstubs\n    return unless \"update\".start_with?(ARGV.first || \" \") # must be running `bundle update`\n    bundler_version = nil\n    update_index = nil\n    ARGV.each_with_index do |a, i|\n      if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN\n        bundler_version = a\n      end\n      next unless a =~ /\\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\\z/\n      bundler_version = $1\n      update_index = i\n    end\n    bundler_version\n  end\n\n  def gemfile\n    gemfile = ENV[\"BUNDLE_GEMFILE\"]\n    return gemfile if gemfile && !gemfile.empty?\n\n    File.expand_path(\"../Gemfile\", __dir__)\n  end\n\n  def lockfile\n    lockfile =\n      case File.basename(gemfile)\n      when \"gems.rb\" then gemfile.sub(/\\.rb$/, gemfile)\n      else \"#{gemfile}.lock\"\n      end\n    File.expand_path(lockfile)\n  end\n\n  def lockfile_version\n    return unless File.file?(lockfile)\n    lockfile_contents = File.read(lockfile)\n    return unless lockfile_contents =~ /\\n\\nBUNDLED WITH\\n\\s{2,}(#{Gem::Version::VERSION_PATTERN})\\n/\n    Regexp.last_match(1)\n  end\n\n  def bundler_requirement\n    @bundler_requirement ||=\n      env_var_version || cli_arg_version ||\n        bundler_requirement_for(lockfile_version)\n  end\n\n  def bundler_requirement_for(version)\n    return \"#{Gem::Requirement.default}.a\" unless version\n\n    bundler_gem_version = Gem::Version.new(version)\n\n    requirement = bundler_gem_version.approximate_recommendation\n\n    return requirement unless Gem.rubygems_version < Gem::Version.new(\"2.7.0\")\n\n    requirement += \".a\" if bundler_gem_version.prerelease?\n\n    requirement\n  end\n\n  def load_bundler!\n    ENV[\"BUNDLE_GEMFILE\"] ||= gemfile\n\n    activate_bundler\n  end\n\n  def activate_bundler\n    gem_error = activation_error_handling do\n      gem \"bundler\", bundler_requirement\n    end\n    return if gem_error.nil?\n    require_error = activation_error_handling do\n      require \"bundler/version\"\n    end\n    return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION))\n    warn \"Activating bundler (#{bundler_requirement}) failed:\\n#{gem_error.message}\\n\\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`\"\n    exit 42\n  end\n\n  def activation_error_handling\n    yield\n    nil\n  rescue StandardError, LoadError => e\n    e\n  end\nend\n\nm.load_bundler!\n\nif m.invoked_as_script?\n  load Gem.bin_path(\"bundler\", \"bundle\")\nend\n"
  },
  {
    "path": "bin/foreman",
    "content": "#!/usr/bin/env ruby\n# frozen_string_literal: true\n\n#\n# This file was generated by Bundler.\n#\n# The application 'foreman' is installed as part of a gem, and\n# this file is here to facilitate running it.\n#\n\nENV[\"BUNDLE_GEMFILE\"] ||= File.expand_path(\"../Gemfile\", __dir__)\n\nbundle_binstub = File.expand_path(\"bundle\", __dir__)\n\nif File.file?(bundle_binstub)\n  if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/\n    load(bundle_binstub)\n  else\n    abort(\"Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.\nReplace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.\")\n  end\nend\n\nrequire \"rubygems\"\nrequire \"bundler/setup\"\n\nload Gem.bin_path(\"foreman\", \"foreman\")\n"
  },
  {
    "path": "bin/importmap",
    "content": "#!/usr/bin/env ruby\n\nrequire_relative \"../config/application\"\nrequire \"importmap/commands\"\n"
  },
  {
    "path": "bin/irb",
    "content": "#!/usr/bin/env ruby\n# frozen_string_literal: true\n\n#\n# This file was generated by Bundler.\n#\n# The application 'irb' is installed as part of a gem, and\n# this file is here to facilitate running it.\n#\n\nENV[\"BUNDLE_GEMFILE\"] ||= File.expand_path(\"../Gemfile\", __dir__)\n\nbundle_binstub = File.expand_path(\"bundle\", __dir__)\n\nif File.file?(bundle_binstub)\n  if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/\n    load(bundle_binstub)\n  else\n    abort(\"Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.\nReplace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.\")\n  end\nend\n\nrequire \"rubygems\"\nrequire \"bundler/setup\"\n\nload Gem.bin_path(\"irb\", \"irb\")\n"
  },
  {
    "path": "bin/nokogiri",
    "content": "#!/usr/bin/env ruby\n# frozen_string_literal: true\n\n#\n# This file was generated by Bundler.\n#\n# The application 'nokogiri' is installed as part of a gem, and\n# this file is here to facilitate running it.\n#\n\nENV[\"BUNDLE_GEMFILE\"] ||= File.expand_path(\"../Gemfile\", __dir__)\n\nbundle_binstub = File.expand_path(\"bundle\", __dir__)\n\nif File.file?(bundle_binstub)\n  if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/\n    load(bundle_binstub)\n  else\n    abort(\"Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.\nReplace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.\")\n  end\nend\n\nrequire \"rubygems\"\nrequire \"bundler/setup\"\n\nload Gem.bin_path(\"nokogiri\", \"nokogiri\")\n"
  },
  {
    "path": "bin/puma",
    "content": "#!/usr/bin/env ruby\n# frozen_string_literal: true\n\n#\n# This file was generated by Bundler.\n#\n# The application 'puma' is installed as part of a gem, and\n# this file is here to facilitate running it.\n#\n\nENV[\"BUNDLE_GEMFILE\"] ||= File.expand_path(\"../Gemfile\", __dir__)\n\nbundle_binstub = File.expand_path(\"bundle\", __dir__)\n\nif File.file?(bundle_binstub)\n  if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/\n    load(bundle_binstub)\n  else\n    abort(\"Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.\nReplace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.\")\n  end\nend\n\nrequire \"rubygems\"\nrequire \"bundler/setup\"\n\nload Gem.bin_path(\"puma\", \"puma\")\n"
  },
  {
    "path": "bin/pumactl",
    "content": "#!/usr/bin/env ruby\n# frozen_string_literal: true\n\n#\n# This file was generated by Bundler.\n#\n# The application 'pumactl' is installed as part of a gem, and\n# this file is here to facilitate running it.\n#\n\nENV[\"BUNDLE_GEMFILE\"] ||= File.expand_path(\"../Gemfile\", __dir__)\n\nbundle_binstub = File.expand_path(\"bundle\", __dir__)\n\nif File.file?(bundle_binstub)\n  if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/\n    load(bundle_binstub)\n  else\n    abort(\"Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.\nReplace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.\")\n  end\nend\n\nrequire \"rubygems\"\nrequire \"bundler/setup\"\n\nload Gem.bin_path(\"puma\", \"pumactl\")\n"
  },
  {
    "path": "bin/racc",
    "content": "#!/usr/bin/env ruby\n# frozen_string_literal: true\n\n#\n# This file was generated by Bundler.\n#\n# The application 'racc' is installed as part of a gem, and\n# this file is here to facilitate running it.\n#\n\nENV[\"BUNDLE_GEMFILE\"] ||= File.expand_path(\"../Gemfile\", __dir__)\n\nbundle_binstub = File.expand_path(\"bundle\", __dir__)\n\nif File.file?(bundle_binstub)\n  if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/\n    load(bundle_binstub)\n  else\n    abort(\"Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.\nReplace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.\")\n  end\nend\n\nrequire \"rubygems\"\nrequire \"bundler/setup\"\n\nload Gem.bin_path(\"racc\", \"racc\")\n"
  },
  {
    "path": "bin/rackup",
    "content": "#!/usr/bin/env ruby\n# frozen_string_literal: true\n\n#\n# This file was generated by Bundler.\n#\n# The application 'rackup' is installed as part of a gem, and\n# this file is here to facilitate running it.\n#\n\nENV[\"BUNDLE_GEMFILE\"] ||= File.expand_path(\"../Gemfile\", __dir__)\n\nbundle_binstub = File.expand_path(\"bundle\", __dir__)\n\nif File.file?(bundle_binstub)\n  if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/\n    load(bundle_binstub)\n  else\n    abort(\"Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.\nReplace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.\")\n  end\nend\n\nrequire \"rubygems\"\nrequire \"bundler/setup\"\n\nload Gem.bin_path(\"rack\", \"rackup\")\n"
  },
  {
    "path": "bin/rails",
    "content": "#!/usr/bin/env ruby\nAPP_PATH = File.expand_path(\"../config/application\", __dir__)\nrequire_relative \"../config/boot\"\nrequire \"rails/commands\"\n"
  },
  {
    "path": "bin/rake",
    "content": "#!/usr/bin/env ruby\nrequire_relative \"../config/boot\"\nrequire \"rake\"\nRake.application.run\n"
  },
  {
    "path": "bin/rdbg",
    "content": "#!/usr/bin/env ruby\n# frozen_string_literal: true\n\n#\n# This file was generated by Bundler.\n#\n# The application 'rdbg' is installed as part of a gem, and\n# this file is here to facilitate running it.\n#\n\nENV[\"BUNDLE_GEMFILE\"] ||= File.expand_path(\"../Gemfile\", __dir__)\n\nbundle_binstub = File.expand_path(\"bundle\", __dir__)\n\nif File.file?(bundle_binstub)\n  if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/\n    load(bundle_binstub)\n  else\n    abort(\"Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.\nReplace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.\")\n  end\nend\n\nrequire \"rubygems\"\nrequire \"bundler/setup\"\n\nload Gem.bin_path(\"debug\", \"rdbg\")\n"
  },
  {
    "path": "bin/setup",
    "content": "#!/usr/bin/env ruby\nrequire \"fileutils\"\n\n# path to your application root.\nAPP_ROOT = File.expand_path(\"..\", __dir__)\n\ndef system!(*args)\n  system(*args, exception: true)\nend\n\nFileUtils.chdir APP_ROOT do\n  # This script is a way to set up or update your development environment automatically.\n  # This script is idempotent, so that you can run it at any time and get an expectable outcome.\n  # Add necessary setup steps to this file.\n\n  puts \"== Installing dependencies ==\"\n  system! \"gem install bundler --conservative\"\n  system(\"bundle check\") || system!(\"bundle install\")\n\n  # puts \"\\n== Copying sample files ==\"\n  # unless File.exist?(\"config/database.yml\")\n  #   FileUtils.cp \"config/database.yml.sample\", \"config/database.yml\"\n  # end\n\n  puts \"\\n== Preparing database ==\"\n  system! \"bin/rails db:prepare\"\n\n  puts \"\\n== Removing old logs and tempfiles ==\"\n  system! \"bin/rails log:clear tmp:clear\"\n\n  puts \"\\n== Restarting application server ==\"\n  system! \"bin/rails restart\"\nend\n"
  },
  {
    "path": "bin/spring",
    "content": "#!/usr/bin/env ruby\n# frozen_string_literal: true\n\n#\n# This file was generated by Bundler.\n#\n# The application 'spring' is installed as part of a gem, and\n# this file is here to facilitate running it.\n#\n\nENV[\"BUNDLE_GEMFILE\"] ||= File.expand_path(\"../Gemfile\", __dir__)\n\nbundle_binstub = File.expand_path(\"bundle\", __dir__)\n\nif File.file?(bundle_binstub)\n  if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/\n    load(bundle_binstub)\n  else\n    abort(\"Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.\nReplace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.\")\n  end\nend\n\nrequire \"rubygems\"\nrequire \"bundler/setup\"\n\nload Gem.bin_path(\"spring\", \"spring\")\n"
  },
  {
    "path": "bin/sprockets",
    "content": "#!/usr/bin/env ruby\n# frozen_string_literal: true\n\n#\n# This file was generated by Bundler.\n#\n# The application 'sprockets' is installed as part of a gem, and\n# this file is here to facilitate running it.\n#\n\nENV[\"BUNDLE_GEMFILE\"] ||= File.expand_path(\"../Gemfile\", __dir__)\n\nbundle_binstub = File.expand_path(\"bundle\", __dir__)\n\nif File.file?(bundle_binstub)\n  if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/\n    load(bundle_binstub)\n  else\n    abort(\"Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.\nReplace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.\")\n  end\nend\n\nrequire \"rubygems\"\nrequire \"bundler/setup\"\n\nload Gem.bin_path(\"sprockets\", \"sprockets\")\n"
  },
  {
    "path": "bin/thor",
    "content": "#!/usr/bin/env ruby\n# frozen_string_literal: true\n\n#\n# This file was generated by Bundler.\n#\n# The application 'thor' is installed as part of a gem, and\n# this file is here to facilitate running it.\n#\n\nENV[\"BUNDLE_GEMFILE\"] ||= File.expand_path(\"../Gemfile\", __dir__)\n\nbundle_binstub = File.expand_path(\"bundle\", __dir__)\n\nif File.file?(bundle_binstub)\n  if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/\n    load(bundle_binstub)\n  else\n    abort(\"Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.\nReplace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.\")\n  end\nend\n\nrequire \"rubygems\"\nrequire \"bundler/setup\"\n\nload Gem.bin_path(\"thor\", \"thor\")\n"
  },
  {
    "path": "bin/tilt",
    "content": "#!/usr/bin/env ruby\n# frozen_string_literal: true\n\n#\n# This file was generated by Bundler.\n#\n# The application 'tilt' is installed as part of a gem, and\n# this file is here to facilitate running it.\n#\n\nENV[\"BUNDLE_GEMFILE\"] ||= File.expand_path(\"../Gemfile\", __dir__)\n\nbundle_binstub = File.expand_path(\"bundle\", __dir__)\n\nif File.file?(bundle_binstub)\n  if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/\n    load(bundle_binstub)\n  else\n    abort(\"Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.\nReplace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.\")\n  end\nend\n\nrequire \"rubygems\"\nrequire \"bundler/setup\"\n\nload Gem.bin_path(\"tilt\", \"tilt\")\n"
  },
  {
    "path": "bin/vite",
    "content": "#!/usr/bin/env ruby\n# frozen_string_literal: true\n\n#\n# This file was generated by Bundler.\n#\n# The application 'vite' is installed as part of a gem, and\n# this file is here to facilitate running it.\n#\n\nENV[\"BUNDLE_GEMFILE\"] ||= File.expand_path(\"../Gemfile\", __dir__)\n\nbundle_binstub = File.expand_path(\"bundle\", __dir__)\n\nif File.file?(bundle_binstub)\n  if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/\n    load(bundle_binstub)\n  else\n    abort(\"Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.\nReplace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.\")\n  end\nend\n\nrequire \"rubygems\"\nrequire \"bundler/setup\"\n\nload Gem.bin_path(\"vite_ruby\", \"vite\")\n"
  },
  {
    "path": "config/application.rb",
    "content": "require_relative \"boot\"\n\nrequire \"rails/all\"\n\n# Require the gems listed in Gemfile, including any gems\n# you've limited to :test, :development, or :production.\nBundler.require(*Rails.groups)\n\nmodule Next\n  class Application < Rails::Application\n    # Initialize configuration defaults for originally generated Rails version.\n    config.load_defaults 7.0\n\n    # Please, add to the `ignore` list any other `lib` subdirectories that do\n    # not contain `.rb` files, or that should not be reloaded or eager loaded.\n    # Common ones are `templates`, `generators`, or `middleware`, for example.\n    config.autoload_lib(ignore: %w(assets tasks))\n\n    # Configuration for the application, engines, and railties goes here.\n    #\n    # These settings can be overridden in specific environments using the files\n    # in config/environments, which are processed later.\n    #\n    # config.time_zone = \"Central Time (US & Canada)\"\n    # config.eager_load_paths << Rails.root.join(\"extras\")\n  end\nend\n"
  },
  {
    "path": "config/boot.rb",
    "content": "ENV[\"BUNDLE_GEMFILE\"] ||= File.expand_path(\"../Gemfile\", __dir__)\n\nrequire \"bundler/setup\" # Set up gems listed in the Gemfile.\nrequire \"bootsnap/setup\" # Speed up boot time by caching expensive operations.\n"
  },
  {
    "path": "config/cable.yml",
    "content": "development:\n  adapter: redis\n  url: redis://<%= ENV[\"REDIS_URL\"] || 'localhost' %>:6379/1\n\ntest:\n  adapter: test\n\nproduction:\n  adapter: redis\n  url: <%= ENV.fetch(\"REDIS_URL\") { \"redis://localhost:6379/1\" } %>\n  channel_prefix: next_production\n"
  },
  {
    "path": "config/credentials.yml.enc",
    "content": "z50kuuEHj1CEUcKRpJWPamB52/q1tUa818uvcrvMpkdqctOJIuFJlK1CSQvI9roMpaEdrydKRM2yubgNJX5C4Bj5qsI5uW3O77bkjiSbVjjSrMOCE4iogYxF2LS9aJ3OPny29Dgx3BzAtDR9GN6FiBytcvOjYIUNTYZrbqYFLFW2zjAeb8NElTqBdjePEHWitR5813D8e4VzQqLsaM/fcbiiwXs48YyFU1vN9uPCpL+Ljn54vyFmrAox1sbjtxYIr97YNsQNvouGdpt92zzkhckcnXQ6OWv1J/thPHzGbtJO5Ej9XmtlWnUWTFAI713C7SptEmyky/Q8OdO7ueKx16dZWucPAGoLm2lFst7OvVkWLM0r6sxGM4UrJLwG9IZhwt9UdxUyCd0VM/w9w+1bSdaUGsMAWnheTeLe--LR73FGyHeOp0ATJ0--+C76DQyMTGNE1y/Y8/G92Q=="
  },
  {
    "path": "config/database.yml",
    "content": "# SQLite version 3.x\n#   gem install sqlite3\n#\n#   Ensure the SQLite 3 gem is defined in your Gemfile\n#   gem 'sqlite3'\n#\ndefault: &default\n  adapter: sqlite3\n  pool: <%= ENV.fetch(\"RAILS_MAX_THREADS\") { 5 } %>\n  timeout: 5000\n\ndevelopment:\n  <<: *default\n  database: db/development.sqlite3\n\n# Warning: The database defined as \"test\" will be erased and\n# re-generated from your development database when you run \"rake\".\n# Do not set this db to the same as development or production.\ntest:\n  <<: *default\n  database: db/test.sqlite3\n\nproduction:\n  <<: *default\n  database: db/production.sqlite3\n"
  },
  {
    "path": "config/environment.rb",
    "content": "# Load the Rails application.\nrequire_relative \"application\"\n\n# Initialize the Rails application.\nRails.application.initialize!\n"
  },
  {
    "path": "config/environments/development.rb",
    "content": "require \"active_support/core_ext/integer/time\"\n\nRails.application.configure do\n  # Settings specified here will take precedence over those in config/application.rb.\n\n  # In the development environment your application's code is reloaded any time\n  # it changes. This slows down response time but is perfect for development\n  # since you don't have to restart the web server when you make code changes.\n  config.enable_reloading = true\n\n  # Do not eager load code on boot.\n  config.eager_load = false\n\n  # Show full error reports.\n  config.consider_all_requests_local = true\n\n  # Enable server timing\n  config.server_timing = true\n\n  # Enable/disable caching. By default caching is disabled.\n  # Run rails dev:cache to toggle caching.\n  if Rails.root.join(\"tmp/caching-dev.txt\").exist?\n    config.action_controller.perform_caching = true\n    config.action_controller.enable_fragment_cache_logging = true\n\n    config.cache_store = :memory_store\n    config.public_file_server.headers = {\n      \"Cache-Control\" => \"public, max-age=#{2.days.to_i}\"\n    }\n  else\n    config.action_controller.perform_caching = false\n\n    config.cache_store = :null_store\n  end\n\n  # Store uploaded files on the local file system (see config/storage.yml for options).\n  config.active_storage.service = :local\n\n  # Don't care if the mailer can't send.\n  config.action_mailer.raise_delivery_errors = false\n\n  config.action_mailer.perform_caching = false\n\n  # Print deprecation notices to the Rails logger.\n  config.active_support.deprecation = :log\n\n  # Raise exceptions for disallowed deprecations.\n  config.active_support.disallowed_deprecation = :raise\n\n  # Tell Active Support which deprecation messages to disallow.\n  config.active_support.disallowed_deprecation_warnings = []\n\n  # Raise an error on page load if there are pending migrations.\n  config.active_record.migration_error = :page_load\n\n  # Highlight code that triggered database queries in logs.\n  config.active_record.verbose_query_logs = true\n\n  # Highlight code that enqueued background job in logs.\n  config.active_job.verbose_enqueue_logs = true\n\n  # Suppress logger output for asset requests.\n  config.assets.quiet = true\n\n  # Raises error for missing translations.\n  # config.i18n.raise_on_missing_translations = true\n\n  # Annotate rendered view with file names.\n  # config.action_view.annotate_rendered_view_with_filenames = true\n\n  # Uncomment if you wish to allow Action Cable access from any origin.\n  # config.action_cable.disable_request_forgery_protection = true\n\n  # Raise error when a before_action's only/except options reference missing actions\n  config.action_controller.raise_on_missing_callback_actions = true\nend\n"
  },
  {
    "path": "config/environments/production.rb",
    "content": "require \"active_support/core_ext/integer/time\"\n\nRails.application.configure do\n  # Settings specified here will take precedence over those in config/application.rb.\n\n  # Code is not reloaded between requests.\n  config.enable_reloading = false\n\n  # Eager load code on boot. This eager loads most of Rails and\n  # your application in memory, allowing both threaded web servers\n  # and those relying on copy on write to perform better.\n  # Rake tasks automatically ignore this option for performance.\n  config.eager_load = true\n\n  # Full error reports are disabled and caching is turned on.\n  config.consider_all_requests_local = false\n  config.action_controller.perform_caching = true\n\n  # Ensures that a master key has been made available in ENV[\"RAILS_MASTER_KEY\"], config/master.key, or an environment\n  # key such as config/credentials/production.key. This key is used to decrypt credentials (and other encrypted files).\n  # config.require_master_key = true\n\n  # Disable serving static files from `public/`, relying on NGINX/Apache to do so instead.\n  # config.public_file_server.enabled = false\n\n  # Compress CSS using a preprocessor.\n  # config.assets.css_compressor = :sass\n\n  # Do not fallback to assets pipeline if a precompiled asset is missed.\n  config.assets.compile = false\n\n  # Enable serving of images, stylesheets, and JavaScripts from an asset server.\n  # config.asset_host = \"http://assets.example.com\"\n\n  # Specifies the header that your server uses for sending files.\n  # config.action_dispatch.x_sendfile_header = \"X-Sendfile\" # for Apache\n  # config.action_dispatch.x_sendfile_header = \"X-Accel-Redirect\" # for NGINX\n\n  # Store uploaded files on the local file system (see config/storage.yml for options).\n  config.active_storage.service = :local\n\n  # Mount Action Cable outside main process or domain.\n  # config.action_cable.mount_path = nil\n  # config.action_cable.url = \"wss://example.com/cable\"\n  # config.action_cable.allowed_request_origins = [ \"http://example.com\", /http:\\/\\/example.*/ ]\n\n  # Assume all access to the app is happening through a SSL-terminating reverse proxy.\n  # Can be used together with config.force_ssl for Strict-Transport-Security and secure cookies.\n  # config.assume_ssl = true\n\n  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.\n  config.force_ssl = true\n\n  # Log to STDOUT by default\n  config.logger = ActiveSupport::Logger.new(STDOUT)\n    .tap  { |logger| logger.formatter = ::Logger::Formatter.new }\n    .then { |logger| ActiveSupport::TaggedLogging.new(logger) }\n\n  # Prepend all log lines with the following tags.\n  config.log_tags = [ :request_id ]\n\n  # Info include generic and useful information about system operation, but avoids logging too much\n  # information to avoid inadvertent exposure of personally identifiable information (PII). If you\n  # want to log everything, set the level to \"debug\".\n  config.log_level = ENV.fetch(\"RAILS_LOG_LEVEL\", \"info\")\n\n  # Use a different cache store in production.\n  # config.cache_store = :mem_cache_store\n\n  # Use a real queuing backend for Active Job (and separate queues per environment).\n  # config.active_job.queue_adapter = :resque\n  # config.active_job.queue_name_prefix = \"next_production\"\n\n  config.action_mailer.perform_caching = false\n\n  # Ignore bad email addresses and do not raise email delivery errors.\n  # Set this to true and configure the email server for immediate delivery to raise delivery errors.\n  # config.action_mailer.raise_delivery_errors = false\n\n  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to\n  # the I18n.default_locale when a translation cannot be found).\n  config.i18n.fallbacks = true\n\n  # Don't log any deprecations.\n  config.active_support.report_deprecations = false\n\n  # Do not dump schema after migrations.\n  config.active_record.dump_schema_after_migration = false\n\n  # Enable DNS rebinding protection and other `Host` header attacks.\n  # config.hosts = [\n  #   \"example.com\",     # Allow requests from example.com\n  #   /.*\\.example\\.com/ # Allow requests from subdomains like `www.example.com`\n  # ]\n  # Skip DNS rebinding protection for the default health check endpoint.\n  # config.host_authorization = { exclude: ->(request) { request.path == \"/up\" } }\nend\n"
  },
  {
    "path": "config/environments/test.rb",
    "content": "require \"active_support/core_ext/integer/time\"\n\n# The test environment is used exclusively to run your application's\n# test suite. You never need to work with it otherwise. Remember that\n# your test database is \"scratch space\" for the test suite and is wiped\n# and recreated between test runs. Don't rely on the data there!\n\nRails.application.configure do\n  # Settings specified here will take precedence over those in config/application.rb.\n\n  # While tests run files are not watched, reloading is not necessary.\n  config.enable_reloading = false\n\n  # Eager loading loads your entire application. When running a single test locally,\n  # this is usually not necessary, and can slow down your test suite. However, it's\n  # recommended that you enable it in continuous integration systems to ensure eager\n  # loading is working properly before deploying your code.\n  config.eager_load = ENV[\"CI\"].present?\n\n  # Configure public file server for tests with Cache-Control for performance.\n  config.public_file_server.enabled = true\n  config.public_file_server.headers = {\n    \"Cache-Control\" => \"public, max-age=#{1.hour.to_i}\"\n  }\n\n  # Show full error reports and disable caching.\n  config.consider_all_requests_local = true\n  config.action_controller.perform_caching = false\n  config.cache_store = :null_store\n\n  # Render exception templates for rescuable exceptions and raise for other exceptions.\n  config.action_dispatch.show_exceptions = :rescuable\n\n  # Disable request forgery protection in test environment.\n  config.action_controller.allow_forgery_protection = false\n\n  # Store uploaded files on the local file system in a temporary directory.\n  config.active_storage.service = :test\n\n  config.action_mailer.perform_caching = false\n\n  # Tell Action Mailer not to deliver emails to the real world.\n  # The :test delivery method accumulates sent emails in the\n  # ActionMailer::Base.deliveries array.\n  config.action_mailer.delivery_method = :test\n\n  # Print deprecation notices to the stderr.\n  config.active_support.deprecation = :stderr\n\n  # Raise exceptions for disallowed deprecations.\n  config.active_support.disallowed_deprecation = :raise\n\n  # Tell Active Support which deprecation messages to disallow.\n  config.active_support.disallowed_deprecation_warnings = []\n\n  # Raises error for missing translations.\n  # config.i18n.raise_on_missing_translations = true\n\n  # Annotate rendered view with file names.\n  # config.action_view.annotate_rendered_view_with_filenames = true\n\n  # Raise error when a before_action's only/except options reference missing actions\n  config.action_controller.raise_on_missing_callback_actions = true\nend\n"
  },
  {
    "path": "config/importmap.rb",
    "content": "# Pin npm packages by running ./bin/importmap\n\npin \"application\", preload: true\npin \"@hotwired/turbo-rails\", to: \"turbo.min.js\", preload: true\npin \"@hotwired/stimulus\", to: \"stimulus.min.js\", preload: true\npin \"@hotwired/stimulus-loading\", to: \"stimulus-loading.js\", preload: true\npin_all_from \"app/javascript/controllers\", under: \"controllers\"\n"
  },
  {
    "path": "config/initializers/assets.rb",
    "content": "# Be sure to restart your server when you modify this file.\n\n# Version of your assets, change this if you want to expire all your assets.\nRails.application.config.assets.version = \"1.0\"\n\n# Add additional assets to the asset load path.\n# Rails.application.config.assets.paths << Emoji.images_path\n\n# Precompile additional assets.\n# application.js, application.css, and all non-JS/CSS in the app/assets\n# folder are already added.\n# Rails.application.config.assets.precompile += %w( admin.js admin.css )\n"
  },
  {
    "path": "config/initializers/content_security_policy.rb",
    "content": "# Be sure to restart your server when you modify this file.\n\n# Define an application-wide content security policy.\n# See the Securing Rails Applications Guide for more information:\n# https://guides.rubyonrails.org/security.html#content-security-policy-header\n\n# Rails.application.configure do\n#   config.content_security_policy do |policy|\n#     policy.default_src :self, :https\n#     policy.font_src    :self, :https, :data\n#     policy.img_src     :self, :https, :data\n#     policy.object_src  :none\n#     policy.script_src  :self, :https\n#     policy.style_src   :self, :https\n#     # Specify URI for violation reports\n#     # policy.report_uri \"/csp-violation-report-endpoint\"\n#   end\n#\n#   # Generate session nonces for permitted importmap, inline scripts, and inline styles.\n#   config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s }\n#   config.content_security_policy_nonce_directives = %w(script-src style-src)\n#\n#   # Report violations without enforcing the policy.\n#   # config.content_security_policy_report_only = true\n# end\n"
  },
  {
    "path": "config/initializers/cypress_rails_initializer.rb",
    "content": "return unless Rails.env.test?\n#require \"./lib/external_service\"\n\nRails.application.load_tasks unless defined?(Rake::Task)\n\nCypressRails.hooks.before_server_start do\n  # Add our fixtures before the resettable transaction is started\n  Rake::Task[\"db:fixtures:load\"].invoke\nend\n\nCypressRails.hooks.after_server_start do\n  # Start up external service\n  #ExternalService.start_service\nend\n\nCypressRails.hooks.after_transaction_start do\n  # After each transaction, add this compliment (will be rolled back on reset)\n  #Compliment.create(text: \"You are courageous\")\nend\n\nCypressRails.hooks.after_state_reset do\n  # if Compliment.count != 4\n  #   raise \"Wait I was expecting exactly 4 compliments!\"\n  # end\nend\n\nCypressRails.hooks.before_server_stop do\n  # Purge and reload the test database so we don't leave our fixtures in there\n  Rake::Task[\"db:test:prepare\"].invoke\nend"
  },
  {
    "path": "config/initializers/devise.rb",
    "content": "# frozen_string_literal: true\n\n# Assuming you have not yet modified this file, each configuration option below\n# is set to its default value. Note that some are commented out while others\n# are not: uncommented lines are intended to protect your configuration from\n# breaking changes in upgrades (i.e., in the event that future versions of\n# Devise change the default values for those options).\n#\n# Use this hook to configure devise mailer, warden hooks and so forth.\n# Many of these configuration options can be set straight in your model.\nDevise.setup do |config|\n  # The secret key used by Devise. Devise uses this key to generate\n  # random tokens. Changing this key will render invalid all existing\n  # confirmation, reset password and unlock tokens in the database.\n  # Devise will use the `secret_key_base` as its `secret_key`\n  # by default. You can change it below and use your own secret key.\n  # config.secret_key = 'fe7dbda89d8b5e2b6f07c0b413456bb1ab362afc0bf446ddfe789c0819a46d2f14a779adc845025ac3db2900b0167c7b028b400c4343a1536ae7e1695cef1a66'\n\n  # ==> Controller configuration\n  # Configure the parent class to the devise controllers.\n  # config.parent_controller = 'DeviseController'\n\n  # ==> Mailer Configuration\n  # Configure the e-mail address which will be shown in Devise::Mailer,\n  # note that it will be overwritten if you use your own mailer class\n  # with default \"from\" parameter.\n  config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com'\n\n  # Configure the class responsible to send e-mails.\n  # config.mailer = 'Devise::Mailer'\n\n  # Configure the parent class responsible to send e-mails.\n  # config.parent_mailer = 'ActionMailer::Base'\n\n  # ==> ORM configuration\n  # Load and configure the ORM. Supports :active_record (default) and\n  # :mongoid (bson_ext recommended) by default. Other ORMs may be\n  # available as additional gems.\n  require 'devise/orm/active_record'\n\n  # ==> Configuration for any authentication mechanism\n  # Configure which keys are used when authenticating a user. The default is\n  # just :email. You can configure it to use [:username, :subdomain], so for\n  # authenticating a user, both parameters are required. Remember that those\n  # parameters are used only when authenticating and not when retrieving from\n  # session. If you need permissions, you should implement that in a before filter.\n  # You can also supply a hash where the value is a boolean determining whether\n  # or not authentication should be aborted when the value is not present.\n  # config.authentication_keys = [:email]\n\n  # Configure parameters from the request object used for authentication. Each entry\n  # given should be a request method and it will automatically be passed to the\n  # find_for_authentication method and considered in your model lookup. For instance,\n  # if you set :request_keys to [:subdomain], :subdomain will be used on authentication.\n  # The same considerations mentioned for authentication_keys also apply to request_keys.\n  # config.request_keys = []\n\n  # Configure which authentication keys should be case-insensitive.\n  # These keys will be downcased upon creating or modifying a user and when used\n  # to authenticate or find a user. Default is :email.\n  config.case_insensitive_keys = [:email]\n\n  # Configure which authentication keys should have whitespace stripped.\n  # These keys will have whitespace before and after removed upon creating or\n  # modifying a user and when used to authenticate or find a user. Default is :email.\n  config.strip_whitespace_keys = [:email]\n\n  # Tell if authentication through request.params is enabled. True by default.\n  # It can be set to an array that will enable params authentication only for the\n  # given strategies, for example, `config.params_authenticatable = [:database]` will\n  # enable it only for database (email + password) authentication.\n  # config.params_authenticatable = true\n\n  # Tell if authentication through HTTP Auth is enabled. False by default.\n  # It can be set to an array that will enable http authentication only for the\n  # given strategies, for example, `config.http_authenticatable = [:database]` will\n  # enable it only for database authentication.\n  # For API-only applications to support authentication \"out-of-the-box\", you will likely want to\n  # enable this with :database unless you are using a custom strategy.\n  # The supported strategies are:\n  # :database      = Support basic authentication with authentication key + password\n  # config.http_authenticatable = false\n\n  # If 401 status code should be returned for AJAX requests. True by default.\n  # config.http_authenticatable_on_xhr = true\n\n  # The realm used in Http Basic Authentication. 'Application' by default.\n  # config.http_authentication_realm = 'Application'\n\n  # It will change confirmation, password recovery and other workflows\n  # to behave the same regardless if the e-mail provided was right or wrong.\n  # Does not affect registerable.\n  # config.paranoid = true\n\n  # By default Devise will store the user in session. You can skip storage for\n  # particular strategies by setting this option.\n  # Notice that if you are skipping storage for all authentication paths, you\n  # may want to disable generating routes to Devise's sessions controller by\n  # passing skip: :sessions to `devise_for` in your config/routes.rb\n  config.skip_session_storage = [:http_auth]\n\n  # By default, Devise cleans up the CSRF token on authentication to\n  # avoid CSRF token fixation attacks. This means that, when using AJAX\n  # requests for sign in and sign up, you need to get a new CSRF token\n  # from the server. You can disable this option at your own risk.\n  # config.clean_up_csrf_token_on_authentication = true\n\n  # When false, Devise will not attempt to reload routes on eager load.\n  # This can reduce the time taken to boot the app but if your application\n  # requires the Devise mappings to be loaded during boot time the application\n  # won't boot properly.\n  # config.reload_routes = true\n\n  # ==> Configuration for :database_authenticatable\n  # For bcrypt, this is the cost for hashing the password and defaults to 12. If\n  # using other algorithms, it sets how many times you want the password to be hashed.\n  # The number of stretches used for generating the hashed password are stored\n  # with the hashed password. This allows you to change the stretches without\n  # invalidating existing passwords.\n  #\n  # Limiting the stretches to just one in testing will increase the performance of\n  # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use\n  # a value less than 10 in other environments. Note that, for bcrypt (the default\n  # algorithm), the cost increases exponentially with the number of stretches (e.g.\n  # a value of 20 is already extremely slow: approx. 60 seconds for 1 calculation).\n  config.stretches = Rails.env.test? ? 1 : 12\n\n  # Set up a pepper to generate the hashed password.\n  # config.pepper = '8f57964ea0a55bf7585f2098daf8877ad19337cb2c530ffc776f792f0a13be6648060a3e0696b9652cf748a033fb512df777b2cf36f2423f6a7a4e17181c3c26'\n\n  # Send a notification to the original email when the user's email is changed.\n  # config.send_email_changed_notification = false\n\n  # Send a notification email when the user's password is changed.\n  # config.send_password_change_notification = false\n\n  # ==> Configuration for :confirmable\n  # A period that the user is allowed to access the website even without\n  # confirming their account. For instance, if set to 2.days, the user will be\n  # able to access the website for two days without confirming their account,\n  # access will be blocked just in the third day.\n  # You can also set it to nil, which will allow the user to access the website\n  # without confirming their account.\n  # Default is 0.days, meaning the user cannot access the website without\n  # confirming their account.\n  # config.allow_unconfirmed_access_for = 2.days\n\n  # A period that the user is allowed to confirm their account before their\n  # token becomes invalid. For example, if set to 3.days, the user can confirm\n  # their account within 3 days after the mail was sent, but on the fourth day\n  # their account can't be confirmed with the token any more.\n  # Default is nil, meaning there is no restriction on how long a user can take\n  # before confirming their account.\n  # config.confirm_within = 3.days\n\n  # If true, requires any email changes to be confirmed (exactly the same way as\n  # initial account confirmation) to be applied. Requires additional unconfirmed_email\n  # db field (see migrations). Until confirmed, new email is stored in\n  # unconfirmed_email column, and copied to email column on successful confirmation.\n  config.reconfirmable = true\n\n  # Defines which key will be used when confirming an account\n  # config.confirmation_keys = [:email]\n\n  # ==> Configuration for :rememberable\n  # The time the user will be remembered without asking for credentials again.\n  # config.remember_for = 2.weeks\n\n  # Invalidates all the remember me tokens when the user signs out.\n  config.expire_all_remember_me_on_sign_out = true\n\n  # If true, extends the user's remember period when remembered via cookie.\n  # config.extend_remember_period = false\n\n  # Options to be passed to the created cookie. For instance, you can set\n  # secure: true in order to force SSL only cookies.\n  # config.rememberable_options = {}\n\n  # ==> Configuration for :validatable\n  # Range for password length.\n  config.password_length = 6..128\n\n  # Email regex used to validate email formats. It simply asserts that\n  # one (and only one) @ exists in the given string. This is mainly\n  # to give user feedback and not to assert the e-mail validity.\n  config.email_regexp = /\\A[^@\\s]+@[^@\\s]+\\z/\n\n  # ==> Configuration for :timeoutable\n  # The time you want to timeout the user session without activity. After this\n  # time the user will be asked for credentials again. Default is 30 minutes.\n  # config.timeout_in = 30.minutes\n\n  # ==> Configuration for :lockable\n  # Defines which strategy will be used to lock an account.\n  # :failed_attempts = Locks an account after a number of failed attempts to sign in.\n  # :none            = No lock strategy. You should handle locking by yourself.\n  # config.lock_strategy = :failed_attempts\n\n  # Defines which key will be used when locking and unlocking an account\n  # config.unlock_keys = [:email]\n\n  # Defines which strategy will be used to unlock an account.\n  # :email = Sends an unlock link to the user email\n  # :time  = Re-enables login after a certain amount of time (see :unlock_in below)\n  # :both  = Enables both strategies\n  # :none  = No unlock strategy. You should handle unlocking by yourself.\n  # config.unlock_strategy = :both\n\n  # Number of authentication tries before locking an account if lock_strategy\n  # is failed attempts.\n  # config.maximum_attempts = 20\n\n  # Time interval to unlock the account if :time is enabled as unlock_strategy.\n  # config.unlock_in = 1.hour\n\n  # Warn on the last attempt before the account is locked.\n  # config.last_attempt_warning = true\n\n  # ==> Configuration for :recoverable\n  #\n  # Defines which key will be used when recovering the password for an account\n  # config.reset_password_keys = [:email]\n\n  # Time interval you can reset your password with a reset password key.\n  # Don't put a too small interval or your users won't have the time to\n  # change their passwords.\n  config.reset_password_within = 6.hours\n\n  # When set to false, does not sign a user in automatically after their password is\n  # reset. Defaults to true, so a user is signed in automatically after a reset.\n  # config.sign_in_after_reset_password = true\n\n  # ==> Configuration for :encryptable\n  # Allow you to use another hashing or encryption algorithm besides bcrypt (default).\n  # You can use :sha1, :sha512 or algorithms from others authentication tools as\n  # :clearance_sha1, :authlogic_sha512 (then you should set stretches above to 20\n  # for default behavior) and :restful_authentication_sha1 (then you should set\n  # stretches to 10, and copy REST_AUTH_SITE_KEY to pepper).\n  #\n  # Require the `devise-encryptable` gem when using anything other than bcrypt\n  # config.encryptor = :sha512\n\n  # ==> Scopes configuration\n  # Turn scoped views on. Before rendering \"sessions/new\", it will first check for\n  # \"users/sessions/new\". It's turned off by default because it's slower if you\n  # are using only default views.\n  # config.scoped_views = false\n\n  # Configure the default scope given to Warden. By default it's the first\n  # devise role declared in your routes (usually :user).\n  # config.default_scope = :user\n\n  # Set this configuration to false if you want /users/sign_out to sign out\n  # only the current scope. By default, Devise signs out all scopes.\n  # config.sign_out_all_scopes = true\n\n  # ==> Navigation configuration\n  # Lists the formats that should be treated as navigational. Formats like\n  # :html, should redirect to the sign in page when the user does not have\n  # access, but formats like :xml or :json, should return 401.\n  #\n  # If you have any extra navigational formats, like :iphone or :mobile, you\n  # should add them to the navigational formats lists.\n  #\n  # The \"*/*\" below is required to match Internet Explorer requests.\n  # config.navigational_formats = ['*/*', :html]\n\n  # The default HTTP method used to sign out a resource. Default is :delete.\n  config.sign_out_via = :get\n\n  # ==> OmniAuth\n  # Add a new OmniAuth provider. Check the wiki for more information on setting\n  # up on your models and hooks.\n  # config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo'\n\n  # ==> Warden configuration\n  # If you want to use other strategies, that are not supported by Devise, or\n  # change the failure app, you can configure them inside the config.warden block.\n  #\n  # config.warden do |manager|\n  #   manager.intercept_401 = false\n  #   manager.default_strategies(scope: :user).unshift :some_external_strategy\n  # end\n\n  # ==> Mountable engine configurations\n  # When using Devise inside an engine, let's call it `MyEngine`, and this engine\n  # is mountable, there are some extra configurations to be taken into account.\n  # The following options are available, assuming the engine is mounted as:\n  #\n  #     mount MyEngine, at: '/my_engine'\n  #\n  # The router that invoked `devise_for`, in the example above, would be:\n  # config.router_name = :my_engine\n  #\n  # When using OmniAuth, Devise cannot automatically set OmniAuth path,\n  # so you need to do it manually. For the users scope, it would be:\n  # config.omniauth_path_prefix = '/my_engine/users/auth'\n\n  # ==> Turbolinks configuration\n  # If your app is using Turbolinks, Turbolinks::Controller needs to be included to make redirection work correctly:\n  #\n  # ActiveSupport.on_load(:devise_failure_app) do\n  #   include Turbolinks::Controller\n  # end\n\n  # ==> Configuration for :registerable\n\n  # When set to false, does not sign a user in automatically after their password is\n  # changed. Defaults to true, so a user is signed in automatically after changing a password.\n  # config.sign_in_after_change_password = true\nend\n"
  },
  {
    "path": "config/initializers/filter_parameter_logging.rb",
    "content": "# Be sure to restart your server when you modify this file.\n\n# Configure parameters to be partially matched (e.g. passw matches password) and filtered from the log file.\n# Use this to limit dissemination of sensitive information.\n# See the ActiveSupport::ParameterFilter documentation for supported notations and behaviors.\nRails.application.config.filter_parameters += [\n  :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn\n]\n"
  },
  {
    "path": "config/initializers/inflections.rb",
    "content": "# Be sure to restart your server when you modify this file.\n\n# Add new inflection rules using the following format. Inflections\n# are locale specific, and you may define rules for as many different\n# locales as you wish. All of these examples are active by default:\n# ActiveSupport::Inflector.inflections(:en) do |inflect|\n#   inflect.plural /^(ox)$/i, \"\\\\1en\"\n#   inflect.singular /^(ox)en/i, \"\\\\1\"\n#   inflect.irregular \"person\", \"people\"\n#   inflect.uncountable %w( fish sheep )\n# end\n\n# These inflection rules are supported but not enabled by default:\n# ActiveSupport::Inflector.inflections(:en) do |inflect|\n#   inflect.acronym \"RESTful\"\n# end\n"
  },
  {
    "path": "config/initializers/locales.rb",
    "content": "I18n.available_locales = [:en, :fr]"
  },
  {
    "path": "config/initializers/new_framework_defaults_7_1.rb",
    "content": "# Be sure to restart your server when you modify this file.\n#\n# This file eases your Rails 7.1 framework defaults upgrade.\n#\n# Uncomment each configuration one by one to switch to the new default.\n# Once your application is ready to run with all new defaults, you can remove\n# this file and set the `config.load_defaults` to `7.1`.\n#\n# Read the Guide for Upgrading Ruby on Rails for more info on each option.\n# https://guides.rubyonrails.org/upgrading_ruby_on_rails.html\n\n###\n# No longer add autoloaded paths into `$LOAD_PATH`. This means that you won't be able\n# to manually require files that are managed by the autoloader, which you shouldn't do anyway.\n#\n# This will reduce the size of the load path, making `require` faster if you don't use bootsnap, or reduce the size\n# of the bootsnap cache if you use it.\n#++\n# Rails.application.config.add_autoload_paths_to_load_path = false\n\n###\n# Remove the default X-Download-Options headers since it is used only by Internet Explorer.\n# If you need to support Internet Explorer, add back `\"X-Download-Options\" => \"noopen\"`.\n#++\n# Rails.application.config.action_dispatch.default_headers = {\n#   \"X-Frame-Options\" => \"SAMEORIGIN\",\n#   \"X-XSS-Protection\" => \"0\",\n#   \"X-Content-Type-Options\" => \"nosniff\",\n#   \"X-Permitted-Cross-Domain-Policies\" => \"none\",\n#   \"Referrer-Policy\" => \"strict-origin-when-cross-origin\"\n# }\n\n###\n# Do not treat an `ActionController::Parameters` instance\n# as equal to an equivalent `Hash` by default.\n#++\n# Rails.application.config.action_controller.allow_deprecated_parameters_hash_equality = false\n\n###\n# Active Record Encryption now uses SHA-256 as its hash digest algorithm.\n# \n# There are 3 scenarios to consider.\n#\n# 1. If you have data encrypted with previous Rails versions, and you have\n# +config.active_support.key_generator_hash_digest_class+ configured as SHA1 (the default\n# before Rails 7.0), you need to configure SHA-1 for Active Record Encryption too:\n#++\n# Rails.application.config.active_record.encryption.hash_digest_class = OpenSSL::Digest::SHA1\n#\n# 2. If you have +config.active_support.key_generator_hash_digest_class+ configured as SHA256 (the new default\n# in 7.0), then you need to configure SHA-256 for Active Record Encryption:\n#++\n# Rails.application.config.active_record.encryption.hash_digest_class = OpenSSL::Digest::SHA256\n#\n# 3. If you don't currently have data encrypted with Active Record encryption, you can disable this setting to\n# configure the default behavior starting 7.1+:\n#++\n# Rails.application.config.active_record.encryption.support_sha1_for_non_deterministic_encryption = false\n\n###\n# No longer run after_commit callbacks on the first of multiple Active Record\n# instances to save changes to the same database row within a transaction.\n# Instead, run these callbacks on the instance most likely to have internal\n# state which matches what was committed to the database, typically the last\n# instance to save.\n#++\n# Rails.application.config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction = false\n\n###\n# Configures SQLite with a strict strings mode, which disables double-quoted string literals.\n#\n# SQLite has some quirks around double-quoted string literals.\n# It first tries to consider double-quoted strings as identifier names, but if they don't exist\n# it then considers them as string literals. Because of this, typos can silently go unnoticed.\n# For example, it is possible to create an index for a non existing column.\n# See https://www.sqlite.org/quirks.html#double_quoted_string_literals_are_accepted for more details.\n#++\n# Rails.application.config.active_record.sqlite3_adapter_strict_strings_by_default = true\n\n###\n# Disable deprecated singular associations names.\n#++\n# Rails.application.config.active_record.allow_deprecated_singular_associations_name = false\n\n###\n# Enable the Active Job `BigDecimal` argument serializer, which guarantees\n# roundtripping. Without this serializer, some queue adapters may serialize\n# `BigDecimal` arguments as simple (non-roundtrippable) strings.\n#\n# When deploying an application with multiple replicas, old (pre-Rails 7.1)\n# replicas will not be able to deserialize `BigDecimal` arguments from this\n# serializer. Therefore, this setting should only be enabled after all replicas\n# have been successfully upgraded to Rails 7.1.\n#++\n# Rails.application.config.active_job.use_big_decimal_serializer = true\n\n###\n# Specify if an `ArgumentError` should be raised if `Rails.cache` `fetch` or\n# `write` are given an invalid `expires_at` or `expires_in` time.\n# Options are `true`, and `false`. If `false`, the exception will be reported\n# as `handled` and logged instead.\n#++\n# Rails.application.config.active_support.raise_on_invalid_cache_expiration_time = true\n\n###\n# Specify whether Query Logs will format tags using the SQLCommenter format\n# (https://open-telemetry.github.io/opentelemetry-sqlcommenter/), or using the legacy format.\n# Options are `:legacy` and `:sqlcommenter`.\n#++\n# Rails.application.config.active_record.query_log_tags_format = :sqlcommenter\n\n###\n# Specify the default serializer used by `MessageEncryptor` and `MessageVerifier`\n# instances.\n#\n# The legacy default is `:marshal`, which is a potential vector for\n# deserialization attacks in cases where a message signing secret has been\n# leaked.\n#\n# In Rails 7.1, the new default is `:json_allow_marshal` which serializes and\n# deserializes with `ActiveSupport::JSON`, but can fall back to deserializing\n# with `Marshal` so that legacy messages can still be read.\n#\n# In Rails 7.2, the default will become `:json` which serializes and\n# deserializes with `ActiveSupport::JSON` only.\n#\n# Alternatively, you can choose `:message_pack` or `:message_pack_allow_marshal`,\n# which serialize with `ActiveSupport::MessagePack`. `ActiveSupport::MessagePack`\n# can roundtrip some Ruby types that are not supported by JSON, and may provide\n# improved performance, but it requires the `msgpack` gem.\n#\n# For more information, see\n# https://guides.rubyonrails.org/v7.1/configuring.html#config-active-support-message-serializer\n#\n# If you are performing a rolling deploy of a Rails 7.1 upgrade, wherein servers\n# that have not yet been upgraded must be able to read messages from upgraded\n# servers, first deploy without changing the serializer, then set the serializer\n# in a subsequent deploy.\n#++\n# Rails.application.config.active_support.message_serializer = :json_allow_marshal\n\n###\n# Enable a performance optimization that serializes message data and metadata\n# together. This changes the message format, so messages serialized this way\n# cannot be read by older versions of Rails. However, messages that use the old\n# format can still be read, regardless of whether this optimization is enabled.\n#\n# To perform a rolling deploy of a Rails 7.1 upgrade, wherein servers that have\n# not yet been upgraded must be able to read messages from upgraded servers,\n# leave this optimization off on the first deploy, then enable it on a\n# subsequent deploy.\n#++\n# Rails.application.config.active_support.use_message_serializer_for_metadata = true\n\n###\n# Set the maximum size for Rails log files.\n#\n# `config.load_defaults 7.1` does not set this value for environments other than\n# development and test.\n#++\n# if Rails.env.local?\n#   Rails.application.config.log_file_size = 100 * 1024 * 1024\n# end\n\n###\n# Enable raising on assignment to attr_readonly attributes. The previous\n# behavior would allow assignment but silently not persist changes to the\n# database.\n#++\n# Rails.application.config.active_record.raise_on_assign_to_attr_readonly = true\n\n###\n# Enable validating only parent-related columns for presence when the parent is mandatory.\n# The previous behavior was to validate the presence of the parent record, which performed an extra query\n# to get the parent every time the child record was updated, even when parent has not changed.\n#++\n# Rails.application.config.active_record.belongs_to_required_validates_foreign_key = false\n\n###\n# Enable precompilation of `config.filter_parameters`. Precompilation can\n# improve filtering performance, depending on the quantity and types of filters.\n#++\n# Rails.application.config.precompile_filter_parameters = true\n\n###\n# Enable before_committed! callbacks on all enrolled records in a transaction.\n# The previous behavior was to only run the callbacks on the first copy of a record\n# if there were multiple copies of the same record enrolled in the transaction.\n#++\n# Rails.application.config.active_record.before_committed_on_all_records = true\n\n###\n# Disable automatic column serialization into YAML.\n# To keep the historic behavior, you can set it to `YAML`, however it is\n# recommended to explicitly define the serialization method for each column\n# rather than to rely on a global default.\n#++\n# Rails.application.config.active_record.default_column_serializer = nil\n\n###\n# Enable a performance optimization that serializes Active Record models\n# in a faster and more compact way.\n#\n# To perform a rolling deploy of a Rails 7.1 upgrade, wherein servers that have\n# not yet been upgraded must be able to read caches from upgraded servers,\n# leave this optimization off on the first deploy, then enable it on a\n# subsequent deploy.\n#++\n# Rails.application.config.active_record.marshalling_format_version = 7.1\n\n###\n# Run `after_commit` and `after_*_commit` callbacks in the order they are defined in a model.\n# This matches the behaviour of all other callbacks.\n# In previous versions of Rails, they ran in the inverse order.\n#++\n# Rails.application.config.active_record.run_after_transaction_callbacks_in_order_defined = true\n\n###\n# Whether a `transaction` block is committed or rolled back when exited via `return`, `break` or `throw`.\n#++\n# Rails.application.config.active_record.commit_transaction_on_non_local_return = true\n\n###\n# Controls when to generate a value for <tt>has_secure_token</tt> declarations.\n#++\n# Rails.application.config.active_record.generate_secure_token_on = :initialize\n\n###\n# ** Please read carefully, this must be configured in config/application.rb **\n#\n# Change the format of the cache entry.\n#\n# Changing this default means that all new cache entries added to the cache\n# will have a different format that is not supported by Rails 7.0\n# applications.\n#\n# Only change this value after your application is fully deployed to Rails 7.1\n# and you have no plans to rollback.\n# When you're ready to change format, add this to `config/application.rb` (NOT\n# this file):\n#   config.active_support.cache_format_version = 7.1\n\n\n###\n# Configure Action View to use HTML5 standards-compliant sanitizers when they are supported on your\n# platform.\n#\n# `Rails::HTML::Sanitizer.best_supported_vendor` will cause Action View to use HTML5-compliant\n# sanitizers if they are supported, else fall back to HTML4 sanitizers.\n#\n# In previous versions of Rails, Action View always used `Rails::HTML4::Sanitizer` as its vendor.\n#++\n# Rails.application.config.action_view.sanitizer_vendor = Rails::HTML::Sanitizer.best_supported_vendor\n\n\n###\n# Configure Action Text to use an HTML5 standards-compliant sanitizer when it is supported on your\n# platform.\n#\n# `Rails::HTML::Sanitizer.best_supported_vendor` will cause Action Text to use HTML5-compliant\n# sanitizers if they are supported, else fall back to HTML4 sanitizers.\n#\n# In previous versions of Rails, Action Text always used `Rails::HTML4::Sanitizer` as its vendor.\n#++\n# Rails.application.config.action_text.sanitizer_vendor = Rails::HTML::Sanitizer.best_supported_vendor\n\n\n###\n# Configure the log level used by the DebugExceptions middleware when logging\n# uncaught exceptions during requests.\n#++\n# Rails.application.config.action_dispatch.debug_exception_log_level = :error\n\n\n###\n# Configure the test helpers in Action View, Action Dispatch, and rails-dom-testing to use HTML5\n# parsers.\n#\n# Nokogiri::HTML5 isn't supported on JRuby, so JRuby applications must set this to :html4.\n#\n# In previous versions of Rails, these test helpers always used an HTML4 parser.\n#++\n# Rails.application.config.dom_testing_default_html_version = :html5\n"
  },
  {
    "path": "config/initializers/permissions_policy.rb",
    "content": "# Be sure to restart your server when you modify this file.\n\n# Define an application-wide HTTP permissions policy. For further\n# information see: https://developers.google.com/web/updates/2018/06/feature-policy\n\n# Rails.application.config.permissions_policy do |policy|\n#   policy.camera      :none\n#   policy.gyroscope   :none\n#   policy.microphone  :none\n#   policy.usb         :none\n#   policy.fullscreen  :self\n#   policy.payment     :self, \"https://secure.example.com\"\n# end\n"
  },
  {
    "path": "config/locales/devise.en.yml",
    "content": "# Additional translations at https://github.com/plataformatec/devise/wiki/I18n\n\nen:\n  devise:\n    confirmations:\n      confirmed: \"Your email address has been successfully confirmed.\"\n      send_instructions: \"You will receive an email with instructions for how to confirm your email address in a few minutes.\"\n      send_paranoid_instructions: \"If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes.\"\n    failure:\n      already_authenticated: \"You are already signed in.\"\n      inactive: \"Your account is not activated yet.\"\n      invalid: \"Invalid %{authentication_keys} or password.\"\n      locked: \"Your account is locked.\"\n      last_attempt: \"You have one more attempt before your account is locked.\"\n      not_found_in_database: \"Invalid %{authentication_keys} or password.\"\n      timeout: \"Your session expired. Please sign in again to continue.\"\n      unauthenticated: \"You need to sign in or sign up before continuing.\"\n      unconfirmed: \"You have to confirm your email address before continuing.\"\n    mailer:\n      confirmation_instructions:\n        subject: \"Confirmation instructions\"\n      reset_password_instructions:\n        subject: \"Reset password instructions\"\n      unlock_instructions:\n        subject: \"Unlock instructions\"\n      email_changed:\n        subject: \"Email Changed\"\n      password_change:\n        subject: \"Password Changed\"\n    omniauth_callbacks:\n      failure: \"Could not authenticate you from %{kind} because \\\"%{reason}\\\".\"\n      success: \"Successfully authenticated from %{kind} account.\"\n    passwords:\n      no_token: \"You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\"\n      send_instructions: \"You will receive an email with instructions on how to reset your password in a few minutes.\"\n      send_paranoid_instructions: \"If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes.\"\n      updated: \"Your password has been changed successfully. You are now signed in.\"\n      updated_not_active: \"Your password has been changed successfully.\"\n    registrations:\n      destroyed: \"Bye! Your account has been successfully cancelled. We hope to see you again soon.\"\n      signed_up: \"Welcome! You have signed up successfully.\"\n      signed_up_but_inactive: \"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\"\n      signed_up_but_locked: \"You have signed up successfully. However, we could not sign you in because your account is locked.\"\n      signed_up_but_unconfirmed: \"A message with a confirmation link has been sent to your email address. Please follow the link to activate your account.\"\n      update_needs_confirmation: \"You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address.\"\n      updated: \"Your account has been updated successfully.\"\n    sessions:\n      signed_in: \"Signed in successfully.\"\n      signed_out: \"Signed out successfully.\"\n      already_signed_out: \"Signed out successfully.\"\n    unlocks:\n      send_instructions: \"You will receive an email with instructions for how to unlock your account in a few minutes.\"\n      send_paranoid_instructions: \"If your account exists, you will receive an email with instructions for how to unlock it in a few minutes.\"\n      unlocked: \"Your account has been unlocked successfully. Please sign in to continue.\"\n  errors:\n    messages:\n      already_confirmed: \"was already confirmed, please try signing in\"\n      confirmation_period_expired: \"needs to be confirmed within %{period}, please request a new one\"\n      expired: \"has expired, please request a new one\"\n      not_found: \"not found\"\n      not_locked: \"was not locked\"\n      not_saved:\n        one: \"1 error prohibited this %{resource} from being saved:\"\n        other: \"%{count} errors prohibited this %{resource} from being saved:\"\n"
  },
  {
    "path": "config/locales/en.yml",
    "content": "en:\n  time:\n    formats:\n      default: \"%B %d %Y %H:%M\"\n  bands:\n    rolling_stones: \"The Rolling Stones\"\n    beatles: \"The Beatles\"\n    acdc: \"AC/DC\"\n  devise:\n    sign_in: \"Sign in\"\n  vue:\n    front:\n      title: \"Front end\"\n      nav:\n        homepage: \"Home\"\n        pages: \"Pages\"\n      home:\n        title: \"Musicians\"\n        breadcrumb: \"All musicians\"        \n      pages:\n        title: \"Pages\"\n        server_404: \"This link triggers a Server side routing 404\"\n        client_404: \"This link triggers a Client side routing 404\"\n        server_401: \"This link performs an API call that responds a 401\"\n        server_500: \"This link performs an API call that responds a 500\"\n        admin_link: \"» Wanna go to the admin?\"\n      musicians:\n        title: \"Details about this musician\"\n        id: \"Id\"\n        name: \"Name\"\n        band: \"Band\"        \n      errors:\n        title: \"Error pages\"\n    admin:\n      title: \"Admin\"\n      save: \"Save\"\n      cancel: \"Cancel\"\n      filter: \"Filter\"\n      reset_filters: \"Reset filters\"\n      delete: \"Delete\"\n      no_result: \"No result :-/\"\n      any: \"Any\"\n      nav:\n        dashboard: \"Dashboard\"\n        musicians: \"Musicians\"  \n        websockets: \"Websockets\"   \n        logout: \"Logout\"\n      dashboard:\n        title: \"Dashboard\"\n        musicians: \"No musician | 1 musician | musicians\" \n      musicians:\n        create: \"+ Add a new musician\"\n        new: \"New musician\"\n        form:\n          id: \"Id\"\n          name: \"Name\"\n          band: \"Band\"\n        comment: \"This whole CRUD section is deliberatly slowed down so you can actually see the animations. Comment out the \\\"slow\\\" method in Api::Admin::MusiciansController to use the app at full speed\"     \n      confirm: \"Are you sure?\"\n      websockets: \n        placeholder: \"Type your message...\"\n        publish: \"Publish\"\n        comment1: \"You can also publish straight out from the Rails console:\"\n        # Beware of string containing: {} @ $ |\n        # See: https://vue-i18n.intlify.dev/guide/essentials/syntax#special-characters\n        code_example: \"{'ActionCable.server.broadcast(\\\"ChatChannel\\\", { message: \\\"hey!\\\" })'}\"\n        comment2: \"All messages are upcased\"\n        server_side: \" server side. \"\n        comment3: \"If you open up multiple tabs, you messsages will be upcased in each of these tabs\"\n        waiting_messages: \"Waiting for messages...\"\n  activerecord:\n    attributes:        \n      user:\n        email: \"Email address\"\n        password: \"Password\"\n    errors:\n      models:\n        musician:\n          attributes:\n            name:\n              blank: \"Mandatory field\"\n            band:\n              blank: \"Please select a band\""
  },
  {
    "path": "config/locales/fr.yml",
    "content": "fr:\n  time:\n    formats:\n      default: \"%B %d %Y %H:%M\"\n  bands:\n    rolling_stones: \"The Rolling Stones\"\n    beatles: \"The Beatles\"\n    acdc: \"AC/DC\"\n  devise:\n    sign_in: \"Authentification\"\n  vue:\n    front:\n      title: \"Front end\"\n      nav:\n        homepage: \"Accueil\"\n        pages: \"Pages\"\n      home:\n        title: \"Musiciens\"\n        breadcrumb: \"Tous les musiciens\"        \n      pages:\n        title: \"Pages\"\n        server_404: \"Ce lien provoque une 404 venant du routage serveur\"\n        client_404: \"Ce lien provoque un 404 venant du routage côté client\"\n        server_401: \"Ce lien appelle l'API qui lui répond une 401\"\n        server_500: \"Ce lien appelle l'API qui lui répond une 500\"\n        admin_link: \"» Envie de voir l'admin ?\"\n      musicians:\n        title: \"Details concernant ce musicien\"\n        id: \"Id\"\n        name: \"Nom\"\n        band: \"Groupe\"        \n      errors:\n        title: \"Pages d'erreurs\"\n    admin:\n      title: \"Admin\"\n      save: \"Enregistrer\"\n      cancel: \"Annuler\"\n      filter: \"Filtrer\"\n      reset_filters: \"Reseter les filtres\"\n      delete: \"Supprimer\"\n      no_result: \"Aucun resultat :-/\"\n      any: \"Tous\"\n      nav:\n        dashboard: \"Dashboard\"\n        musicians: \"Musiciens\"\n        websockets: \"Websockets\"      \n        logout: \"Déconnection\"\n      dashboard:\n        title: \"Dashboard\"\n        musicians: \"Aucun musician | Un musicien | musiciens\" \n      musicians:\n        create: \"+ Ajouter un musicien\"\n        new: \"Nouveau musicien\"        \n        form:\n          id: \"Id\"\n          name: \"Nom\"\n          band: \"Groupe\"   \n        comment: \"This whole CRUD section is deliberatly slowed down so you can actually see the animations. Comment out the \\\"slow\\\" method in Api::Admin::MusiciansController to use the app at full speed\"     \n      confirm: \"Etes-vous sur ?\"\n      websockets: \n        placeholder: \"Tapez un message...\"\n        publish: \"Publier\"\n        comment1: \"Vous pouvez aussi publier un message depuis la console Rails :\"\n        # Beware of string containing: {} @ $ |\n        # See: https://vue-i18n.intlify.dev/guide/essentials/syntax#special-characters\n        code_example: \"{'ActionCable.server.broadcast(\\\"ChatChannel\\\", { message: \\\"hey!\\\" })'}\"\n        comment2: \"Tous les messages que vous publiez sont passés en majuscule\"\n        server_side: \" côté serveur. \"\n        comment3: \"Si vous ouvrez plusieurs onglets, les messages seront en majuscules sur chacun d'eux.\"\n        waiting_messages: \"En attente de messages...\"\n  activerecord:\n    attributes:        \n      user:\n        email: \"Adresse Email\"\n        password: \"Mot de passe\"\n    errors:\n      models:\n        musician:\n          attributes:\n            name:\n              blank: \"Saisie requise\"\n            band:\n              blank: \"Merci de sélectionner un groupe\""
  },
  {
    "path": "config/puma.rb",
    "content": "# Puma can serve each request in a thread from an internal thread pool.\n# The `threads` method setting takes two numbers: a minimum and maximum.\n# Any libraries that use thread pools should be configured to match\n# the maximum value specified for Puma. Default is set to 5 threads for minimum\n# and maximum; this matches the default thread size of Active Record.\n#\nmax_threads_count = ENV.fetch(\"RAILS_MAX_THREADS\") { 5 }\nmin_threads_count = ENV.fetch(\"RAILS_MIN_THREADS\") { max_threads_count }\nthreads min_threads_count, max_threads_count\n\n# Specifies the `worker_timeout` threshold that Puma will use to wait before\n# terminating a worker in development environments.\n#\nworker_timeout 3600 if ENV.fetch(\"RAILS_ENV\", \"development\") == \"development\"\n\n# Specifies the `port` that Puma will listen on to receive requests; default is 3000.\n#\nport ENV.fetch(\"PORT\") { 3000 }\n\n# Specifies the `environment` that Puma will run in.\n#\nenvironment ENV.fetch(\"RAILS_ENV\") { \"development\" }\n\n# Specifies the `pidfile` that Puma will use.\npidfile ENV.fetch(\"PIDFILE\") { \"tmp/pids/server.pid\" }\n\n# Specifies the number of `workers` to boot in clustered mode.\n# Workers are forked web server processes. If using threads and workers together\n# the concurrency of the application would be max `threads` * `workers`.\n# Workers do not work on JRuby or Windows (both of which do not support\n# processes).\n#\n# workers ENV.fetch(\"WEB_CONCURRENCY\") { 2 }\n\n# Use the `preload_app!` method when specifying a `workers` number.\n# This directive tells Puma to first boot the application and load code\n# before forking the application. This takes advantage of Copy On Write\n# process behavior so workers use less memory.\n#\n# preload_app!\n\n# Allow puma to be restarted by `bin/rails restart` command.\nplugin :tmp_restart\n"
  },
  {
    "path": "config/routes.rb",
    "content": "Rails.application.routes.draw do\n  mount ActionCable.server => '/cable'\n\n  localized do\n    devise_for :users, only: [:sessions]\n\n    namespace :api, :defaults => { :format => 'json' } do\n      resources :musicians, only: [:index, :show]\n\n      namespace :admin do\n        resources :dashboard, only: :index\n        resources :musicians, except: :show\n      end\n    end\n\n    get '/admin', to: 'admin#index', as: 'admin_root'\n    match \"/admin/*path\", to: \"admin#index\", format: false, via: :get\n\n    root :to => \"application#index\"\n    match \"*path\", to: \"application#index\", format: false, via: :get\n  end\nend\n"
  },
  {
    "path": "config/storage.yml",
    "content": "test:\n  service: Disk\n  root: <%= Rails.root.join(\"tmp/storage\") %>\n\nlocal:\n  service: Disk\n  root: <%= Rails.root.join(\"storage\") %>\n\n# Use bin/rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)\n# amazon:\n#   service: S3\n#   access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>\n#   secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>\n#   region: us-east-1\n#   bucket: your_own_bucket-<%= Rails.env %>\n\n# Remember not to checkin your GCS keyfile to a repository\n# google:\n#   service: GCS\n#   project: your_project\n#   credentials: <%= Rails.root.join(\"path/to/gcs.keyfile\") %>\n#   bucket: your_own_bucket-<%= Rails.env %>\n\n# Use bin/rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)\n# microsoft:\n#   service: AzureStorage\n#   storage_account_name: your_account_name\n#   storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %>\n#   container: your_container_name-<%= Rails.env %>\n\n# mirror:\n#   service: Mirror\n#   primary: local\n#   mirrors: [ amazon, google, microsoft ]\n"
  },
  {
    "path": "config/vite.json",
    "content": "{\n  \"all\": {\n    \"sourceCodeDir\": \"app/javascript\",\n    \"watchAdditionalPaths\": []\n  },\n  \"development\": {\n    \"autoBuild\": true,\n    \"publicOutputDir\": \"vite-dev\",\n    \"port\": 3036,\n    \"host\": \"0.0.0.0\"\n  },\n  \"test\": {\n    \"autoBuild\": true,\n    \"publicOutputDir\": \"vite-test\",\n    \"port\": 3037\n  }\n}\n"
  },
  {
    "path": "config.ru",
    "content": "# This file is used by Rack-based servers to start the application.\n\nrequire_relative \"config/environment\"\n\nrun Rails.application\nRails.application.load_server\n"
  },
  {
    "path": "cypress/e2e/home.cy.js",
    "content": "describe('Main navigation', () => {\n  it('passes', () => {\n    cy.visit('http://localhost:5100')\n    cy.get('.row > :nth-child(1) > a').click();\n    cy.get('.breadcrumb > :nth-child(1) > a').click();\n    cy.get('ul > :nth-child(2) > a').click();\n    cy.get(':nth-child(1) > a').click();\n    cy.get('.row > :nth-child(1) > a').click();\n    cy.get('p').click();\n    cy.get('p').should('have.text', 'Id: 1Name: John LennonBand: The Beatles');\n    cy.get('.active > a').click();\n    cy.get('ul > :nth-child(2) > a').click();\n    cy.get('section.container > :nth-child(2) > a').should('have.text', 'This link triggers a Server side routing 404');\n    cy.get('section.container > :nth-child(2) > a').click();\n    cy.get(':nth-child(1) > a').click();\n    cy.get('h1').should('have.text', 'Musicians');\n    cy.visit('http://localhost:5100/');\n    cy.get('select').select('fr');\n    cy.get('h1').click();\n    cy.get('h1').should('have.text', 'Musiciens');\n    cy.get('span').click();\n    cy.get('span').should('have.text', 'Tous les musiciens');\n    cy.get('select').select('en');\n    cy.get('.row > :nth-child(1) > a').click();\n    cy.get('.breadcrumb > :nth-child(1) > a').click();  \n  })\n})"
  },
  {
    "path": "cypress/support/e2e.js",
    "content": ""
  },
  {
    "path": "cypress.config.js",
    "content": "const { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  // setupNodeEvents can be defined in either\n  // the e2e or component configuration\n  e2e: {\n    experimentalStudio: true,\n    setupNodeEvents(on, config) {\n      on('before:browser:launch', (browser = {}, launchOptions) => {\n        /* ... */\n      })\n    },\n  },\n  screenshotsFolder: \"tmp/cypress_screenshots\",\n  videosFolder: \"tmp/cypress_videos\",\n  trashAssetsBeforeRuns: false\n})\n"
  },
  {
    "path": "db/migrate/20220424120800_base_setup.rb",
    "content": "class BaseSetup < ActiveRecord::Migration[7.0]\n  def change\n    create_table :users do |t|\n      t.timestamps\n      t.string :email\n    end\n\n    create_table :musicians do |t|\n      t.timestamps\n      t.string :name\n      t.integer :band\n    end\n\n    change_table :users do |t|\n      ## Database authenticatable\n      t.string :encrypted_password, null: false, default: \"\"\n\n      ## Recoverable\n      t.string   :reset_password_token\n      t.datetime :reset_password_sent_at\n\n      ## Rememberable\n      t.datetime :remember_created_at\n\n      ## Trackable\n      t.integer  :sign_in_count, default: 0, null: false\n      t.datetime :current_sign_in_at\n      t.datetime :last_sign_in_at\n      t.string   :current_sign_in_ip\n      t.string   :last_sign_in_ip\n    end\n\n    add_index :users, :email,                unique: true\n    add_index :users, :reset_password_token, unique: true\n  end\nend\n"
  },
  {
    "path": "db/migrate/20240102193807_add_service_name_to_active_storage_blobs.active_storage.rb",
    "content": "# This migration comes from active_storage (originally 20190112182829)\nclass AddServiceNameToActiveStorageBlobs < ActiveRecord::Migration[6.0]\n  def up\n    return unless table_exists?(:active_storage_blobs)\n\n    unless column_exists?(:active_storage_blobs, :service_name)\n      add_column :active_storage_blobs, :service_name, :string\n\n      if configured_service = ActiveStorage::Blob.service.name\n        ActiveStorage::Blob.unscoped.update_all(service_name: configured_service)\n      end\n\n      change_column :active_storage_blobs, :service_name, :string, null: false\n    end\n  end\n\n  def down\n    return unless table_exists?(:active_storage_blobs)\n\n    remove_column :active_storage_blobs, :service_name\n  end\nend\n"
  },
  {
    "path": "db/migrate/20240102193808_create_active_storage_variant_records.active_storage.rb",
    "content": "# This migration comes from active_storage (originally 20191206030411)\nclass CreateActiveStorageVariantRecords < ActiveRecord::Migration[6.0]\n  def change\n    return unless table_exists?(:active_storage_blobs)\n\n    # Use Active Record's configured type for primary key\n    create_table :active_storage_variant_records, id: primary_key_type, if_not_exists: true do |t|\n      t.belongs_to :blob, null: false, index: false, type: blobs_primary_key_type\n      t.string :variation_digest, null: false\n\n      t.index %i[ blob_id variation_digest ], name: \"index_active_storage_variant_records_uniqueness\", unique: true\n      t.foreign_key :active_storage_blobs, column: :blob_id\n    end\n  end\n\n  private\n    def primary_key_type\n      config = Rails.configuration.generators\n      config.options[config.orm][:primary_key_type] || :primary_key\n    end\n\n    def blobs_primary_key_type\n      pkey_name = connection.primary_key(:active_storage_blobs)\n      pkey_column = connection.columns(:active_storage_blobs).find { |c| c.name == pkey_name }\n      pkey_column.bigint? ? :bigint : pkey_column.type\n    end\nend\n"
  },
  {
    "path": "db/migrate/20240102193809_remove_not_null_on_active_storage_blobs_checksum.active_storage.rb",
    "content": "# This migration comes from active_storage (originally 20211119233751)\nclass RemoveNotNullOnActiveStorageBlobsChecksum < ActiveRecord::Migration[6.0]\n  def change\n    return unless table_exists?(:active_storage_blobs)\n\n    change_column_null(:active_storage_blobs, :checksum, true)\n  end\nend\n"
  },
  {
    "path": "db/schema.rb",
    "content": "# This file is auto-generated from the current state of the database. Instead\n# of editing this file, please use the migrations feature of Active Record to\n# incrementally modify your database, and then regenerate this schema definition.\n#\n# This file is the source Rails uses to define your schema when running `bin/rails\n# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to\n# be faster and is potentially less error prone than running all of your\n# migrations from scratch. Old migrations may fail to apply correctly if those\n# migrations use external dependencies or application code.\n#\n# It's strongly recommended that you check this file into your version control system.\n\nActiveRecord::Schema[7.1].define(version: 2024_01_02_193809) do\n  create_table \"musicians\", force: :cascade do |t|\n    t.datetime \"created_at\", null: false\n    t.datetime \"updated_at\", null: false\n    t.string \"name\"\n    t.integer \"band\"\n  end\n\n  create_table \"users\", force: :cascade do |t|\n    t.datetime \"created_at\", null: false\n    t.datetime \"updated_at\", null: false\n    t.string \"email\"\n    t.string \"encrypted_password\", default: \"\", null: false\n    t.string \"reset_password_token\"\n    t.datetime \"reset_password_sent_at\"\n    t.datetime \"remember_created_at\"\n    t.integer \"sign_in_count\", default: 0, null: false\n    t.datetime \"current_sign_in_at\"\n    t.datetime \"last_sign_in_at\"\n    t.string \"current_sign_in_ip\"\n    t.string \"last_sign_in_ip\"\n    t.index [\"email\"], name: \"index_users_on_email\", unique: true\n    t.index [\"reset_password_token\"], name: \"index_users_on_reset_password_token\", unique: true\n  end\n\nend\n"
  },
  {
    "path": "db/seeds.rb",
    "content": "User.create!(email: \"admin@domain.com\", password: \"password\", password_confirmation: \"password\")\nMusician.create!(name: \"John Lennon\", band: \"beatles\")\nMusician.create!(name: \"Paul McCartney\", band: \"beatles\")\nMusician.create!(name: \"Georges Harrison\", band: \"beatles\")\nMusician.create!(name: \"Ringo Starr\", band: \"beatles\")\nMusician.create!(name: \"Mick Jagger\", band: \"rolling_stones\")\nMusician.create!(name: \"Keith Richards\", band: \"rolling_stones\")\nMusician.create!(name: \"Mick Taylor\", band: \"rolling_stones\")\nMusician.create!(name: \"Bill Wyman\", band: \"rolling_stones\")\nMusician.create!(name: \"Charlie Watts\", band: \"rolling_stones\")\nMusician.create!(name: \"Angus Young\", band: \"acdc\")\nMusician.create!(name: \"Malcom Young\", band: \"acdc\")\nMusician.create!(name: \"Bon Scott\", band: \"acdc\")\nMusician.create!(name: \"Phil Rudd\", band: \"acdc\")\n"
  },
  {
    "path": "docker-compose.yml",
    "content": "version: \"3.9\"\n\nservices:\n  redis:\n    image: 'redis'\n    restart: always\n    command: redis-server\n    ports:\n      - 6379:6379\n    environment:\n      - ALLOW_EMPTY_PASSWORD=yes\n\n  web:\n    build:\n      context: .\n    image: 'rails-vue-demo-app'\n    working_dir: /app\n    command: sh -c \"yarn install && rm -rf tmp/pids && export REDIS_URL='redis' && foreman start\"\n    volumes:\n      - type: bind\n        source: .\n        target: /app\n    ports:\n      - 3000:3000\n      - 3036:3036"
  },
  {
    "path": "lib/assets/.keep",
    "content": ""
  },
  {
    "path": "lib/tasks/.keep",
    "content": ""
  },
  {
    "path": "log/.keep",
    "content": ""
  },
  {
    "path": "package.json",
    "content": "{\n  \"type\": \"module\",\n  \"devDependencies\": {\n    \"cypress\": \"^13.6.0\",\n    \"eslint\": \"^8.7.0\",\n    \"lightningcss-cli\": \"^1.22.1\",\n    \"prettier\": \"^2.5.1\",\n    \"vite\": \"^5.0.0\",\n    \"vite-plugin-ruby\": \"^5.0.0\",\n    \"vue-eslint-parser\": \"^8.0.0\"\n  },\n  \"dependencies\": {\n    \"@rails/actioncable\": \"^7.0.2-4\",\n    \"@vitejs/plugin-vue\": \"^2.3.1\",\n    \"axios\": \"^1.6.2\",\n    \"lightningcss\": \"^1.22.1\",\n    \"mitt\": \"^3.0.1\",\n    \"pinia\": \"^2.0.13\",\n    \"rollup\": \"^4.9.5\",\n    \"unplugin-auto-import\": \"^0.17.2\",\n    \"vue\": \"^3.2.33\",\n    \"vue-axios\": \"^3.4.1\",\n    \"vue-i18n\": \"^9.1.9\",\n    \"vue-router\": \"^4.0.14\",\n    \"yarn\": \"^1.22.21\"\n  }\n}\n"
  },
  {
    "path": "public/404.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <title>The page you were looking for doesn't exist (404)</title>\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n  <style>\n  .rails-default-error-page {\n    background-color: #EFEFEF;\n    color: #2E2F30;\n    text-align: center;\n    font-family: arial, sans-serif;\n    margin: 0;\n  }\n\n  .rails-default-error-page div.dialog {\n    width: 95%;\n    max-width: 33em;\n    margin: 4em auto 0;\n  }\n\n  .rails-default-error-page div.dialog > div {\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #BBB;\n    border-top: #B00100 solid 4px;\n    border-top-left-radius: 9px;\n    border-top-right-radius: 9px;\n    background-color: white;\n    padding: 7px 12% 0;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n\n  .rails-default-error-page h1 {\n    font-size: 100%;\n    color: #730E15;\n    line-height: 1.5em;\n  }\n\n  .rails-default-error-page div.dialog > p {\n    margin: 0 0 1em;\n    padding: 1em;\n    background-color: #F7F7F7;\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #999;\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n    border-top-color: #DADADA;\n    color: #666;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n  </style>\n</head>\n\n<body class=\"rails-default-error-page\">\n  <!-- This file lives in public/404.html -->\n  <div class=\"dialog\">\n    <div>\n      <h1>The page you were looking for doesn't exist.</h1>\n      <p>You may have mistyped the address or the page may have moved.</p>\n    </div>\n    <p>If you are the application owner check the logs for more information.</p>\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "public/422.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <title>The change you wanted was rejected (422)</title>\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n  <style>\n  .rails-default-error-page {\n    background-color: #EFEFEF;\n    color: #2E2F30;\n    text-align: center;\n    font-family: arial, sans-serif;\n    margin: 0;\n  }\n\n  .rails-default-error-page div.dialog {\n    width: 95%;\n    max-width: 33em;\n    margin: 4em auto 0;\n  }\n\n  .rails-default-error-page div.dialog > div {\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #BBB;\n    border-top: #B00100 solid 4px;\n    border-top-left-radius: 9px;\n    border-top-right-radius: 9px;\n    background-color: white;\n    padding: 7px 12% 0;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n\n  .rails-default-error-page h1 {\n    font-size: 100%;\n    color: #730E15;\n    line-height: 1.5em;\n  }\n\n  .rails-default-error-page div.dialog > p {\n    margin: 0 0 1em;\n    padding: 1em;\n    background-color: #F7F7F7;\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #999;\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n    border-top-color: #DADADA;\n    color: #666;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n  </style>\n</head>\n\n<body class=\"rails-default-error-page\">\n  <!-- This file lives in public/422.html -->\n  <div class=\"dialog\">\n    <div>\n      <h1>The change you wanted was rejected.</h1>\n      <p>Maybe you tried to change something you didn't have access to.</p>\n    </div>\n    <p>If you are the application owner check the logs for more information.</p>\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "public/500.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <title>We're sorry, but something went wrong (500)</title>\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n  <style>\n  .rails-default-error-page {\n    background-color: #EFEFEF;\n    color: #2E2F30;\n    text-align: center;\n    font-family: arial, sans-serif;\n    margin: 0;\n  }\n\n  .rails-default-error-page div.dialog {\n    width: 95%;\n    max-width: 33em;\n    margin: 4em auto 0;\n  }\n\n  .rails-default-error-page div.dialog > div {\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #BBB;\n    border-top: #B00100 solid 4px;\n    border-top-left-radius: 9px;\n    border-top-right-radius: 9px;\n    background-color: white;\n    padding: 7px 12% 0;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n\n  .rails-default-error-page h1 {\n    font-size: 100%;\n    color: #730E15;\n    line-height: 1.5em;\n  }\n\n  .rails-default-error-page div.dialog > p {\n    margin: 0 0 1em;\n    padding: 1em;\n    background-color: #F7F7F7;\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #999;\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n    border-top-color: #DADADA;\n    color: #666;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n  </style>\n</head>\n\n<body class=\"rails-default-error-page\">\n  <!-- This file lives in public/500.html -->\n  <div class=\"dialog\">\n    <div>\n      <h1>We're sorry, but something went wrong.</h1>\n    </div>\n    <p>If you are the application owner check the logs for more information.</p>\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "public/css/development/admin/forms.css",
    "content": ".loading:not(form) * {\n  display: none;\n}\n.loading:not(form) {\n  width: 100%;\n  height: 40px;\n  margin: 100px auto 100px auto;\n  position: relative;\n  &::before, &::after{\n    content: '';\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    width: 4em;\n    height: 4em;\n    border-radius: 50%;\n    transform: translate(-50%, -50%) scale(0);\n  }\n  &::before {\n    background: #2c6ed1;\n    animation: pulse 2s ease-in-out infinite;\n  }\n  &::after {\n    background: #2c6ed1;\n    animation: pulse 2s 1s ease-in-out infinite;\n  }  \n}\n\n@keyframes pulse {\n  0%, 100%{\n    transform: translate(-50%, -50%) scale(0);\n    opacity: 1;\n  }\n  50%{\n    transform: translate(-50%, -50%) scale(1.0);\n    opacity: 0;\n  }\n}\n\nform {\n  position: relative;\n  z-index: 1;\n  fieldset {\n    border: none;\n    padding: 0;\n    position: relative;\n  }\n  fieldset {\n    position: relative;\n  }\n  label {\n    color: var(--text-color);\n    font-weight: bold;\n  }\n  input, select {\n    background-color: var(--body-bg);\n    color: var(--text-color);\n  }\n  .error {\n    position: absolute;\n    top: 0;\n    right: 0;\n    color: red;\n  }\n  &.loading {\n    display: block;\n  }\n  /* Create a screen so the user cannot double submit/interact */\n  &.loading:after {\n    content: \" \";\n    display: block;\n    position: absolute;\n    z-index: 2;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    background-color: rgba(255, 255, 255, 0.3);  \n  }\n  /* Facebook style spinner: processing */\n  &.loading input[type=submit] {\n    color: transparent;\n    background-image: url(data:image/gif;utf8;base64,R0lGODlhEAALAPQAAP////////7+/v7+/v7+/v7+/v////7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/gAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA);\n    background-position: center;\n    background-repeat: no-repeat;\n  }\n  /* Check icon: success */\n  &.success input[type=submit] {\n    background-color: lime !important;\n    color: transparent;\n    background-repeat: no-repeat;\n    background-position: center 16px;\n    background-size: 25px;\n    background-image: url(data:image/svg+xml;utf8;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTcgMTYiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgY2xhc3M9InNpLWdseXBoIHNpLWdseXBoLWNoZWNrZWQiPg0KICAgIDxnIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPg0KICAgICAgICA8cGF0aCBkPSJNMy40MzIsNi4xODkgQzMuODI0LDUuNzk4IDQuNDU1LDUuNzk4IDQuODQ3LDYuMTg5IEw2Ljk2OCw4LjMxIEwxMy4xNDcsMi4xMzEgQzEzLjUzMSwxLjc0NyAxNC4xNTcsMS43NTMgMTQuNTQ4LDIuMTQ0IEwxNi42Nyw0LjI2NiBDMTcuMDYsNC42NTcgMTcuMDY2LDUuMjg0IDE2LjY4NCw1LjY2NiBMNy42NjIsMTQuNjg3IEM3LjI3OCwxNS4wNyA2LjY1MSwxNS4wNjQgNi4yNjEsMTQuNjczIEwxLjMxMSw5LjcyMyBDMC45Miw5LjMzMyAwLjkyLDguNyAxLjMxMSw4LjMxIEwzLjQzMiw2LjE4OSBaIiBmaWxsPSIjZmZmIiBjbGFzcz0ic2ktZ2x5cGgtZmlsbCI+PC9wYXRoPg0KICAgIDwvZz4NCjwvc3ZnPg==);\n  }\n  /* Cross icon: failure */\n  &.failed input[type=submit] {\n    background-color: red !important;\n    color: transparent;\n    background-repeat: no-repeat;\n    background-position: center;\n    background-size: 21px;\n    background-image: url(data:image/svg+xml;utf8;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTcgMTciIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgY2xhc3M9InNpLWdseXBoIHNpLWdseXBoLWRlbGV0ZSI+DQogICAgPGcgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+DQogICAgICAgIDxwYXRoIGQ9Ik0xMi41NjYsOCBMMTUuNjExLDQuOTU2IEMxNi4wMzEsNC41MzUgMTYuMDMxLDMuODUzIDE1LjYxMSwzLjQzNCBMMTIuNTY2LDAuMzg5IEMxMi4xNDYsLTAuMDMxIDExLjQ2NCwtMC4wMzEgMTEuMDQzLDAuMzg5IEw3Ljk5OSwzLjQzMyBMNC45NTUsMC4zODkgQzQuNTM0LC0wLjAzMSAzLjg1MiwtMC4wMzEgMy40MzIsMC4zODkgTDAuMzg4LDMuNDM0IEMtMC4wMzQsMy44NTQgLTAuMDM0LDQuNTM2IDAuMzg3LDQuOTU2IEwzLjQzMSw4IEwwLjM4NywxMS4wNDQgQy0wLjAzNCwxMS40NjUgLTAuMDM0LDEyLjE0NyAwLjM4OCwxMi41NjcgTDMuNDMyLDE1LjYxMSBDMy44NTIsMTYuMDMyIDQuNTM0LDE2LjAzMiA0Ljk1NSwxNS42MTEgTDcuOTk5LDEyLjU2NyBMMTEuMDQzLDE1LjYxMSBDMTEuNDY0LDE2LjAzMiAxMi4xNDYsMTYuMDMyIDEyLjU2NiwxNS42MTEgTDE1LjYxMSwxMi41NjcgQzE2LjAzMSwxMi4xNDYgMTYuMDMxLDExLjQ2NCAxNS42MTEsMTEuMDQ0IEwxMi41NjYsOCBMMTIuNTY2LDggWiIgZmlsbD0iI2ZmZmZmZiIgY2xhc3M9InNpLWdseXBoLWZpbGwiPjwvcGF0aD4NCiAgICA8L2c+DQo8L3N2Zz4=);\n  }\n}"
  },
  {
    "path": "public/css/development/admin.css",
    "content": "@import url(\"grid.css\");\n@import url(\"themes/light.css\");\n@import url(\"themes/dark.css\");\n@import url(\"main.css\");\n@import url(\"admin/forms.css\");\n@import url(\"utilities.css\");"
  },
  {
    "path": "public/css/development/devise.css",
    "content": ".devise {\n  > .row {\n    margin-top: 50px;\n    @media (min-width: 576px) and (max-width: 991px) {\n      > div {\n        grid-column: 2/span 10 !important;\n      }\n    }\n    @media (min-width: 992px) {\n      > div {\n        grid-column: 4/span 6 !important;\n      }\n    }\n  }\n}"
  },
  {
    "path": "public/css/development/front.css",
    "content": "@import url(\"grid.css\");\n@import url(\"themes/light.css\");\n@import url(\"themes/dark.css\");\n@import url(\"main.css\");\n@import url(\"devise.css\");\n@import url(\"utilities.css\");"
  },
  {
    "path": "public/css/development/grid.css",
    "content": ":root {\n  --gutter: 20px;\n}\n[class^=\"col-\"] {\n  position: relative;\n}\n.wrapper {\n  width: calc(100% - var(--gutter));\n  margin: 0 auto;\n}\n.row {\n  clear: both;\n  display: grid;\n  grid-template-columns: repeat(12,1fr);\n  grid-gap: var(--gutter);\n}\n\n@media (max-width: 575px) {\n  :root {\n    --gutter: 10px;\n  } \n}\n\n.col-xs-1 { grid-column-start: span 1 }\n.col-xs-2 { grid-column-start: span 2 }\n.col-xs-3 { grid-column-start: span 3 }\n.col-xs-4 { grid-column-start: span 4 }\n.col-xs-5 { grid-column-start: span 5 }\n.col-xs-6 { grid-column-start: span 6 }\n.col-xs-7 { grid-column-start: span 7 }\n.col-xs-8 { grid-column-start: span 8 }\n.col-xs-9 { grid-column-start: span 9 }\n.col-xs-10 { grid-column-start: span 10 }\n.col-xs-11 { grid-column-start: span 11 }\n.col-xs-12 { grid-column-start: span 12 }\n\n@media (min-width: 576px) {\n  .col-sm-1 { grid-column-start: span 1 !important }\n  .col-sm-2 { grid-column-start: span 2 !important }\n  .col-sm-3 { grid-column-start: span 3 !important }\n  .col-sm-4 { grid-column-start: span 4 !important }\n  .col-sm-5 { grid-column-start: span 5 !important }\n  .col-sm-6 { grid-column-start: span 6 !important }\n  .col-sm-7 { grid-column-start: span 7 !important }\n  .col-sm-8 { grid-column-start: span 8 !important }\n  .col-sm-9 { grid-column-start: span 9 !important }\n  .col-sm-10 { grid-column-start: span 10 !important }\n  .col-sm-11 { grid-column-start: span 11 !important }\n  .col-sm-12 { grid-column-start: span 12 !important }\n}\n@media (min-width: 768px) {\n  .col-md-1 { grid-column-start: span 1 !important }\n  .col-md-2 { grid-column-start: span 2 !important }\n  .col-md-3 { grid-column-start: span 3 !important }\n  .col-md-4 { grid-column-start: span 4 !important }\n  .col-md-5 { grid-column-start: span 5 !important }\n  .col-md-6 { grid-column-start: span 6 !important }\n  .col-md-7 { grid-column-start: span 7 !important }\n  .col-md-8 { grid-column-start: span 8 !important }\n  .col-md-9 { grid-column-start: span 9 !important }\n  .col-md-10 { grid-column-start: span 10 !important }\n  .col-md-11 { grid-column-start: span 11 !important }\n  .col-md-12 { grid-column-start: span 12 !important }\n}\n@media (min-width: 992px) {\n  .col-lg-1 { grid-column-start: span 1 !important }\n  .col-lg-2 { grid-column-start: span 2 !important }\n  .col-lg-3 { grid-column-start: span 3 !important }\n  .col-lg-4 { grid-column-start: span 4 !important}\n  .col-lg-5 { grid-column-start: span 5 !important }\n  .col-lg-6 { grid-column-start: span 6 !important }\n  .col-lg-7 { grid-column-start: span 7 !important }\n  .col-lg-8 { grid-column-start: span 8 !important }\n  .col-lg-9 { grid-column-start: span 9 !important }\n  .col-lg-10 { grid-column-start: span 10 !important }\n  .col-lg-11 { grid-column-start: span 11 !important }\n  .col-lg-12 { grid-column-start: span 12 !important }\n}\n@media (min-width: 1200px) {\n  .col-xl-1 { grid-column-start: span 1 !important }\n  .col-xl-2 { grid-column-start: span 2 !important }\n  .col-xl-3 { grid-column-start: span 3 !important }\n  .col-xl-4 { grid-column-start: span 4 !important }\n  .col-xl-5 { grid-column-start: span 5 !important }\n  .col-xl-6 { grid-column-start: span 6 !important }\n  .col-xl-7 { grid-column-start: span 7 !important }\n  .col-xl-8 { grid-column-start: span 8 !important }\n  .col-xl-9 { grid-column-start: span 9 !important }\n  .col-xl-10 { grid-column-start: span 10 !important }\n  .col-xl-11 { grid-column-start: span 11 !important }\n  .col-xl-12 { grid-column-start: span 12 !important }\n}\n@media (min-width: 1400px) {\n  .col-xxl-1 { grid-column-start: span 1 !important }\n  .col-xxl-2 { grid-column-start: span 2 !important }\n  .col-xxl-3 { grid-column-start: span 3 !important }\n  .col-xxl-4 { grid-column-start: span 4 !important }\n  .col-xxl-5 { grid-column-start: span 5 !important }\n  .col-xxl-6 { grid-column-start: span 6 !important }\n  .col-xxl-7 { grid-column-start: span 7 !important }\n  .col-xxl-8 { grid-column-start: span 8 !important }\n  .col-xxl-9 { grid-column-start: span 9 !important }\n  .col-xxl-10 { grid-column-start: span 10 !important }\n  .col-xxl-11 { grid-column-start: span 11 !important }\n  .col-xxl-12 { grid-column-start: span 12 !important }\n}\n\n.visible-xs { display: none; }\n.visible-sm { display: none; }\n.visible-md { display: none; }\n.visible-lg { display: none; }\n.visible-xl { display: none; }\n.visible-xxl { display: none; }\n\n@media (min-width: 0) and (max-width: 575px) {\n  .hidden-xs { display: none; }\n  .visible-xs { display: block; }\n}\n@media (min-width: 576px) and (max-width: 767px) {\n  .hidden-sm { display: none; }\n  .visible-sm { display: block; }\n}\n@media (min-width: 768px) and (max-width: 992px) {\n  .hidden-md { display: none; }\n  .visible-md { display: block; }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-lg { display: none; }\n  .visible-lg { display: block; }\n}\n@media (min-width: 1200px) and (max-width: 1399px) {\n  .hidden-xl { display: none; }\n  .visible-xl { display: block; }\n}\n@media (min-width: 1400px)  {\n  .hidden-xxl { display: none; }\n  .visible-xxl { display: block; }\n}"
  },
  {
    "path": "public/css/development/main.css",
    "content": "html {\n  min-width: 375px;\n}\nbody, html {\n  background-color: var(--body-bg);\n}\nh1, h2, h3, h4, h5, h6 {\n  color: var(--title-color);\n}\np, span, li, table, tr, td, th, label {\n  color: var(--text-color);\n}\n.top-nav {\n  background-color: var(--accent);\n  select {\n    top: 5px;\n    right: 0;\n    position: absolute;\n    max-width: 100px;\n  }\n  ul li.active {\n    border-bottom: 1px solid var(--border-active);\n  }\n}\n.filters {\n  @media(max-width: 992px) {\n    margin-top: 30px;\n  }\n}\n.breadcrumb {\n  display: inline-block;\n  height: 40px;\n  margin: 0 auto 20px auto;\n  background-color: var(--accent);\n  li {\n    list-style-type: none;\n    display: inline-block;\n    padding-top: 5px;\n    color: var(--light-text-color);\n  }\n  li:after {\n    content: '/';\n    margin: 0 10px 0 10px;\n  }\n  li:last-child {\n    &:after {\n      content: '';\n    }\n  }\n}\n\n.card {\n  background-color: var(--accent);\n  padding: 20px;\n  box-shadow: 0px 0px 5px 0px rgba(0,0,0,0.2);\n}\n\n.pagination {\n  list-style-type: none;\n  float: right;\n  padding: 0;\n  height: 40px;\n  li {\n    list-style-type: none;\n    display: inline-block;\n    width: 40px;\n    height: 40px;\n    line-height: 20px;\n    text-align: center;\n    padding: 10px;\n    margin-left: 5px;\n    a {\n      text-decoration: none !important;\n    }\n  }\n}\n\nmain {\n  min-height: calc(100vh - 60px);\n}\nfooter {\n  height: 50px;\n  text-align: left;\n  padding-top: 8px;\n  color: var(--light-text-color);\n  font-size: 14px;\n  & a {\n    color: var(--light-text-color);\n    text-decoration: underline;\n  }\n  @media(max-width: 991px) {\n    * {\n      text-align: center !important;\n    }\n  }\n}"
  },
  {
    "path": "public/css/development/themes/dark.css",
    "content": "[data-theme=\"dark\"] {\n  --body-bg: #000;\n  --title-color: #fff;\n  --text-color: #ddd;\n  --light-text-color: #666; \n  --accent: rgb(37, 45, 52); \n  --border-active: #fffe;\n}\n"
  },
  {
    "path": "public/css/development/themes/light.css",
    "content": "[data-theme=\"light\"] {\n  --body-bg: #f5f5f5;\n  --title-color: #333;\n  --text-color: #666;\n  --light-text-color: #999; \n  --accent: #fff; \n  --border-active: blue;\n}\n"
  },
  {
    "path": "public/css/development/utilities.css",
    "content": ".hidden {\n  display: none;\n}\n.ta-left {\n  text-align: left;\n}\n.ta-center {\n  text-align: center;\n}\n.ta-right {\n  text-align: right;\n}\n.openable {\n  position: relative;\n  padding-left: 20px;\n  &:before {\n    width: 10px;\n    height: 10px;\n    display: inline-block;\n    border: solid black;\n    content: '';\n    border-width: 0 1px 1px 0;\n    transform: rotate(-45deg);\n    margin-right: 10px;\n    position: absolute;\n    top: 7px;\n    left: 0;\n  }\n  &.open:before {\n    top: 5px;\n    transform: rotate(45deg);\n  }\n}\n"
  },
  {
    "path": "public/robots.txt",
    "content": "# See https://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file\n"
  },
  {
    "path": "public/vite-test/assets/admin-ebb17751.js",
    "content": "import{d as q,_ as v,o as r,c,a as t,t as i,b as V,w,e as g,v as S,f as F,F as y,r as k,g as p,h as d,i as m,j as x,k as f,l as _,m as I,n as T,E as L,p as C,q as O,s as P,u as E,x as R,A as M,y as B}from\"./vue-i18n-6b73e0ca.js\";const D=q(\"dashboard\",{state:()=>({metrics:{}}),actions:{async index(){this.axios.get(\"/dashboard\").then(e=>{this.metrics=e.data.metrics})}}}),Q={setup(){return{store:D()}},created(){this.$api.call(this.store.index())}},W={class:\"container\"},z={class:\"row\"},J=V('<div class=\"col-xs-24 col-md-6 card\"><h3>Rails 7</h3><p><a href=\"https://edgeguides.rubyonrails.org/\" target=\"_blank\">An awesome server side Framework</a></p></div><div class=\"col-xs-24 col-md-6 card\"><h3>Vue 3</h3><p><a href=\"https://vuejs.org/guide/\" target=\"_blank\">SPA without the pain</a></p></div><div class=\"col-xs-24 col-md-6 card\"><h3>Pinia</h3><p><a href=\"https://pinia.vuejs.org/\" target=\"_blank\">State manager</a></p></div><div class=\"col-xs-24 col-md-6 card\"><h3>Vue Router</h3><p><a href=\"https://router.vuejs.org/\" target=\"_blank\">Flexible</a></p></div><div class=\"col-xs-24 col-md-6 card\"><h3>Axios</h3><p><a href=\"https://axios-http.com/docs/intro\" target=\"_blank\">Handles AJAX requests, no JQuery</a></p></div><div class=\"col-xs-24 col-md-6 card\"><h3>Vite</h3><p><a href=\"https://vitejs.dev/\" target=\"_blank\">Next generation Frontend tooling</a></p></div><div class=\"col-xs-24 col-md-6 card\"><h3>Devise</h3><p><a href=\"https://github.com/heartcombo/devise\" target=\"_blank\">Simple authentication using regular cookies that just works</a></p></div>',7),G={class:\"col-xs-24 col-md-6 card\"},H=t(\"h3\",null,\"I18n\",-1),K={href:\"https://kazupon.github.io/vue-i18n/\",target:\"_blank\"},X=V('<div class=\"col-xs-24 col-md-6 card\"><h3>ActionCable</h3><p><a href=\"https://guides.rubyonrails.org/action_cable_overview.html\" target=\"_blank\">Websockets with 2 way bindings</a></p></div><div class=\"col-xs-24 col-md-6 card\"><h3>Kaminari</h3><p><a href=\"https://github.com/kaminari/kaminari\" target=\"_blank\">Efficient Pagination</a></p></div><div class=\"col-xs-24 col-md-6 card\"><h3>Ransack</h3><p><a href=\"https://github.com/activerecord-hackery/ransack\" target=\"_blank\">ActiveRecord wizardry for dynamic search filters</a></p></div><div class=\"col-xs-24 col-md-6 card\"><h3>Bootstrap grid</h3><p><a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout\" target=\"_blank\">... but using native CSS Grid layout</a></p></div>',4);function Y(e,s,o,u,h,l){return r(),c(\"section\",W,[t(\"div\",z,[J,t(\"div\",G,[H,t(\"p\",null,[t(\"a\",K,i(e.$tc(\"dashboard.musicians\",0))+\", \"+i(e.$tc(\"dashboard.musicians\",1))+\", \"+i(u.store.metrics.musicians+\" \"+e.$tc(\"dashboard.musicians\",u.store.metrics.musicians)),1)])]),X])])}const Z=v(Q,[[\"render\",Y]]),A=q(\"musicians\",{state:()=>({errors:{},bands:[],musician:{},musicians:[],pagination:{}}),actions:{async index(e){return this.axios.get(e).then(s=>{this.pagination=s.data.pagination,this.bands=s.data.bands,this.musicians=s.data.musicians})},async new(){return this.errors={},this.musician={},this.axios.get(\"/musicians/new\").then(e=>{this.musician=e.data.musician})},async create(){return this.errors={},this.axios.post(\"/musicians\",this.musician).then(e=>(this.musician=e.data.musician,!0)).catch(e=>(this.errors=e.response.data.errors,!1))},async edit(e){return this.errors={},this.musician={},this.axios.get(`/musicians/${e}/edit`).then(s=>{this.musician=s.data.musician})},async update(e){return this.errors={},this.axios.put(`/musicians/${e}`,this.musician).then(s=>!0).catch(s=>(this.errors=s.response.data.errors,!1))},async destroy(e){return this.errors={},this.axios.delete(`/musicians/${e}`).then(s=>!0).catch(s=>(this.errors=s.response.data.errors,!1))}}}),tt={props:[\"bands\"],data:function(){return{form:{name_cont:\"\",band_eq:null}}},methods:{toggleForm(){this.$refs.filters.classList.toggle(\"hidden\")},search(){const e=Object.fromEntries(Object.entries(this.form).map(s=>[`q[${s[0]}]`,s[1]]));this.$router.push({path:this.$route.path,query:e}),this.$emit(\"index\")},reset(){this.form={name_cont:\"\",band_eq:null},this.$router.push({path:this.$route.path,query:\"\"})}}},et={class:\"row\"},st={class:\"col-xs-24 col-md-10\"},at={class:\"col-xs-24 col-md-10\"},nt={value:null},it=[\"value\"],ot={class:\"row\"},rt={class:\"col-xs-24 col-md-5\"},ct=[\"value\"],lt={class:\"col-xs-24 col-md-5\"};function ut(e,s,o,u,h,l){return r(),c(\"section\",null,[t(\"a\",{href:\"#\",onClick:s[0]||(s[0]=w((...n)=>l.toggleForm&&l.toggleForm(...n),[\"prevent\"]))},\" \"+i(e.$t(\"filter\")),1),t(\"form\",{onSubmit:s[4]||(s[4]=w((...n)=>l.search&&l.search(...n),[\"prevent\"])),ref:\"filters\",\"accept-charset\":\"UTF-8\",class:\"card hidden\"},[t(\"div\",et,[t(\"div\",st,[t(\"label\",null,i(e.$t(\"musicians.form.name\")),1),g(t(\"input\",{type:\"text\",\"onUpdate:modelValue\":s[1]||(s[1]=n=>e.form.name_cont=n),placeholder:\"name\"},null,512),[[S,e.form.name_cont]])]),t(\"div\",at,[t(\"label\",null,i(e.$t(\"musicians.form.band\")),1),g(t(\"select\",{\"onUpdate:modelValue\":s[2]||(s[2]=n=>e.form.band_eq=n)},[t(\"option\",nt,i(e.$t(\"any\")),1),(r(!0),c(y,null,k(o.bands,n=>(r(),c(\"option\",{key:n.key,value:n.key},i(n.name),9,it))),128))],512),[[F,e.form.band_eq]])])]),t(\"div\",ot,[t(\"div\",rt,[t(\"input\",{type:\"submit\",role:\"button\",class:\"button button-primary\",value:e.$t(\"filter\")},null,8,ct)]),t(\"div\",lt,[t(\"a\",{onClick:s[3]||(s[3]=(...n)=>l.reset&&l.reset(...n)),href:\"#\",role:\"button\",class:\"secondary outline fill\"},i(e.$t(\"reset_filters\")),1)])])],544)])}const dt=v(tt,[[\"render\",ut]]),ht={components:{Filters:dt},setup(){return{store:A()}},mounted(){this.index()},methods:{index(){this.$api.call(this.store.index(this.$route.fullPath),this.$refs.listing)}}},mt={class:\"container\"},_t={class:\"row\"},pt={class:\"col-xs-12\"},ft={class:\"breadcrumb\"},vt={class:\"col-xs-12 ta-right\"},$t={ref:\"listing\"},bt={key:0},gt={key:1},yt={class:\"card ta-center\"},kt=t(\"p\",null,'This whole CRUD section is deliberatly slowed down so you can actually see the animations. Comment out the \"slow\" method in Api::Admin::MusiciansController to use the app at full speed',-1);function wt(e,s,o,u,h,l){const n=p(\"router-link\"),a=p(\"filters\"),$=p(\"pagination\");return r(),c(\"section\",mt,[t(\"div\",_t,[t(\"div\",pt,[t(\"ul\",ft,[t(\"li\",null,[d(n,{to:{name:\"root_path\"}},{default:m(()=>[_(i(e.$t(\"title\")),1)]),_:1})]),t(\"li\",null,i(e.$t(\"nav.musicians\")),1)])]),t(\"div\",vt,[d(n,{to:{name:\"new_musician_path\"},role:\"button\",class:\"outline\"},{default:m(()=>[_(i(e.$t(\"musicians.create\")),1)]),_:1})])]),d(a,{bands:u.store.bands},null,8,[\"bands\"]),t(\"div\",$t,[u.store.musicians&&u.store.musicians.length>0?(r(),c(\"table\",bt,[t(\"thead\",null,[t(\"tr\",null,[t(\"th\",null,i(e.$t(\"musicians.form.id\")),1),t(\"th\",null,i(e.$t(\"musicians.form.name\")),1),t(\"th\",null,i(e.$t(\"musicians.form.band\")),1)])]),t(\"tbody\",null,[(r(!0),c(y,null,k(u.store.musicians,b=>(r(),c(\"tr\",{key:b.id},[t(\"td\",null,[d(n,{to:{name:\"edit_musician_path\",params:{id:b.id}}},{default:m(()=>[_(i(b.id),1)]),_:2},1032,[\"to\"])]),t(\"td\",null,[d(n,{to:{name:\"edit_musician_path\",params:{id:b.id}}},{default:m(()=>[_(i(b.name),1)]),_:2},1032,[\"to\"])]),t(\"td\",null,[d(n,{to:{name:\"edit_musician_path\",params:{id:b.id}}},{default:m(()=>[_(i(b.band),1)]),_:2},1032,[\"to\"])])]))),128))])])):(r(),c(\"div\",gt,[t(\"h3\",yt,i(e.$t(\"no_result\")),1)])),u.store.pagination?(r(),x($,{key:2,store:u.store,onClicked:l.index},null,8,[\"store\",\"onClicked\"])):f(\"\",!0)],512),kt])}const xt=v(ht,[[\"render\",wt]]),Ct={props:[\"attr\",\"messages\"],data(){return{message:\"\"}},watch:{messages:function(){this.message=\"\",this.messages[this.attr]&&(this.message=this.messages[this.attr].join(\",\"))}}},St={key:0,class:\"error\"};function Ft(e,s,o,u,h,l){return h.message!=\"\"?(r(),c(\"span\",St,i(h.message),1)):f(\"\",!0)}const At=v(Ct,[[\"render\",Ft]]),qt={props:[\"data\"],components:{Errors:At}},Vt=[\"aria-invalid\"],Mt=[\"aria-invalid\"],Ut=[\"value\"];function Nt(e,s,o,u,h,l){const n=p(\"errors\");return r(),c(\"section\",null,[t(\"fieldset\",null,[t(\"label\",null,i(e.$t(\"musicians.form.name\")),1),d(n,{attr:\"name\",messages:o.data.errors},null,8,[\"messages\"]),g(t(\"input\",{type:\"text\",\"onUpdate:modelValue\":s[0]||(s[0]=a=>o.data.musician.name=a),\"aria-invalid\":o.data.errors.name?!0:\"\"},null,8,Vt),[[S,o.data.musician.name]])]),t(\"fieldset\",null,[t(\"label\",null,i(e.$t(\"musicians.form.band\")),1),d(n,{attr:\"band\",messages:o.data.errors},null,8,[\"messages\"]),g(t(\"select\",{\"onUpdate:modelValue\":s[1]||(s[1]=a=>o.data.musician.band=a),\"aria-invalid\":o.data.errors.band?!0:\"\"},[(r(!0),c(y,null,k(o.data.musician.bands,a=>(r(),c(\"option\",{key:a.key,value:a.key},i(a.name),9,Ut))),128))],8,Mt),[[F,o.data.musician.band]])])])}const U=v(qt,[[\"render\",Nt]]),jt={components:{MusicianForm:U},setup(){return{store:A()}},mounted(){this.$api.call(this.store.new(),this.$refs.animation)},methods:{create(e){this.$api.call(this.store.create(),e.target).then(s=>{s===!0&&this.$router.push({name:\"edit_musician_path\",params:{id:this.store.musician.id}})})}}},It={class:\"container\"},Tt={class:\"breadcrumb\"},Lt={ref:\"animation\"},Ot={class:\"row\"},Pt={class:\"col-sm-4 col-start-sm-21 ta-right\"},Et=[\"value\"];function Rt(e,s,o,u,h,l){const n=p(\"router-link\"),a=p(\"MusicianForm\");return r(),c(\"section\",It,[t(\"ul\",Tt,[t(\"li\",null,[d(n,{to:{name:\"root_path\"}},{default:m(()=>[_(i(e.$t(\"title\")),1)]),_:1})]),t(\"li\",null,[d(n,{to:{name:\"musicians_path\"}},{default:m(()=>[_(i(e.$t(\"nav.musicians\")),1)]),_:1})]),t(\"li\",null,[t(\"span\",null,i(e.$t(\"musicians.new\")),1)])]),t(\"div\",Lt,[t(\"form\",{onSubmit:s[0]||(s[0]=w((...$)=>l.create&&l.create(...$),[\"prevent\"])),\"accept-charset\":\"UTF-8\",class:\"card\"},[d(a,{data:u.store},null,8,[\"data\"]),t(\"div\",Ot,[t(\"div\",Pt,[t(\"input\",{type:\"submit\",value:e.$t(\"save\")},null,8,Et)])])],32)],512)])}const Bt=v(jt,[[\"render\",Rt]]),Dt={components:{MusicianForm:U},setup(){return{store:A()}},mounted(){this.$api.call(this.store.edit(this.$route.params.id),this.$refs.animation)},methods:{update(e){this.$api.call(this.store.update(this.$route.params.id),e.target)},destroy(){confirm(this.$t(\"confirm\"))&&this.$api.call(this.store.destroy(this.$route.params.id),this.$refs.animation).then(e=>{e===!0&&this.$router.push({name:\"musicians_path\"})})}}},Qt={class:\"container\"},Wt={class:\"breadcrumb\"},zt={ref:\"animation\"},Jt={class:\"row\"},Gt={class:\"col-sm-4 secondary outline\"},Ht={class:\"col-sm-4 col-start-sm-21 ta-right\"},Kt=[\"value\"];function Xt(e,s,o,u,h,l){const n=p(\"router-link\"),a=p(\"MusicianForm\");return r(),c(\"section\",Qt,[t(\"ul\",Wt,[t(\"li\",null,[d(n,{to:{name:\"root_path\"}},{default:m(()=>[_(i(e.$t(\"title\")),1)]),_:1})]),t(\"li\",null,[d(n,{to:{name:\"musicians_path\"}},{default:m(()=>[_(i(e.$t(\"nav.musicians\")),1)]),_:1})]),t(\"li\",null,i(u.store.musician.name),1)]),t(\"div\",zt,[t(\"form\",{ref:\"form\",onSubmit:s[1]||(s[1]=w((...$)=>l.update&&l.update(...$),[\"prevent\"])),\"accept-charset\":\"UTF-8\",class:\"card\"},[d(a,{data:u.store},null,8,[\"data\"]),t(\"div\",Jt,[t(\"div\",Gt,[t(\"a\",{onClick:s[0]||(s[0]=(...$)=>l.destroy&&l.destroy(...$)),href:\"#\",role:\"button\",class:\"secondary outline\"},i(e.$t(\"delete\")),1)]),t(\"div\",Ht,[t(\"input\",{type:\"submit\",value:e.$t(\"save\")},null,8,Kt)])])],544)],512)])}const Yt=v(Dt,[[\"render\",Xt]]),Zt={data(){return{message:\"\",messages:[]}},created(){this.$cable.on(\"chat\",e=>{this.messages.unshift(e.message)})},methods:{publish(){this.$cable.send(this.message),this.message=\"\"}}},te={class:\"container\"},ee={class:\"breadcrumb\"},se={class:\"row\"},ae={class:\"col-xs-24 col-sm-12 card\"},ne=t(\"br\",null,null,-1),ie=t(\"br\",null,null,-1),oe=t(\"input\",{type:\"submit\",value:\"Publish\"},null,-1),re=t(\"div\",{class:\"card\"},[t(\"p\",null,\"You can also push messages here from the server using the Rails console:\"),t(\"code\",null,'ActionCable.server.broadcast(\"ChatChannel\", { message: \"hey!\" })')],-1),ce={class:\"col-xs-24 col-sm-12 card\"},le=t(\"p\",null,[_(\"All messages you type are upcased \"),t(\"b\",null,\"server side\"),_(\" after a round trip. If you open multiple tabs, messages are broadcasted on all tabs.\")],-1),ue={key:0},de={key:1},he=t(\"p\",null,[t(\"i\",null,\"Waiting for messages...\")],-1),me=[he];function _e(e,s,o,u,h,l){const n=p(\"router-link\");return r(),c(\"section\",te,[t(\"ul\",ee,[t(\"li\",null,[d(n,{to:{name:\"root_path\"}},{default:m(()=>[_(i(e.$t(\"title\")),1)]),_:1})]),t(\"li\",null,i(e.$t(\"nav.websockets\")),1)]),t(\"div\",se,[t(\"div\",ae,[t(\"form\",{onSubmit:s[1]||(s[1]=w((...a)=>l.publish&&l.publish(...a),[\"prevent\"])),\"accept-charset\":\"UTF-8\"},[g(t(\"input\",{type:\"input\",\"onUpdate:modelValue\":s[0]||(s[0]=a=>h.message=a),placeholder:\"Type in a message\"},null,512),[[S,h.message]]),ne,ie,oe],32),re]),t(\"div\",ce,[le,h.messages.length>0?(r(),c(\"div\",ue,[(r(!0),c(y,null,k(h.messages,(a,$)=>(r(),c(\"p\",{key:$},[t(\"i\",null,i(a),1)]))),128))])):(r(),c(\"div\",de,me))])])])}const pe=v(Zt,[[\"render\",_e]]),fe=I({history:T(`/${I18n.prefix}admin`),routes:[{path:\"/\",component:Z,name:\"root_path\"},{path:\"/musicians\",component:xt,name:\"musicians_path\"},{path:\"/musicians/new\",component:Bt,name:\"new_musician_path\"},{path:\"/musicians/:id/edit\",component:Yt,name:\"edit_musician_path\"},{path:\"/websockets\",component:pe,name:\"websockets_path\"},{path:\"/404\",component:L},{path:\"/:catchAll(.*)\",redirect:\"/404\"}]}),ve={data(){return{availableLocales:window.I18n.availableLocales,locale:window.I18n.locale}},methods:{activeOn(e){return e.includes(this.$route.name)?\"active\":\"\"}},watch:{locale:function(e){let s=`/${e}${this.$route.path}`;e==this.availableLocales[0]&&(s=`${this.$route.path}`),window.location.href=s}}},$e={class:\"top-nav\"},be={class:\"container\"},ge={class:\"row\"},ye={class:\"col-md-16 col-lg-21\"},ke={href:\"/users/sign_out\"},we={class:\"col-md-8 col-lg-3\"},xe=[\"value\"];function Ce(e,s,o,u,h,l){const n=p(\"router-link\");return r(),c(\"section\",$e,[t(\"div\",be,[t(\"div\",ge,[t(\"div\",ye,[t(\"nav\",null,[t(\"ul\",null,[t(\"li\",{class:C(l.activeOn([\"root_path\"]))},[d(n,{to:{name:\"root_path\"}},{default:m(()=>[_(i(e.$t(\"nav.dashboard\")),1)]),_:1})],2),t(\"li\",{class:C(l.activeOn([\"musicians_path\",\"edit_musician_path\",\"new_musician_path\"]))},[d(n,{to:{name:\"musicians_path\"}},{default:m(()=>[_(i(e.$t(\"nav.musicians\")),1)]),_:1})],2),t(\"li\",{class:C(l.activeOn([\"websockets_path\"]))},[d(n,{to:{name:\"websockets_path\"}},{default:m(()=>[_(i(e.$t(\"nav.websockets\")),1)]),_:1})],2),t(\"li\",null,[t(\"a\",ke,i(e.$t(\"nav.logout\")),1)])])])]),t(\"div\",we,[g(t(\"select\",{\"onUpdate:modelValue\":s[0]||(s[0]=a=>h.locale=a)},[(r(!0),c(y,null,k(h.availableLocales,a=>(r(),c(\"option\",{value:a,key:a},i(a.toUpperCase()),9,xe))),128))],512),[[F,h.locale]])])])])])}const Se=v(ve,[[\"render\",Ce]]),Fe={components:{\"nav-bar\":Se}};function Ae(e,s,o,u,h,l){const n=p(\"nav-bar\"),a=p(\"router-view\");return r(),c(\"section\",null,[d(n),d(a)])}const qe=v(Fe,[[\"render\",Ae]]),Ve={props:[\"store\"],methods:{setQuery(e){let s=JSON.parse(JSON.stringify(this.$route.query));return s.page=e,s}},watch:{\"$route.query\":function(){this.$emit(\"clicked\")}}},Me={clas:\"container\"},Ue={key:0},Ne={class:\"pagination\"},je={key:0},Ie=t(\"span\",null,\"«\",-1),Te={key:1},Le={key:2},Oe={key:3},Pe={key:1},Ee=t(\"span\",null,\"»\",-1);function Re(e,s,o,u,h,l){const n=p(\"router-link\");return r(),c(\"section\",Me,[o.store.pagination.next||o.store.pagination.previous?(r(),c(\"div\",Ue,[t(\"ul\",Ne,[o.store.pagination.previous!=null?(r(),c(\"li\",je,[o.store.pagination.previous?(r(),x(n,{key:0,to:{path:e.$route.path,query:l.setQuery(o.store.pagination.previous)}},{default:m(()=>[Ie]),_:1},8,[\"to\"])):f(\"\",!0)])):f(\"\",!0),(r(!0),c(y,null,k(o.store.pagination.pages,a=>(r(),c(\"li\",{key:a,class:C([o.store.pagination.current==a?\"active\":\"\"])},[a!=o.store.pagination.current&&(a==1||a==2||a==3||a==o.store.pagination.pages||a==o.store.pagination.pages-1||a==o.store.pagination.pages-2)?(r(),x(n,{key:0,to:{path:e.$route.path,query:l.setQuery(a)}},{default:m(()=>[_(i(a),1)]),_:2},1032,[\"to\"])):f(\"\",!0),a!=o.store.pagination.current&&a==4?(r(),c(\"span\",Te,\"...\")):f(\"\",!0),a==o.store.pagination.current?(r(),c(\"span\",Le,i(a),1)):f(\"\",!0),a==o.store.pagination.current&&a==4?(r(),c(\"span\",Oe,\"...\")):f(\"\",!0)],2))),128)),o.store.pagination.next!=null&&o.store.pagination.pages>0?(r(),c(\"li\",Pe,[o.store.pagination.next?(r(),x(n,{key:0,to:{path:e.$route.path,query:l.setQuery(o.store.pagination.next)}},{default:m(()=>[Ee]),_:1},8,[\"to\"])):f(\"\",!0)])):f(\"\",!0)])])):f(\"\",!0)])}const Be=v(Ve,[[\"render\",Re]]),N=O(qe),De=P({channel:\"ChatChannel\"}),Qe=E({handler:M,namespace:\"/admin\"}),j=R();j.use(({store:e})=>{e.axios=M});const We=B({locale:\"current\",messages:translations});N.component(\"pagination\",Be);N.use(fe).use(j).use(We).use(Qe).use(De).mount(\"#app\");\n"
  },
  {
    "path": "public/vite-test/assets/front-f6acb49a.js",
    "content": "import{d as I,_ as m,g as p,o as c,c as l,a as e,t as s,h,i as _,w as f,l as u,F as w,r as k,m as A,n as L,E as M,p as b,e as S,f as z,q as B,s as N,u as V,x,A as C,y as E}from\"./vue-i18n-6b73e0ca.js\";const v=I(\"musicians\",{state:()=>({musician:{},musicians:[]}),actions:{async index(){return this.axios.get(\"/musicians\").then(t=>{this.musicians=t.data.musicians})},async show(t){return this.axios.get(`/musicians/${t}`).then(n=>{this.musician=n.data.musician})}}}),O={setup(){return{store:v()}},methods:{unauthorized(){this.$api.call(this.store.show(\"this-will-trigger-a-401\"))},crash(){this.$api.call(this.store.show(\"this-will-trigger-a-500\"))}}},P={class:\"container\"},D={href:\"/dead-link\"},F=e(\"br\",null,null,-1),T={href:\"/admin\"};function U(t,n,$,r,d,o){const i=p(\"router-link\");return c(),l(\"section\",P,[e(\"h1\",null,s(t.$t(\"pages.title\")),1),e(\"p\",null,[e(\"a\",D,s(t.$t(\"pages.server_404\")),1)]),e(\"p\",null,[h(i,{to:\"/dead-link\"},{default:_(()=>[u(s(t.$t(\"pages.client_404\")),1)]),_:1})]),e(\"p\",null,[e(\"a\",{onClick:n[0]||(n[0]=f((...a)=>o.unauthorized&&o.unauthorized(...a),[\"prevent\"])),href:\"#\"},s(t.$t(\"pages.server_401\")),1)]),e(\"p\",null,[e(\"a\",{onClick:n[1]||(n[1]=f((...a)=>o.crash&&o.crash(...a),[\"prevent\"])),href:\"#\"},s(t.$t(\"pages.server_500\")),1)]),F,e(\"p\",null,[e(\"a\",T,s(t.$t(\"pages.admin_link\")),1)])])}const q=m(O,[[\"render\",U]]),H={setup(){return{store:v()}},created(){this.$api.call(this.store.index())}},R={class:\"container\"},W={class:\"breadcrumb\"},j={class:\"row\"};function G(t,n,$,r,d,o){const i=p(\"router-link\");return c(),l(\"section\",R,[e(\"h1\",null,s(t.$t(\"home.title\")),1),e(\"ul\",W,[e(\"li\",null,[e(\"span\",null,s(t.$t(\"home.breadcrumb\")),1)])]),e(\"div\",j,[(c(!0),l(w,null,k(r.store.musicians,a=>(c(),l(\"div\",{key:a.id,class:\"col-xs-24 col-md-6 card\"},[h(i,{to:{name:\"musician_path\",params:{id:a.id}}},{default:_(()=>[u(s(a.name),1)]),_:2},1032,[\"to\"])]))),128))])])}const g=m(H,[[\"render\",G]]),J={setup(){return{store:v()}},created(){this.$api.call(this.store.show(this.$route.params.id))}},K={class:\"container\"},Q={class:\"breadcrumb\"},X=e(\"br\",null,null,-1),Y=e(\"br\",null,null,-1);function Z(t,n,$,r,d,o){const i=p(\"router-link\");return c(),l(\"section\",K,[e(\"h1\",null,s(t.$t(\"home.title\")),1),e(\"ul\",Q,[e(\"li\",null,[h(i,{to:{name:\"root_path\"}},{default:_(()=>[u(s(t.$t(\"home.breadcrumb\")),1)]),_:1})]),e(\"li\",null,s(r.store.musician.name),1)]),e(\"h2\",null,s(t.$t(\"musicians.title\")),1),e(\"p\",null,[e(\"b\",null,s(t.$t(\"musicians.id\"))+\":\",1),u(\" \"+s(r.store.musician.id),1),X,e(\"b\",null,s(t.$t(\"musicians.name\"))+\":\",1),u(\" \"+s(r.store.musician.name),1),Y,e(\"b\",null,s(t.$t(\"musicians.band\"))+\":\",1),u(\" \"+s(r.store.musician.band),1)])])}const ee=m(J,[[\"render\",Z]]),te=A({history:L(`/${I18n.prefix}`),routes:[{path:\"/\",component:g,name:\"root_path\"},{path:\"/pages\",component:q,name:\"pages_path\"},{path:\"/musicians\",component:g,name:\"musicians_path\"},{path:\"/musicians/:id\",component:ee,name:\"musician_path\"},{path:\"/404\",component:M},{path:\"/:catchAll(.*)\",redirect:\"/404\"}]}),se={data(){return{availableLocales:window.I18n.availableLocales,locale:window.I18n.locale}},methods:{activeOn(t){return t.includes(this.$route.name)?\"active\":\"\"}},watch:{locale:function(t){let n=`/${t}${this.$route.path}`;t==this.availableLocales[0]&&(n=`${this.$route.path}`),window.location.href=n}}},ne={class:\"top-nav\"},ae={class:\"container\"},oe={class:\"row\"},ie={class:\"col-md-16 col-lg-21\"},re={class:\"col-md-8 col-lg-3\"},ce=[\"value\"];function le(t,n,$,r,d,o){const i=p(\"router-link\");return c(),l(\"section\",ne,[e(\"div\",ae,[e(\"div\",oe,[e(\"div\",ie,[e(\"nav\",null,[e(\"ul\",null,[e(\"li\",{class:b(o.activeOn([\"root_path\",\"musicians_path\",\"musician_path\"]))},[h(i,{to:\"/\"},{default:_(()=>[u(s(t.$t(\"nav.homepage\")),1)]),_:1})],2),e(\"li\",{class:b(o.activeOn([\"pages_path\"]))},[h(i,{to:{name:\"pages_path\"}},{default:_(()=>[u(s(t.$t(\"nav.pages\")),1)]),_:1})],2)])])]),e(\"div\",re,[S(e(\"select\",{\"onUpdate:modelValue\":n[0]||(n[0]=a=>d.locale=a)},[(c(!0),l(w,null,k(d.availableLocales,a=>(c(),l(\"option\",{value:a,key:a},s(a.toUpperCase()),9,ce))),128))],512),[[z,d.locale]])])])])])}const ue=m(se,[[\"render\",le]]),de={components:{\"nav-bar\":ue}};function he(t,n,$,r,d,o){const i=p(\"nav-bar\"),a=p(\"router-view\");return c(),l(\"div\",null,[h(i),h(a)])}const pe=m(de,[[\"render\",he]]),_e=B(pe),me=N({channel:\"ChatChannel\"}),$e=V({handler:C,namespace:\"\"}),y=x();y.use(({store:t})=>{t.axios=C});const ve=E({locale:\"current\",messages:translations});_e.use(te).use(y).use(ve).use($e).use(me).mount(\"#app\");\n"
  },
  {
    "path": "public/vite-test/assets/vue-i18n-6b73e0ca.js",
    "content": "function Xs(e,t){const n=Object.create(null),r=e.split(\",\");for(let o=0;o<r.length;o++)n[r[o]]=!0;return t?o=>!!n[o.toLowerCase()]:o=>!!n[o]}const _e={},nn=[],nt=()=>{},xc=()=>!1,Pr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Js=e=>e.startsWith(\"onUpdate:\"),ke=Object.assign,zs=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Fc=Object.prototype.hasOwnProperty,ie=(e,t)=>Fc.call(e,t),G=Array.isArray,rn=e=>Jn(e)===\"[object Map]\",Ir=e=>Jn(e)===\"[object Set]\",Uo=e=>Jn(e)===\"[object Date]\",Q=e=>typeof e==\"function\",Le=e=>typeof e==\"string\",an=e=>typeof e==\"symbol\",he=e=>e!==null&&typeof e==\"object\",Al=e=>(he(e)||Q(e))&&Q(e.then)&&Q(e.catch),Ll=Object.prototype.toString,Jn=e=>Ll.call(e),Mc=e=>Jn(e).slice(8,-1),Cl=e=>Jn(e)===\"[object Object]\",Qs=e=>Le(e)&&e!==\"NaN\"&&e[0]!==\"-\"&&\"\"+parseInt(e,10)===e,ur=Xs(\",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"),wr=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Dc=/-(\\w)/g,ht=wr(e=>e.replace(Dc,(t,n)=>n?n.toUpperCase():\"\")),Uc=/\\B([A-Z])/g,bn=wr(e=>e.replace(Uc,\"-$1\").toLowerCase()),kr=wr(e=>e.charAt(0).toUpperCase()+e.slice(1)),ts=wr(e=>e?`on${kr(e)}`:\"\"),Xt=(e,t)=>!Object.is(e,t),fr=(e,t)=>{for(let n=0;n<e.length;n++)e[n](t)},yr=(e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Or=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let $o;const ps=()=>$o||($o=typeof globalThis<\"u\"?globalThis:typeof self<\"u\"?self:typeof window<\"u\"?window:typeof global<\"u\"?global:{});function Zs(e){if(G(e)){const t={};for(let n=0;n<e.length;n++){const r=e[n],o=Le(r)?Wc(r):Zs(r);if(o)for(const s in o)t[s]=o[s]}return t}else if(Le(e)||he(e))return e}const $c=/;(?![^(]*\\))/g,jc=/:([^]+)/,Hc=/\\/\\*[^]*?\\*\\//g;function Wc(e){const t={};return e.replace(Hc,\"\").split($c).forEach(n=>{if(n){const r=n.split(jc);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function eo(e){let t=\"\";if(Le(e))t=e;else if(G(e))for(let n=0;n<e.length;n++){const r=eo(e[n]);r&&(t+=r+\" \")}else if(he(e))for(const n in e)e[n]&&(t+=n+\" \");return t.trim()}const Bc=\"itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly\",Vc=Xs(Bc);function Pl(e){return!!e||e===\"\"}function Kc(e,t){if(e.length!==t.length)return!1;let n=!0;for(let r=0;n&&r<e.length;r++)n=xr(e[r],t[r]);return n}function xr(e,t){if(e===t)return!0;let n=Uo(e),r=Uo(t);if(n||r)return n&&r?e.getTime()===t.getTime():!1;if(n=an(e),r=an(t),n||r)return e===t;if(n=G(e),r=G(t),n||r)return n&&r?Kc(e,t):!1;if(n=he(e),r=he(t),n||r){if(!n||!r)return!1;const o=Object.keys(e).length,s=Object.keys(t).length;if(o!==s)return!1;for(const i in e){const l=e.hasOwnProperty(i),a=t.hasOwnProperty(i);if(l&&!a||!l&&a||!xr(e[i],t[i]))return!1}}return String(e)===String(t)}function Yc(e,t){return e.findIndex(n=>xr(n,t))}const j_=e=>Le(e)?e:e==null?\"\":G(e)||he(e)&&(e.toString===Ll||!Q(e.toString))?JSON.stringify(e,Il,2):String(e),Il=(e,t)=>t&&t.__v_isRef?Il(e,t.value):rn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,o])=>(n[`${r} =>`]=o,n),{})}:Ir(t)?{[`Set(${t.size})`]:[...t.values()]}:he(t)&&!G(t)&&!Cl(t)?String(t):t;let Ge;class wl{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Ge,!t&&Ge&&(this.index=(Ge.scopes||(Ge.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Ge;try{return Ge=this,t()}finally{Ge=n}}}on(){Ge=this}off(){Ge=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n<r;n++)this.effects[n].stop();for(n=0,r=this.cleanups.length;n<r;n++)this.cleanups[n]();if(this.scopes)for(n=0,r=this.scopes.length;n<r;n++)this.scopes[n].stop(!0);if(!this.detached&&this.parent&&!t){const o=this.parent.scopes.pop();o&&o!==this&&(this.parent.scopes[this.index]=o,o.index=this.index)}this.parent=void 0,this._active=!1}}}function to(e){return new wl(e)}function Gc(e,t=Ge){t&&t.active&&t.effects.push(e)}function kl(){return Ge}function qc(e){Ge&&Ge.cleanups.push(e)}const no=e=>{const t=new Set(e);return t.w=0,t.n=0,t},xl=e=>(e.w&Mt)>0,Fl=e=>(e.n&Mt)>0,Xc=({deps:e})=>{if(e.length)for(let t=0;t<e.length;t++)e[t].w|=Mt},Jc=e=>{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r<t.length;r++){const o=t[r];xl(o)&&!Fl(o)?o.delete(e):t[n++]=o,o.w&=~Mt,o.n&=~Mt}t.length=n}},Tr=new WeakMap;let Cn=0,Mt=1;const _s=30;let Ze;const Gt=Symbol(\"\"),gs=Symbol(\"\");class ro{constructor(t,n=null,r){this.fn=t,this.scheduler=n,this.active=!0,this.deps=[],this.parent=void 0,Gc(this,r)}run(){if(!this.active)return this.fn();let t=Ze,n=wt;for(;t;){if(t===this)return;t=t.parent}try{return this.parent=Ze,Ze=this,wt=!0,Mt=1<<++Cn,Cn<=_s?Xc(this):jo(this),this.fn()}finally{Cn<=_s&&Jc(this),Mt=1<<--Cn,Ze=this.parent,wt=n,this.parent=void 0,this.deferStop&&this.stop()}}stop(){Ze===this?this.deferStop=!0:this.active&&(jo(this),this.onStop&&this.onStop(),this.active=!1)}}function jo(e){const{deps:t}=e;if(t.length){for(let n=0;n<t.length;n++)t[n].delete(e);t.length=0}}let wt=!0;const Ml=[];function En(){Ml.push(wt),wt=!1}function yn(){const e=Ml.pop();wt=e===void 0?!0:e}function Ve(e,t,n){if(wt&&Ze){let r=Tr.get(e);r||Tr.set(e,r=new Map);let o=r.get(n);o||r.set(n,o=no()),Dl(o)}}function Dl(e,t){let n=!1;Cn<=_s?Fl(e)||(e.n|=Mt,n=!xl(e)):n=!e.has(Ze),n&&(e.add(Ze),Ze.deps.push(e))}function yt(e,t,n,r,o,s){const i=Tr.get(e);if(!i)return;let l=[];if(t===\"clear\")l=[...i.values()];else if(n===\"length\"&&G(e)){const a=Number(r);i.forEach((f,d)=>{(d===\"length\"||!an(d)&&d>=a)&&l.push(f)})}else switch(n!==void 0&&l.push(i.get(n)),t){case\"add\":G(e)?Qs(n)&&l.push(i.get(\"length\")):(l.push(i.get(Gt)),rn(e)&&l.push(i.get(gs)));break;case\"delete\":G(e)||(l.push(i.get(Gt)),rn(e)&&l.push(i.get(gs)));break;case\"set\":rn(e)&&l.push(i.get(Gt));break}if(l.length===1)l[0]&&bs(l[0]);else{const a=[];for(const f of l)f&&a.push(...f);bs(no(a))}}function bs(e,t){const n=G(e)?e:[...e];for(const r of n)r.computed&&Ho(r);for(const r of n)r.computed||Ho(r)}function Ho(e,t){(e!==Ze||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}function zc(e,t){var n;return(n=Tr.get(e))==null?void 0:n.get(t)}const Qc=Xs(\"__proto__,__v_isRef,__isVue\"),Ul=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!==\"arguments\"&&e!==\"caller\").map(e=>Symbol[e]).filter(an)),Wo=Zc();function Zc(){const e={};return[\"includes\",\"indexOf\",\"lastIndexOf\"].forEach(t=>{e[t]=function(...n){const r=le(this);for(let s=0,i=this.length;s<i;s++)Ve(r,\"get\",s+\"\");const o=r[t](...n);return o===-1||o===!1?r[t](...n.map(le)):o}}),[\"push\",\"pop\",\"shift\",\"unshift\",\"splice\"].forEach(t=>{e[t]=function(...n){En();const r=le(this)[t].apply(this,n);return yn(),r}}),e}function eu(e){const t=le(this);return Ve(t,\"has\",e),t.hasOwnProperty(e)}class $l{constructor(t=!1,n=!1){this._isReadonly=t,this._shallow=n}get(t,n,r){const o=this._isReadonly,s=this._shallow;if(n===\"__v_isReactive\")return!o;if(n===\"__v_isReadonly\")return o;if(n===\"__v_isShallow\")return s;if(n===\"__v_raw\"&&r===(o?s?hu:Bl:s?Wl:Hl).get(t))return t;const i=G(t);if(!o){if(i&&ie(Wo,n))return Reflect.get(Wo,n,r);if(n===\"hasOwnProperty\")return eu}const l=Reflect.get(t,n,r);return(an(n)?Ul.has(n):Qc(n))||(o||Ve(t,\"get\",n),s)?l:Te(l)?i&&Qs(n)?l:l.value:he(l)?o?Kl(l):zn(l):l}}class jl extends $l{constructor(t=!1){super(!1,t)}set(t,n,r,o){let s=t[n];if(cn(s)&&Te(s)&&!Te(r))return!1;if(!this._shallow&&(!vr(r)&&!cn(r)&&(s=le(s),r=le(r)),!G(t)&&Te(s)&&!Te(r)))return s.value=r,!0;const i=G(t)&&Qs(n)?Number(n)<t.length:ie(t,n),l=Reflect.set(t,n,r,o);return t===le(o)&&(i?Xt(r,s)&&yt(t,\"set\",n,r):yt(t,\"add\",n,r)),l}deleteProperty(t,n){const r=ie(t,n);t[n];const o=Reflect.deleteProperty(t,n);return o&&r&&yt(t,\"delete\",n,void 0),o}has(t,n){const r=Reflect.has(t,n);return(!an(n)||!Ul.has(n))&&Ve(t,\"has\",n),r}ownKeys(t){return Ve(t,\"iterate\",G(t)?\"length\":Gt),Reflect.ownKeys(t)}}class tu extends $l{constructor(t=!1){super(!0,t)}set(t,n){return!0}deleteProperty(t,n){return!0}}const nu=new jl,ru=new tu,su=new jl(!0),so=e=>e,Fr=e=>Reflect.getPrototypeOf(e);function nr(e,t,n=!1,r=!1){e=e.__v_raw;const o=le(e),s=le(t);n||(Xt(t,s)&&Ve(o,\"get\",t),Ve(o,\"get\",s));const{has:i}=Fr(o),l=r?so:n?lo:Un;if(i.call(o,t))return l(e.get(t));if(i.call(o,s))return l(e.get(s));e!==o&&e.get(t)}function rr(e,t=!1){const n=this.__v_raw,r=le(n),o=le(e);return t||(Xt(e,o)&&Ve(r,\"has\",e),Ve(r,\"has\",o)),e===o?n.has(e):n.has(e)||n.has(o)}function sr(e,t=!1){return e=e.__v_raw,!t&&Ve(le(e),\"iterate\",Gt),Reflect.get(e,\"size\",e)}function Bo(e){e=le(e);const t=le(this);return Fr(t).has.call(t,e)||(t.add(e),yt(t,\"add\",e,e)),this}function Vo(e,t){t=le(t);const n=le(this),{has:r,get:o}=Fr(n);let s=r.call(n,e);s||(e=le(e),s=r.call(n,e));const i=o.call(n,e);return n.set(e,t),s?Xt(t,i)&&yt(n,\"set\",e,t):yt(n,\"add\",e,t),this}function Ko(e){const t=le(this),{has:n,get:r}=Fr(t);let o=n.call(t,e);o||(e=le(e),o=n.call(t,e)),r&&r.call(t,e);const s=t.delete(e);return o&&yt(t,\"delete\",e,void 0),s}function Yo(){const e=le(this),t=e.size!==0,n=e.clear();return t&&yt(e,\"clear\",void 0,void 0),n}function or(e,t){return function(r,o){const s=this,i=s.__v_raw,l=le(i),a=t?so:e?lo:Un;return!e&&Ve(l,\"iterate\",Gt),i.forEach((f,d)=>r.call(o,a(f),a(d),s))}}function ir(e,t,n){return function(...r){const o=this.__v_raw,s=le(o),i=rn(s),l=e===\"entries\"||e===Symbol.iterator&&i,a=e===\"keys\"&&i,f=o[e](...r),d=n?so:t?lo:Un;return!t&&Ve(s,\"iterate\",a?gs:Gt),{next(){const{value:h,done:m}=f.next();return m?{value:h,done:m}:{value:l?[d(h[0]),d(h[1])]:d(h),done:m}},[Symbol.iterator](){return this}}}}function St(e){return function(...t){return e===\"delete\"?!1:e===\"clear\"?void 0:this}}function ou(){const e={get(s){return nr(this,s)},get size(){return sr(this)},has:rr,add:Bo,set:Vo,delete:Ko,clear:Yo,forEach:or(!1,!1)},t={get(s){return nr(this,s,!1,!0)},get size(){return sr(this)},has:rr,add:Bo,set:Vo,delete:Ko,clear:Yo,forEach:or(!1,!0)},n={get(s){return nr(this,s,!0)},get size(){return sr(this,!0)},has(s){return rr.call(this,s,!0)},add:St(\"add\"),set:St(\"set\"),delete:St(\"delete\"),clear:St(\"clear\"),forEach:or(!0,!1)},r={get(s){return nr(this,s,!0,!0)},get size(){return sr(this,!0)},has(s){return rr.call(this,s,!0)},add:St(\"add\"),set:St(\"set\"),delete:St(\"delete\"),clear:St(\"clear\"),forEach:or(!0,!0)};return[\"keys\",\"values\",\"entries\",Symbol.iterator].forEach(s=>{e[s]=ir(s,!1,!1),n[s]=ir(s,!0,!1),t[s]=ir(s,!1,!0),r[s]=ir(s,!0,!0)}),[e,n,t,r]}const[iu,lu,au,cu]=ou();function oo(e,t){const n=t?e?cu:au:e?lu:iu;return(r,o,s)=>o===\"__v_isReactive\"?!e:o===\"__v_isReadonly\"?e:o===\"__v_raw\"?r:Reflect.get(ie(n,o)&&o in r?n:r,o,s)}const uu={get:oo(!1,!1)},fu={get:oo(!1,!0)},du={get:oo(!0,!1)},Hl=new WeakMap,Wl=new WeakMap,Bl=new WeakMap,hu=new WeakMap;function mu(e){switch(e){case\"Object\":case\"Array\":return 1;case\"Map\":case\"Set\":case\"WeakMap\":case\"WeakSet\":return 2;default:return 0}}function pu(e){return e.__v_skip||!Object.isExtensible(e)?0:mu(Mc(e))}function zn(e){return cn(e)?e:io(e,!1,nu,uu,Hl)}function Vl(e){return io(e,!1,su,fu,Wl)}function Kl(e){return io(e,!0,ru,du,Bl)}function io(e,t,n,r,o){if(!he(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const s=o.get(e);if(s)return s;const i=pu(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return o.set(e,l),l}function kt(e){return cn(e)?kt(e.__v_raw):!!(e&&e.__v_isReactive)}function cn(e){return!!(e&&e.__v_isReadonly)}function vr(e){return!!(e&&e.__v_isShallow)}function Yl(e){return kt(e)||cn(e)}function le(e){const t=e&&e.__v_raw;return t?le(t):e}function Mr(e){return yr(e,\"__v_skip\",!0),e}const Un=e=>he(e)?zn(e):e,lo=e=>he(e)?Kl(e):e;function Gl(e){wt&&Ze&&(e=le(e),Dl(e.dep||(e.dep=no())))}function ql(e,t){e=le(e);const n=e.dep;n&&bs(n)}function Te(e){return!!(e&&e.__v_isRef===!0)}function qe(e){return Jl(e,!1)}function Xl(e){return Jl(e,!0)}function Jl(e,t){return Te(e)?e:new _u(e,t)}class _u{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:le(t),this._value=n?t:Un(t)}get value(){return Gl(this),this._value}set value(t){const n=this.__v_isShallow||vr(t)||cn(t);t=n?t:le(t),Xt(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:Un(t),ql(this))}}function sn(e){return Te(e)?e.value:e}const gu={get:(e,t,n)=>sn(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return Te(o)&&!Te(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function zl(e){return kt(e)?e:new Proxy(e,gu)}function bu(e){const t=G(e)?new Array(e.length):{};for(const n in e)t[n]=yu(e,n);return t}class Eu{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return zc(le(this._object),this._key)}}function yu(e,t,n){const r=e[t];return Te(r)?r:new Eu(e,t,n)}class Ou{constructor(t,n,r,o){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new ro(t,()=>{this._dirty||(this._dirty=!0,ql(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=r}get value(){const t=le(this);return Gl(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function Tu(e,t,n=!1){let r,o;const s=Q(e);return s?(r=e,o=nt):(r=e.get,o=e.set),new Ou(r,o,s||!o,n)}function xt(e,t,n,r){let o;try{o=r?e(...r):e()}catch(s){Dr(s,t,n)}return o}function rt(e,t,n,r){if(Q(e)){const s=xt(e,t,n,r);return s&&Al(s)&&s.catch(i=>{Dr(i,t,n)}),s}const o=[];for(let s=0;s<e.length;s++)o.push(rt(e[s],t,n,r));return o}function Dr(e,t,n,r=!0){const o=t?t.vnode:null;if(t){let s=t.parent;const i=t.proxy,l=n;for(;s;){const f=s.ec;if(f){for(let d=0;d<f.length;d++)if(f[d](e,i,l)===!1)return}s=s.parent}const a=t.appContext.config.errorHandler;if(a){xt(a,null,10,[e,i,l]);return}}vu(e,n,o,r)}function vu(e,t,n,r=!0){console.error(e)}let $n=!1,Es=!1;const Fe=[];let ut=0;const on=[];let bt=null,Bt=0;const Ql=Promise.resolve();let ao=null;function co(e){const t=ao||Ql;return e?t.then(this?e.bind(this):e):t}function Su(e){let t=ut+1,n=Fe.length;for(;t<n;){const r=t+n>>>1,o=Fe[r],s=jn(o);s<e||s===e&&o.pre?t=r+1:n=r}return t}function uo(e){(!Fe.length||!Fe.includes(e,$n&&e.allowRecurse?ut+1:ut))&&(e.id==null?Fe.push(e):Fe.splice(Su(e.id),0,e),Zl())}function Zl(){!$n&&!Es&&(Es=!0,ao=Ql.then(ta))}function Nu(e){const t=Fe.indexOf(e);t>ut&&Fe.splice(t,1)}function Ru(e){G(e)?on.push(...e):(!bt||!bt.includes(e,e.allowRecurse?Bt+1:Bt))&&on.push(e),Zl()}function Go(e,t=$n?ut+1:0){for(;t<Fe.length;t++){const n=Fe[t];n&&n.pre&&(Fe.splice(t,1),t--,n())}}function ea(e){if(on.length){const t=[...new Set(on)];if(on.length=0,bt){bt.push(...t);return}for(bt=t,bt.sort((n,r)=>jn(n)-jn(r)),Bt=0;Bt<bt.length;Bt++)bt[Bt]();bt=null,Bt=0}}const jn=e=>e.id==null?1/0:e.id,Au=(e,t)=>{const n=jn(e)-jn(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function ta(e){Es=!1,$n=!0,Fe.sort(Au);const t=nt;try{for(ut=0;ut<Fe.length;ut++){const n=Fe[ut];n&&n.active!==!1&&xt(n,null,14)}}finally{ut=0,Fe.length=0,ea(),$n=!1,ao=null,(Fe.length||on.length)&&ta()}}function Lu(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||_e;let o=n;const s=t.startsWith(\"update:\"),i=s&&t.slice(7);if(i&&i in r){const d=`${i===\"modelValue\"?\"model\":i}Modifiers`,{number:h,trim:m}=r[d]||_e;m&&(o=n.map(b=>Le(b)?b.trim():b)),h&&(o=n.map(Or))}let l,a=r[l=ts(t)]||r[l=ts(ht(t))];!a&&s&&(a=r[l=ts(bn(t))]),a&&rt(a,e,6,o);const f=r[l+\"Once\"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,rt(f,e,6,o)}}function na(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(o!==void 0)return o;const s=e.emits;let i={},l=!1;if(!Q(e)){const a=f=>{const d=na(f,t,!0);d&&(l=!0,ke(i,d))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!s&&!l?(he(e)&&r.set(e,null),null):(G(s)?s.forEach(a=>i[a]=null):ke(i,s),he(e)&&r.set(e,i),i)}function Ur(e,t){return!e||!Pr(t)?!1:(t=t.slice(2).replace(/Once$/,\"\"),ie(e,t[0].toLowerCase()+t.slice(1))||ie(e,bn(t))||ie(e,t))}let Be=null,ra=null;function Sr(e){const t=Be;return Be=e,ra=e&&e.type.__scopeId||null,t}function Cu(e,t=Be,n){if(!t||e._n)return e;const r=(...o)=>{r._d&&si(-1);const s=Sr(t);let i;try{i=e(...o)}finally{Sr(s),r._d&&si(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function ns(e){const{type:t,vnode:n,proxy:r,withProxy:o,props:s,propsOptions:[i],slots:l,attrs:a,emit:f,render:d,renderCache:h,data:m,setupState:b,ctx:y,inheritAttrs:S}=e;let A,g;const v=Sr(e);try{if(n.shapeFlag&4){const T=o||r,k=T;A=ct(d.call(k,T,h,s,b,m,y)),g=a}else{const T=t;A=ct(T.length>1?T(s,{attrs:a,slots:l,emit:f}):T(s,null)),g=t.props?a:Pu(a)}}catch(T){kn.length=0,Dr(T,e,1),A=$e(Jt)}let L=A;if(g&&S!==!1){const T=Object.keys(g),{shapeFlag:k}=L;T.length&&k&7&&(i&&T.some(Js)&&(g=Iu(g,i)),L=un(L,g))}return n.dirs&&(L=un(L),L.dirs=L.dirs?L.dirs.concat(n.dirs):n.dirs),n.transition&&(L.transition=n.transition),A=L,Sr(v),A}const Pu=e=>{let t;for(const n in e)(n===\"class\"||n===\"style\"||Pr(n))&&((t||(t={}))[n]=e[n]);return t},Iu=(e,t)=>{const n={};for(const r in e)(!Js(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function wu(e,t,n){const{props:r,children:o,component:s}=e,{props:i,children:l,patchFlag:a}=t,f=s.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return r?qo(r,i,f):!!i;if(a&8){const d=t.dynamicProps;for(let h=0;h<d.length;h++){const m=d[h];if(i[m]!==r[m]&&!Ur(f,m))return!0}}}else return(o||l)&&(!l||!l.$stable)?!0:r===i?!1:r?i?qo(r,i,f):!0:!!i;return!1}function qo(e,t,n){const r=Object.keys(t);if(r.length!==Object.keys(e).length)return!0;for(let o=0;o<r.length;o++){const s=r[o];if(t[s]!==e[s]&&!Ur(n,s))return!0}return!1}function ku({vnode:e,parent:t},n){for(;t&&t.subTree===e;)(e=t.vnode).el=n,t=t.parent}const sa=\"components\";function H_(e,t){return Fu(sa,e,!0,t)||e}const xu=Symbol.for(\"v-ndc\");function Fu(e,t,n=!0,r=!1){const o=Be||Ne;if(o){const s=o.type;if(e===sa){const l=Cf(s,!1);if(l&&(l===t||l===ht(t)||l===kr(ht(t))))return s}const i=Xo(o[e]||s[e],t)||Xo(o.appContext[e],t);return!i&&r?s:i}}function Xo(e,t){return e&&(e[t]||e[ht(t)]||e[kr(ht(t))])}const Mu=e=>e.__isSuspense;function Du(e,t){t&&t.pendingBranch?G(e)?t.effects.push(...e):t.effects.push(e):Ru(e)}const lr={};function Ft(e,t,n){return oa(e,t,n)}function oa(e,t,{immediate:n,deep:r,flush:o,onTrack:s,onTrigger:i}=_e){var l;const a=kl()===((l=Ne)==null?void 0:l.scope)?Ne:null;let f,d=!1,h=!1;if(Te(e)?(f=()=>e.value,d=vr(e)):kt(e)?(f=()=>e,r=!0):G(e)?(h=!0,d=e.some(T=>kt(T)||vr(T)),f=()=>e.map(T=>{if(Te(T))return T.value;if(kt(T))return Yt(T);if(Q(T))return xt(T,a,2)})):Q(e)?t?f=()=>xt(e,a,2):f=()=>{if(!(a&&a.isUnmounted))return m&&m(),rt(e,a,3,[b])}:f=nt,t&&r){const T=f;f=()=>Yt(T())}let m,b=T=>{m=v.onStop=()=>{xt(T,a,4),m=v.onStop=void 0}},y;if(Vn)if(b=nt,t?n&&rt(t,a,3,[f(),h?[]:void 0,b]):f(),o===\"sync\"){const T=wf();y=T.__watcherHandles||(T.__watcherHandles=[])}else return nt;let S=h?new Array(e.length).fill(lr):lr;const A=()=>{if(v.active)if(t){const T=v.run();(r||d||(h?T.some((k,M)=>Xt(k,S[M])):Xt(T,S)))&&(m&&m(),rt(t,a,3,[T,S===lr?void 0:h&&S[0]===lr?[]:S,b]),S=T)}else v.run()};A.allowRecurse=!!t;let g;o===\"sync\"?g=A:o===\"post\"?g=()=>We(A,a&&a.suspense):(A.pre=!0,a&&(A.id=a.uid),g=()=>uo(A));const v=new ro(f,g);t?n?A():S=v.run():o===\"post\"?We(v.run.bind(v),a&&a.suspense):v.run();const L=()=>{v.stop(),a&&a.scope&&zs(a.scope.effects,v)};return y&&y.push(L),L}function Uu(e,t,n){const r=this.proxy,o=Le(e)?e.includes(\".\")?ia(r,e):()=>r[e]:e.bind(r,r);let s;Q(t)?s=t:(s=t.handler,n=t);const i=Ne;fn(this);const l=oa(o,s.bind(r),n);return i?fn(i):qt(),l}function ia(e,t){const n=t.split(\".\");return()=>{let r=e;for(let o=0;o<n.length&&r;o++)r=r[n[o]];return r}}function Yt(e,t){if(!he(e)||e.__v_skip||(t=t||new Set,t.has(e)))return e;if(t.add(e),Te(e))Yt(e.value,t);else if(G(e))for(let n=0;n<e.length;n++)Yt(e[n],t);else if(Ir(e)||rn(e))e.forEach(n=>{Yt(n,t)});else if(Cl(e))for(const n in e)Yt(e[n],t);return e}function W_(e,t){const n=Be;if(n===null)return e;const r=Hr(n)||n.proxy,o=e.dirs||(e.dirs=[]);for(let s=0;s<t.length;s++){let[i,l,a,f=_e]=t[s];i&&(Q(i)&&(i={mounted:i,updated:i}),i.deep&&Yt(l),o.push({dir:i,instance:r,value:l,oldValue:void 0,arg:a,modifiers:f}))}return e}function jt(e,t,n,r){const o=e.dirs,s=t&&t.dirs;for(let i=0;i<o.length;i++){const l=o[i];s&&(l.oldValue=s[i].value);let a=l.dir[r];a&&(En(),rt(a,n,8,[e.el,l,e,t]),yn())}}/*! #__NO_SIDE_EFFECTS__ */function Qn(e,t){return Q(e)?(()=>ke({name:e.name},t,{setup:e}))():e}const dr=e=>!!e.type.__asyncLoader,la=e=>e.type.__isKeepAlive;function $u(e,t){aa(e,\"a\",t)}function ju(e,t){aa(e,\"da\",t)}function aa(e,t,n=Ne){const r=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if($r(t,r,n),n){let o=n.parent;for(;o&&o.parent;)la(o.parent.vnode)&&Hu(r,t,n,o),o=o.parent}}function Hu(e,t,n,r){const o=$r(t,e,r,!0);fo(()=>{zs(r[t],o)},n)}function $r(e,t,n=Ne,r=!1){if(n){const o=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...i)=>{if(n.isUnmounted)return;En(),fn(n);const l=rt(t,n,e,i);return qt(),yn(),l});return r?o.unshift(s):o.push(s),s}}const Tt=e=>(t,n=Ne)=>(!Vn||e===\"sp\")&&$r(e,(...r)=>t(...r),n),ca=Tt(\"bm\"),ua=Tt(\"m\"),Wu=Tt(\"bu\"),Bu=Tt(\"u\"),Vu=Tt(\"bum\"),fo=Tt(\"um\"),Ku=Tt(\"sp\"),Yu=Tt(\"rtg\"),Gu=Tt(\"rtc\");function qu(e,t=Ne){$r(\"ec\",e,t)}function B_(e,t,n,r){let o;const s=n&&n[r];if(G(e)||Le(e)){o=new Array(e.length);for(let i=0,l=e.length;i<l;i++)o[i]=t(e[i],i,void 0,s&&s[i])}else if(typeof e==\"number\"){o=new Array(e);for(let i=0;i<e;i++)o[i]=t(i+1,i,void 0,s&&s[i])}else if(he(e))if(e[Symbol.iterator])o=Array.from(e,(i,l)=>t(i,l,void 0,s&&s[l]));else{const i=Object.keys(e);o=new Array(i.length);for(let l=0,a=i.length;l<a;l++){const f=i[l];o[l]=t(e[f],f,l,s&&s[l])}}else o=[];return n&&(n[r]=o),o}const ys=e=>e?Ta(e)?Hr(e)||e.proxy:ys(e.parent):null,wn=ke(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ys(e.parent),$root:e=>ys(e.root),$emit:e=>e.emit,$options:e=>ho(e),$forceUpdate:e=>e.f||(e.f=()=>uo(e.update)),$nextTick:e=>e.n||(e.n=co.bind(e.proxy)),$watch:e=>Uu.bind(e)}),rs=(e,t)=>e!==_e&&!e.__isScriptSetup&&ie(e,t),Xu={get({_:e},t){const{ctx:n,setupState:r,data:o,props:s,accessCache:i,type:l,appContext:a}=e;let f;if(t[0]!==\"$\"){const b=i[t];if(b!==void 0)switch(b){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return s[t]}else{if(rs(r,t))return i[t]=1,r[t];if(o!==_e&&ie(o,t))return i[t]=2,o[t];if((f=e.propsOptions[0])&&ie(f,t))return i[t]=3,s[t];if(n!==_e&&ie(n,t))return i[t]=4,n[t];Os&&(i[t]=0)}}const d=wn[t];let h,m;if(d)return t===\"$attrs\"&&Ve(e,\"get\",t),d(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==_e&&ie(n,t))return i[t]=4,n[t];if(m=a.config.globalProperties,ie(m,t))return m[t]},set({_:e},t,n){const{data:r,setupState:o,ctx:s}=e;return rs(o,t)?(o[t]=n,!0):r!==_e&&ie(r,t)?(r[t]=n,!0):ie(e.props,t)||t[0]===\"$\"&&t.slice(1)in e?!1:(s[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:s}},i){let l;return!!n[i]||e!==_e&&ie(e,i)||rs(t,i)||(l=s[0])&&ie(l,i)||ie(r,i)||ie(wn,i)||ie(o.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ie(n,\"value\")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Jo(e){return G(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Os=!0;function Ju(e){const t=ho(e),n=e.proxy,r=e.ctx;Os=!1,t.beforeCreate&&zo(t.beforeCreate,e,\"bc\");const{data:o,computed:s,methods:i,watch:l,provide:a,inject:f,created:d,beforeMount:h,mounted:m,beforeUpdate:b,updated:y,activated:S,deactivated:A,beforeDestroy:g,beforeUnmount:v,destroyed:L,unmounted:T,render:k,renderTracked:M,renderTriggered:I,errorCaptured:V,serverPrefetch:K,expose:te,inheritAttrs:fe,components:ae,directives:me,filters:je}=t;if(f&&zu(f,r,null),i)for(const se in i){const ne=i[se];Q(ne)&&(r[se]=ne.bind(n))}if(o){const se=o.call(n,n);he(se)&&(e.data=zn(se))}if(Os=!0,s)for(const se in s){const ne=s[se],Ee=Q(ne)?ne.bind(n,n):Q(ne.get)?ne.get.bind(n,n):nt,Me=!Q(ne)&&Q(ne.set)?ne.set.bind(n):nt,xe=Oe({get:Ee,set:Me});Object.defineProperty(r,se,{enumerable:!0,configurable:!0,get:()=>xe.value,set:ve=>xe.value=ve})}if(l)for(const se in l)fa(l[se],r,n,se);if(a){const se=Q(a)?a.call(n):a;Reflect.ownKeys(se).forEach(ne=>{hr(ne,se[ne])})}d&&zo(d,e,\"c\");function z(se,ne){G(ne)?ne.forEach(Ee=>se(Ee.bind(n))):ne&&se(ne.bind(n))}if(z(ca,h),z(ua,m),z(Wu,b),z(Bu,y),z($u,S),z(ju,A),z(qu,V),z(Gu,M),z(Yu,I),z(Vu,v),z(fo,T),z(Ku,K),G(te))if(te.length){const se=e.exposed||(e.exposed={});te.forEach(ne=>{Object.defineProperty(se,ne,{get:()=>n[ne],set:Ee=>n[ne]=Ee})})}else e.exposed||(e.exposed={});k&&e.render===nt&&(e.render=k),fe!=null&&(e.inheritAttrs=fe),ae&&(e.components=ae),me&&(e.directives=me)}function zu(e,t,n=nt){G(e)&&(e=Ts(e));for(const r in e){const o=e[r];let s;he(o)?\"default\"in o?s=st(o.from||r,o.default,!0):s=st(o.from||r):s=st(o),Te(s)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>s.value,set:i=>s.value=i}):t[r]=s}}function zo(e,t,n){rt(G(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function fa(e,t,n,r){const o=r.includes(\".\")?ia(n,r):()=>n[r];if(Le(e)){const s=t[e];Q(s)&&Ft(o,s)}else if(Q(e))Ft(o,e.bind(n));else if(he(e))if(G(e))e.forEach(s=>fa(s,t,n,r));else{const s=Q(e.handler)?e.handler.bind(n):t[e.handler];Q(s)&&Ft(o,s,e)}}function ho(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:s,config:{optionMergeStrategies:i}}=e.appContext,l=s.get(t);let a;return l?a=l:!o.length&&!n&&!r?a=t:(a={},o.length&&o.forEach(f=>Nr(a,f,i,!0)),Nr(a,t,i)),he(t)&&s.set(t,a),a}function Nr(e,t,n,r=!1){const{mixins:o,extends:s}=t;s&&Nr(e,s,n,!0),o&&o.forEach(i=>Nr(e,i,n,!0));for(const i in t)if(!(r&&i===\"expose\")){const l=Qu[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const Qu={data:Qo,props:Zo,emits:Zo,methods:Pn,computed:Pn,beforeCreate:De,created:De,beforeMount:De,mounted:De,beforeUpdate:De,updated:De,beforeDestroy:De,beforeUnmount:De,destroyed:De,unmounted:De,activated:De,deactivated:De,errorCaptured:De,serverPrefetch:De,components:Pn,directives:Pn,watch:ef,provide:Qo,inject:Zu};function Qo(e,t){return t?e?function(){return ke(Q(e)?e.call(this,this):e,Q(t)?t.call(this,this):t)}:t:e}function Zu(e,t){return Pn(Ts(e),Ts(t))}function Ts(e){if(G(e)){const t={};for(let n=0;n<e.length;n++)t[e[n]]=e[n];return t}return e}function De(e,t){return e?[...new Set([].concat(e,t))]:t}function Pn(e,t){return e?ke(Object.create(null),e,t):t}function Zo(e,t){return e?G(e)&&G(t)?[...new Set([...e,...t])]:ke(Object.create(null),Jo(e),Jo(t??{})):t}function ef(e,t){if(!e)return t;if(!t)return e;const n=ke(Object.create(null),e);for(const r in t)n[r]=De(e[r],t[r]);return n}function da(){return{app:null,config:{isNativeTag:xc,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let tf=0;function nf(e,t){return function(r,o=null){Q(r)||(r=ke({},r)),o!=null&&!he(o)&&(o=null);const s=da(),i=new WeakSet;let l=!1;const a=s.app={_uid:tf++,_component:r,_props:o,_container:null,_context:s,_instance:null,version:kf,get config(){return s.config},set config(f){},use(f,...d){return i.has(f)||(f&&Q(f.install)?(i.add(f),f.install(a,...d)):Q(f)&&(i.add(f),f(a,...d))),a},mixin(f){return s.mixins.includes(f)||s.mixins.push(f),a},component(f,d){return d?(s.components[f]=d,a):s.components[f]},directive(f,d){return d?(s.directives[f]=d,a):s.directives[f]},mount(f,d,h){if(!l){const m=$e(r,o);return m.appContext=s,d&&t?t(m,f):e(m,f,h),l=!0,a._container=f,f.__vue_app__=a,Hr(m.component)||m.component.proxy}},unmount(){l&&(e(null,a._container),delete a._container.__vue_app__)},provide(f,d){return s.provides[f]=d,a},runWithContext(f){Hn=a;try{return f()}finally{Hn=null}}};return a}}let Hn=null;function hr(e,t){if(Ne){let n=Ne.provides;const r=Ne.parent&&Ne.parent.provides;r===n&&(n=Ne.provides=Object.create(r)),n[e]=t}}function st(e,t,n=!1){const r=Ne||Be;if(r||Hn){const o=r?r.parent==null?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides:Hn._context.provides;if(o&&e in o)return o[e];if(arguments.length>1)return n&&Q(t)?t.call(r&&r.proxy):t}}function rf(){return!!(Ne||Be||Hn)}function sf(e,t,n,r=!1){const o={},s={};yr(s,jr,1),e.propsDefaults=Object.create(null),ha(e,t,o,s);for(const i in e.propsOptions[0])i in o||(o[i]=void 0);n?e.props=r?o:Vl(o):e.type.props?e.props=o:e.props=s,e.attrs=s}function of(e,t,n,r){const{props:o,attrs:s,vnode:{patchFlag:i}}=e,l=le(o),[a]=e.propsOptions;let f=!1;if((r||i>0)&&!(i&16)){if(i&8){const d=e.vnode.dynamicProps;for(let h=0;h<d.length;h++){let m=d[h];if(Ur(e.emitsOptions,m))continue;const b=t[m];if(a)if(ie(s,m))b!==s[m]&&(s[m]=b,f=!0);else{const y=ht(m);o[y]=vs(a,l,y,b,e,!1)}else b!==s[m]&&(s[m]=b,f=!0)}}}else{ha(e,t,o,s)&&(f=!0);let d;for(const h in l)(!t||!ie(t,h)&&((d=bn(h))===h||!ie(t,d)))&&(a?n&&(n[h]!==void 0||n[d]!==void 0)&&(o[h]=vs(a,l,h,void 0,e,!0)):delete o[h]);if(s!==l)for(const h in s)(!t||!ie(t,h))&&(delete s[h],f=!0)}f&&yt(e,\"set\",\"$attrs\")}function ha(e,t,n,r){const[o,s]=e.propsOptions;let i=!1,l;if(t)for(let a in t){if(ur(a))continue;const f=t[a];let d;o&&ie(o,d=ht(a))?!s||!s.includes(d)?n[d]=f:(l||(l={}))[d]=f:Ur(e.emitsOptions,a)||(!(a in r)||f!==r[a])&&(r[a]=f,i=!0)}if(s){const a=le(n),f=l||_e;for(let d=0;d<s.length;d++){const h=s[d];n[h]=vs(o,a,h,f[h],e,!ie(f,h))}}return i}function vs(e,t,n,r,o,s){const i=e[n];if(i!=null){const l=ie(i,\"default\");if(l&&r===void 0){const a=i.default;if(i.type!==Function&&!i.skipFactory&&Q(a)){const{propsDefaults:f}=o;n in f?r=f[n]:(fn(o),r=f[n]=a.call(null,t),qt())}else r=a}i[0]&&(s&&!l?r=!1:i[1]&&(r===\"\"||r===bn(n))&&(r=!0))}return r}function ma(e,t,n=!1){const r=t.propsCache,o=r.get(e);if(o)return o;const s=e.props,i={},l=[];let a=!1;if(!Q(e)){const d=h=>{a=!0;const[m,b]=ma(h,t,!0);ke(i,m),b&&l.push(...b)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!s&&!a)return he(e)&&r.set(e,nn),nn;if(G(s))for(let d=0;d<s.length;d++){const h=ht(s[d]);ei(h)&&(i[h]=_e)}else if(s)for(const d in s){const h=ht(d);if(ei(h)){const m=s[d],b=i[h]=G(m)||Q(m)?{type:m}:ke({},m);if(b){const y=ri(Boolean,b.type),S=ri(String,b.type);b[0]=y>-1,b[1]=S<0||y<S,(y>-1||ie(b,\"default\"))&&l.push(h)}}}const f=[i,l];return he(e)&&r.set(e,f),f}function ei(e){return e[0]!==\"$\"}function ti(e){const t=e&&e.toString().match(/^\\s*(function|class) (\\w+)/);return t?t[2]:e===null?\"null\":\"\"}function ni(e,t){return ti(e)===ti(t)}function ri(e,t){return G(t)?t.findIndex(n=>ni(n,e)):Q(t)&&ni(t,e)?0:-1}const pa=e=>e[0]===\"_\"||e===\"$stable\",mo=e=>G(e)?e.map(ct):[ct(e)],lf=(e,t,n)=>{if(t._n)return t;const r=Cu((...o)=>mo(t(...o)),n);return r._c=!1,r},_a=(e,t,n)=>{const r=e._ctx;for(const o in e){if(pa(o))continue;const s=e[o];if(Q(s))t[o]=lf(o,s,r);else if(s!=null){const i=mo(s);t[o]=()=>i}}},ga=(e,t)=>{const n=mo(t);e.slots.default=()=>n},af=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=le(t),yr(t,\"_\",n)):_a(t,e.slots={})}else e.slots={},t&&ga(e,t);yr(e.slots,jr,1)},cf=(e,t,n)=>{const{vnode:r,slots:o}=e;let s=!0,i=_e;if(r.shapeFlag&32){const l=t._;l?n&&l===1?s=!1:(ke(o,t),!n&&l===1&&delete o._):(s=!t.$stable,_a(t,o)),i=t}else t&&(ga(e,t),i={default:1});if(s)for(const l in o)!pa(l)&&i[l]==null&&delete o[l]};function Ss(e,t,n,r,o=!1){if(G(e)){e.forEach((m,b)=>Ss(m,t&&(G(t)?t[b]:t),n,r,o));return}if(dr(r)&&!o)return;const s=r.shapeFlag&4?Hr(r.component)||r.component.proxy:r.el,i=o?null:s,{i:l,r:a}=e,f=t&&t.r,d=l.refs===_e?l.refs={}:l.refs,h=l.setupState;if(f!=null&&f!==a&&(Le(f)?(d[f]=null,ie(h,f)&&(h[f]=null)):Te(f)&&(f.value=null)),Q(a))xt(a,l,12,[i,d]);else{const m=Le(a),b=Te(a);if(m||b){const y=()=>{if(e.f){const S=m?ie(h,a)?h[a]:d[a]:a.value;o?G(S)&&zs(S,s):G(S)?S.includes(s)||S.push(s):m?(d[a]=[s],ie(h,a)&&(h[a]=d[a])):(a.value=[s],e.k&&(d[e.k]=a.value))}else m?(d[a]=i,ie(h,a)&&(h[a]=i)):b&&(a.value=i,e.k&&(d[e.k]=i))};i?(y.id=-1,We(y,n)):y()}}}const We=Du;function uf(e){return ff(e)}function ff(e,t){const n=ps();n.__VUE__=!0;const{insert:r,remove:o,patchProp:s,createElement:i,createText:l,createComment:a,setText:f,setElementText:d,parentNode:h,nextSibling:m,setScopeId:b=nt,insertStaticContent:y}=e,S=(_,c,u,p=null,E=null,N=null,w=!1,F=null,D=!!c.dynamicChildren)=>{if(_===c)return;_&&!Sn(_,c)&&(p=C(_),ve(_,E,N,!0),_=null),c.patchFlag===-2&&(D=!1,c.dynamicChildren=null);const{type:x,ref:Y,shapeFlag:$}=c;switch(x){case Zn:A(_,c,u,p);break;case Jt:g(_,c,u,p);break;case mr:_==null&&v(c,u,p,w);break;case Qe:ae(_,c,u,p,E,N,w,F,D);break;default:$&1?k(_,c,u,p,E,N,w,F,D):$&6?me(_,c,u,p,E,N,w,F,D):($&64||$&128)&&x.process(_,c,u,p,E,N,w,F,D,U)}Y!=null&&E&&Ss(Y,_&&_.ref,N,c||_,!c)},A=(_,c,u,p)=>{if(_==null)r(c.el=l(c.children),u,p);else{const E=c.el=_.el;c.children!==_.children&&f(E,c.children)}},g=(_,c,u,p)=>{_==null?r(c.el=a(c.children||\"\"),u,p):c.el=_.el},v=(_,c,u,p)=>{[_.el,_.anchor]=y(_.children,c,u,p,_.el,_.anchor)},L=({el:_,anchor:c},u,p)=>{let E;for(;_&&_!==c;)E=m(_),r(_,u,p),_=E;r(c,u,p)},T=({el:_,anchor:c})=>{let u;for(;_&&_!==c;)u=m(_),o(_),_=u;o(c)},k=(_,c,u,p,E,N,w,F,D)=>{w=w||c.type===\"svg\",_==null?M(c,u,p,E,N,w,F,D):K(_,c,E,N,w,F,D)},M=(_,c,u,p,E,N,w,F)=>{let D,x;const{type:Y,props:$,shapeFlag:O,transition:R,dirs:B}=_;if(D=_.el=i(_.type,N,$&&$.is,$),O&8?d(D,_.children):O&16&&V(_.children,D,null,p,E,N&&Y!==\"foreignObject\",w,F),B&&jt(_,null,p,\"created\"),I(D,_,_.scopeId,w,p),$){for(const re in $)re!==\"value\"&&!ur(re)&&s(D,re,null,$[re],N,_.children,p,E,ye);\"value\"in $&&s(D,\"value\",null,$.value),(x=$.onVnodeBeforeMount)&&lt(x,p,_)}B&&jt(_,null,p,\"beforeMount\");const X=df(E,R);X&&R.beforeEnter(D),r(D,c,u),((x=$&&$.onVnodeMounted)||X||B)&&We(()=>{x&&lt(x,p,_),X&&R.enter(D),B&&jt(_,null,p,\"mounted\")},E)},I=(_,c,u,p,E)=>{if(u&&b(_,u),p)for(let N=0;N<p.length;N++)b(_,p[N]);if(E){let N=E.subTree;if(c===N){const w=E.vnode;I(_,w,w.scopeId,w.slotScopeIds,E.parent)}}},V=(_,c,u,p,E,N,w,F,D=0)=>{for(let x=D;x<_.length;x++){const Y=_[x]=F?Pt(_[x]):ct(_[x]);S(null,Y,c,u,p,E,N,w,F)}},K=(_,c,u,p,E,N,w)=>{const F=c.el=_.el;let{patchFlag:D,dynamicChildren:x,dirs:Y}=c;D|=_.patchFlag&16;const $=_.props||_e,O=c.props||_e;let R;u&&Ht(u,!1),(R=O.onVnodeBeforeUpdate)&&lt(R,u,c,_),Y&&jt(c,_,u,\"beforeUpdate\"),u&&Ht(u,!0);const B=E&&c.type!==\"foreignObject\";if(x?te(_.dynamicChildren,x,F,u,p,B,N):w||ne(_,c,F,null,u,p,B,N,!1),D>0){if(D&16)fe(F,c,$,O,u,p,E);else if(D&2&&$.class!==O.class&&s(F,\"class\",null,O.class,E),D&4&&s(F,\"style\",$.style,O.style,E),D&8){const X=c.dynamicProps;for(let re=0;re<X.length;re++){const pe=X[re],Pe=$[pe],vt=O[pe];(vt!==Pe||pe===\"value\")&&s(F,pe,Pe,vt,E,_.children,u,p,ye)}}D&1&&_.children!==c.children&&d(F,c.children)}else!w&&x==null&&fe(F,c,$,O,u,p,E);((R=O.onVnodeUpdated)||Y)&&We(()=>{R&&lt(R,u,c,_),Y&&jt(c,_,u,\"updated\")},p)},te=(_,c,u,p,E,N,w)=>{for(let F=0;F<c.length;F++){const D=_[F],x=c[F],Y=D.el&&(D.type===Qe||!Sn(D,x)||D.shapeFlag&70)?h(D.el):u;S(D,x,Y,null,p,E,N,w,!0)}},fe=(_,c,u,p,E,N,w)=>{if(u!==p){if(u!==_e)for(const F in u)!ur(F)&&!(F in p)&&s(_,F,u[F],null,w,c.children,E,N,ye);for(const F in p){if(ur(F))continue;const D=p[F],x=u[F];D!==x&&F!==\"value\"&&s(_,F,x,D,w,c.children,E,N,ye)}\"value\"in p&&s(_,\"value\",u.value,p.value)}},ae=(_,c,u,p,E,N,w,F,D)=>{const x=c.el=_?_.el:l(\"\"),Y=c.anchor=_?_.anchor:l(\"\");let{patchFlag:$,dynamicChildren:O,slotScopeIds:R}=c;R&&(F=F?F.concat(R):R),_==null?(r(x,u,p),r(Y,u,p),V(c.children,u,Y,E,N,w,F,D)):$>0&&$&64&&O&&_.dynamicChildren?(te(_.dynamicChildren,O,u,E,N,w,F),(c.key!=null||E&&c===E.subTree)&&ba(_,c,!0)):ne(_,c,u,Y,E,N,w,F,D)},me=(_,c,u,p,E,N,w,F,D)=>{c.slotScopeIds=F,_==null?c.shapeFlag&512?E.ctx.activate(c,u,p,w,D):je(c,u,p,E,N,w,D):Ce(_,c,D)},je=(_,c,u,p,E,N,w)=>{const F=_.component=Sf(_,p,E);if(la(_)&&(F.ctx.renderer=U),Nf(F),F.asyncDep){if(E&&E.registerDep(F,z),!_.el){const D=F.subTree=$e(Jt);g(null,D,c,u)}return}z(F,_,c,u,E,N,w)},Ce=(_,c,u)=>{const p=c.component=_.component;if(wu(_,c,u))if(p.asyncDep&&!p.asyncResolved){se(p,c,u);return}else p.next=c,Nu(p.update),p.update();else c.el=_.el,p.vnode=c},z=(_,c,u,p,E,N,w)=>{const F=()=>{if(_.isMounted){let{next:Y,bu:$,u:O,parent:R,vnode:B}=_,X=Y,re;Ht(_,!1),Y?(Y.el=B.el,se(_,Y,w)):Y=B,$&&fr($),(re=Y.props&&Y.props.onVnodeBeforeUpdate)&&lt(re,R,Y,B),Ht(_,!0);const pe=ns(_),Pe=_.subTree;_.subTree=pe,S(Pe,pe,h(Pe.el),C(Pe),_,E,N),Y.el=pe.el,X===null&&ku(_,pe.el),O&&We(O,E),(re=Y.props&&Y.props.onVnodeUpdated)&&We(()=>lt(re,R,Y,B),E)}else{let Y;const{el:$,props:O}=c,{bm:R,m:B,parent:X}=_,re=dr(c);if(Ht(_,!1),R&&fr(R),!re&&(Y=O&&O.onVnodeBeforeMount)&&lt(Y,X,c),Ht(_,!0),$&&Z){const pe=()=>{_.subTree=ns(_),Z($,_.subTree,_,E,null)};re?c.type.__asyncLoader().then(()=>!_.isUnmounted&&pe()):pe()}else{const pe=_.subTree=ns(_);S(null,pe,u,p,_,E,N),c.el=pe.el}if(B&&We(B,E),!re&&(Y=O&&O.onVnodeMounted)){const pe=c;We(()=>lt(Y,X,pe),E)}(c.shapeFlag&256||X&&dr(X.vnode)&&X.vnode.shapeFlag&256)&&_.a&&We(_.a,E),_.isMounted=!0,c=u=p=null}},D=_.effect=new ro(F,()=>uo(x),_.scope),x=_.update=()=>D.run();x.id=_.uid,Ht(_,!0),x()},se=(_,c,u)=>{c.component=_;const p=_.vnode.props;_.vnode=c,_.next=null,of(_,c.props,p,u),cf(_,c.children,u),En(),Go(),yn()},ne=(_,c,u,p,E,N,w,F,D=!1)=>{const x=_&&_.children,Y=_?_.shapeFlag:0,$=c.children,{patchFlag:O,shapeFlag:R}=c;if(O>0){if(O&128){Me(x,$,u,p,E,N,w,F,D);return}else if(O&256){Ee(x,$,u,p,E,N,w,F,D);return}}R&8?(Y&16&&ye(x,E,N),$!==x&&d(u,$)):Y&16?R&16?Me(x,$,u,p,E,N,w,F,D):ye(x,E,N,!0):(Y&8&&d(u,\"\"),R&16&&V($,u,p,E,N,w,F,D))},Ee=(_,c,u,p,E,N,w,F,D)=>{_=_||nn,c=c||nn;const x=_.length,Y=c.length,$=Math.min(x,Y);let O;for(O=0;O<$;O++){const R=c[O]=D?Pt(c[O]):ct(c[O]);S(_[O],R,u,null,E,N,w,F,D)}x>Y?ye(_,E,N,!0,!1,$):V(c,u,p,E,N,w,F,D,$)},Me=(_,c,u,p,E,N,w,F,D)=>{let x=0;const Y=c.length;let $=_.length-1,O=Y-1;for(;x<=$&&x<=O;){const R=_[x],B=c[x]=D?Pt(c[x]):ct(c[x]);if(Sn(R,B))S(R,B,u,null,E,N,w,F,D);else break;x++}for(;x<=$&&x<=O;){const R=_[$],B=c[O]=D?Pt(c[O]):ct(c[O]);if(Sn(R,B))S(R,B,u,null,E,N,w,F,D);else break;$--,O--}if(x>$){if(x<=O){const R=O+1,B=R<Y?c[R].el:p;for(;x<=O;)S(null,c[x]=D?Pt(c[x]):ct(c[x]),u,B,E,N,w,F,D),x++}}else if(x>O)for(;x<=$;)ve(_[x],E,N,!0),x++;else{const R=x,B=x,X=new Map;for(x=B;x<=O;x++){const Ye=c[x]=D?Pt(c[x]):ct(c[x]);Ye.key!=null&&X.set(Ye.key,x)}let re,pe=0;const Pe=O-B+1;let vt=!1,es=0;const vn=new Array(Pe);for(x=0;x<Pe;x++)vn[x]=0;for(x=R;x<=$;x++){const Ye=_[x];if(pe>=Pe){ve(Ye,E,N,!0);continue}let it;if(Ye.key!=null)it=X.get(Ye.key);else for(re=B;re<=O;re++)if(vn[re-B]===0&&Sn(Ye,c[re])){it=re;break}it===void 0?ve(Ye,E,N,!0):(vn[it-B]=x+1,it>=es?es=it:vt=!0,S(Ye,c[it],u,null,E,N,w,F,D),pe++)}const Mo=vt?hf(vn):nn;for(re=Mo.length-1,x=Pe-1;x>=0;x--){const Ye=B+x,it=c[Ye],Do=Ye+1<Y?c[Ye+1].el:p;vn[x]===0?S(null,it,u,Do,E,N,w,F,D):vt&&(re<0||x!==Mo[re]?xe(it,u,Do,2):re--)}}},xe=(_,c,u,p,E=null)=>{const{el:N,type:w,transition:F,children:D,shapeFlag:x}=_;if(x&6){xe(_.component.subTree,c,u,p);return}if(x&128){_.suspense.move(c,u,p);return}if(x&64){w.move(_,c,u,U);return}if(w===Qe){r(N,c,u);for(let $=0;$<D.length;$++)xe(D[$],c,u,p);r(_.anchor,c,u);return}if(w===mr){L(_,c,u);return}if(p!==2&&x&1&&F)if(p===0)F.beforeEnter(N),r(N,c,u),We(()=>F.enter(N),E);else{const{leave:$,delayLeave:O,afterLeave:R}=F,B=()=>r(N,c,u),X=()=>{$(N,()=>{B(),R&&R()})};O?O(N,B,X):X()}else r(N,c,u)},ve=(_,c,u,p=!1,E=!1)=>{const{type:N,props:w,ref:F,children:D,dynamicChildren:x,shapeFlag:Y,patchFlag:$,dirs:O}=_;if(F!=null&&Ss(F,null,u,_,!0),Y&256){c.ctx.deactivate(_);return}const R=Y&1&&O,B=!dr(_);let X;if(B&&(X=w&&w.onVnodeBeforeUnmount)&&lt(X,c,_),Y&6)pt(_.component,u,p);else{if(Y&128){_.suspense.unmount(u,p);return}R&&jt(_,null,c,\"beforeUnmount\"),Y&64?_.type.remove(_,c,u,E,U,p):x&&(N!==Qe||$>0&&$&64)?ye(x,c,u,!1,!0):(N===Qe&&$&384||!E&&Y&16)&&ye(D,c,u),p&&Xe(_)}(B&&(X=w&&w.onVnodeUnmounted)||R)&&We(()=>{X&&lt(X,c,_),R&&jt(_,null,c,\"unmounted\")},u)},Xe=_=>{const{type:c,el:u,anchor:p,transition:E}=_;if(c===Qe){Ke(u,p);return}if(c===mr){T(_);return}const N=()=>{o(u),E&&!E.persisted&&E.afterLeave&&E.afterLeave()};if(_.shapeFlag&1&&E&&!E.persisted){const{leave:w,delayLeave:F}=E,D=()=>w(u,N);F?F(_.el,N,D):D()}else N()},Ke=(_,c)=>{let u;for(;_!==c;)u=m(_),o(_),_=u;o(c)},pt=(_,c,u)=>{const{bum:p,scope:E,update:N,subTree:w,um:F}=_;p&&fr(p),E.stop(),N&&(N.active=!1,ve(w,_,c,u)),F&&We(F,c),We(()=>{_.isUnmounted=!0},c),c&&c.pendingBranch&&!c.isUnmounted&&_.asyncDep&&!_.asyncResolved&&_.suspenseId===c.pendingId&&(c.deps--,c.deps===0&&c.resolve())},ye=(_,c,u,p=!1,E=!1,N=0)=>{for(let w=N;w<_.length;w++)ve(_[w],c,u,p,E)},C=_=>_.shapeFlag&6?C(_.component.subTree):_.shapeFlag&128?_.suspense.next():m(_.anchor||_.el),j=(_,c,u)=>{_==null?c._vnode&&ve(c._vnode,null,null,!0):S(c._vnode||null,_,c,null,null,null,u),Go(),ea(),c._vnode=_},U={p:S,um:ve,m:xe,r:Xe,mt:je,mc:V,pc:ne,pbc:te,n:C,o:e};let W,Z;return t&&([W,Z]=t(U)),{render:j,hydrate:W,createApp:nf(j,W)}}function Ht({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function df(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function ba(e,t,n=!1){const r=e.children,o=t.children;if(G(r)&&G(o))for(let s=0;s<r.length;s++){const i=r[s];let l=o[s];l.shapeFlag&1&&!l.dynamicChildren&&((l.patchFlag<=0||l.patchFlag===32)&&(l=o[s]=Pt(o[s]),l.el=i.el),n||ba(i,l)),l.type===Zn&&(l.el=i.el)}}function hf(e){const t=e.slice(),n=[0];let r,o,s,i,l;const a=e.length;for(r=0;r<a;r++){const f=e[r];if(f!==0){if(o=n[n.length-1],e[o]<f){t[r]=o,n.push(r);continue}for(s=0,i=n.length-1;s<i;)l=s+i>>1,e[n[l]]<f?s=l+1:i=l;f<e[n[s]]&&(s>0&&(t[r]=n[s-1]),n[s]=r)}}for(s=n.length,i=n[s-1];s-- >0;)n[s]=i,i=t[i];return n}const mf=e=>e.__isTeleport,Qe=Symbol.for(\"v-fgt\"),Zn=Symbol.for(\"v-txt\"),Jt=Symbol.for(\"v-cmt\"),mr=Symbol.for(\"v-stc\"),kn=[];let et=null;function Ea(e=!1){kn.push(et=e?null:[])}function pf(){kn.pop(),et=kn[kn.length-1]||null}let Wn=1;function si(e){Wn+=e}function ya(e){return e.dynamicChildren=Wn>0?et||nn:null,pf(),Wn>0&&et&&et.push(e),e}function _f(e,t,n,r,o,s){return ya(po(e,t,n,r,o,s,!0))}function gf(e,t,n,r,o){return ya($e(e,t,n,r,o,!0))}function Ns(e){return e?e.__v_isVNode===!0:!1}function Sn(e,t){return e.type===t.type&&e.key===t.key}const jr=\"__vInternal\",Oa=({key:e})=>e??null,pr=({ref:e,ref_key:t,ref_for:n})=>(typeof e==\"number\"&&(e=\"\"+e),e!=null?Le(e)||Te(e)||Q(e)?{i:Be,r:e,k:t,f:!!n}:e:null);function po(e,t=null,n=null,r=0,o=null,s=e===Qe?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Oa(t),ref:t&&pr(t),scopeId:ra,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Be};return l?(_o(a,n),s&128&&e.normalize(a)):n&&(a.shapeFlag|=Le(n)?8:16),Wn>0&&!i&&et&&(a.patchFlag>0||s&6)&&a.patchFlag!==32&&et.push(a),a}const $e=bf;function bf(e,t=null,n=null,r=0,o=null,s=!1){if((!e||e===xu)&&(e=Jt),Ns(e)){const l=un(e,t,!0);return n&&_o(l,n),Wn>0&&!s&&et&&(l.shapeFlag&6?et[et.indexOf(e)]=l:et.push(l)),l.patchFlag|=-2,l}if(Pf(e)&&(e=e.__vccOpts),t){t=Ef(t);let{class:l,style:a}=t;l&&!Le(l)&&(t.class=eo(l)),he(a)&&(Yl(a)&&!G(a)&&(a=ke({},a)),t.style=Zs(a))}const i=Le(e)?1:Mu(e)?128:mf(e)?64:he(e)?4:Q(e)?2:0;return po(e,t,n,r,o,i,s,!0)}function Ef(e){return e?Yl(e)||jr in e?ke({},e):e:null}function un(e,t,n=!1){const{props:r,ref:o,patchFlag:s,children:i}=e,l=t?Of(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Oa(l),ref:t&&t.ref?n&&o?G(o)?o.concat(pr(t)):[o,pr(t)]:pr(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Qe?s===-1?16:s|16:s,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&un(e.ssContent),ssFallback:e.ssFallback&&un(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function yf(e=\" \",t=0){return $e(Zn,null,e,t)}function V_(e,t){const n=$e(mr,null,e);return n.staticCount=t,n}function K_(e=\"\",t=!1){return t?(Ea(),gf(Jt,null,e)):$e(Jt,null,e)}function ct(e){return e==null||typeof e==\"boolean\"?$e(Jt):G(e)?$e(Qe,null,e.slice()):typeof e==\"object\"?Pt(e):$e(Zn,null,String(e))}function Pt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:un(e)}function _o(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(G(t))n=16;else if(typeof t==\"object\")if(r&65){const o=t.default;o&&(o._c&&(o._d=!1),_o(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!(jr in t)?t._ctx=Be:o===3&&Be&&(Be.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else Q(t)?(t={default:t,_ctx:Be},n=32):(t=String(t),r&64?(n=16,t=[yf(t)]):n=8);e.children=t,e.shapeFlag|=n}function Of(...e){const t={};for(let n=0;n<e.length;n++){const r=e[n];for(const o in r)if(o===\"class\")t.class!==r.class&&(t.class=eo([t.class,r.class]));else if(o===\"style\")t.style=Zs([t.style,r.style]);else if(Pr(o)){const s=t[o],i=r[o];i&&s!==i&&!(G(s)&&s.includes(i))&&(t[o]=s?[].concat(s,i):i)}else o!==\"\"&&(t[o]=r[o])}return t}function lt(e,t,n,r=null){rt(e,t,7,[n,r])}const Tf=da();let vf=0;function Sf(e,t,n){const r=e.type,o=(t?t.appContext:e.appContext)||Tf,s={uid:vf++,vnode:e,type:r,parent:t,appContext:o,root:null,next:null,subTree:null,effect:null,update:null,scope:new wl(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(o.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:ma(r,o),emitsOptions:na(r,o),emit:null,emitted:null,propsDefaults:_e,inheritAttrs:r.inheritAttrs,ctx:_e,data:_e,props:_e,attrs:_e,slots:_e,refs:_e,setupState:_e,setupContext:null,attrsProxy:null,slotsProxy:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return s.ctx={_:s},s.root=t?t.root:s,s.emit=Lu.bind(null,s),e.ce&&e.ce(s),s}let Ne=null;const Bn=()=>Ne||Be;let go,zt,oi=\"__VUE_INSTANCE_SETTERS__\";(zt=ps()[oi])||(zt=ps()[oi]=[]),zt.push(e=>Ne=e),go=e=>{zt.length>1?zt.forEach(t=>t(e)):zt[0](e)};const fn=e=>{go(e),e.scope.on()},qt=()=>{Ne&&Ne.scope.off(),go(null)};function Ta(e){return e.vnode.shapeFlag&4}let Vn=!1;function Nf(e,t=!1){Vn=t;const{props:n,children:r}=e.vnode,o=Ta(e);sf(e,n,o,t),af(e,r);const s=o?Rf(e,t):void 0;return Vn=!1,s}function Rf(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Mr(new Proxy(e.ctx,Xu));const{setup:r}=n;if(r){const o=e.setupContext=r.length>1?Lf(e):null;fn(e),En();const s=xt(r,e,0,[e.props,o]);if(yn(),qt(),Al(s)){if(s.then(qt,qt),t)return s.then(i=>{ii(e,i,t)}).catch(i=>{Dr(i,e,0)});e.asyncDep=s}else ii(e,s,t)}else va(e,t)}function ii(e,t,n){Q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:he(t)&&(e.setupState=zl(t)),va(e,n)}let li;function va(e,t,n){const r=e.type;if(!e.render){if(!t&&li&&!r.render){const o=r.template||ho(e).template;if(o){const{isCustomElement:s,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:a}=r,f=ke(ke({isCustomElement:s,delimiters:l},i),a);r.render=li(o,f)}}e.render=r.render||nt}{fn(e),En();try{Ju(e)}finally{yn(),qt()}}}function Af(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return Ve(e,\"get\",\"$attrs\"),t[n]}}))}function Lf(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return Af(e)},slots:e.slots,emit:e.emit,expose:t}}function Hr(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(zl(Mr(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in wn)return wn[n](e)},has(t,n){return n in t||n in wn}}))}function Cf(e,t=!0){return Q(e)?e.displayName||e.name:e.name||t&&e.__name}function Pf(e){return Q(e)&&\"__vccOpts\"in e}const Oe=(e,t)=>Tu(e,t,Vn);function Wr(e,t,n){const r=arguments.length;return r===2?he(t)&&!G(t)?Ns(t)?$e(e,null,[t]):$e(e,t):$e(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Ns(n)&&(n=[n]),$e(e,t,n))}const If=Symbol.for(\"v-scx\"),wf=()=>st(If),kf=\"3.3.10\",xf=\"http://www.w3.org/2000/svg\",Vt=typeof document<\"u\"?document:null,ai=Vt&&Vt.createElement(\"template\"),Ff={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t?Vt.createElementNS(xf,e):Vt.createElement(e,n?{is:n}:void 0);return e===\"select\"&&r&&r.multiple!=null&&o.setAttribute(\"multiple\",r.multiple),o},createText:e=>Vt.createTextNode(e),createComment:e=>Vt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Vt.querySelector(e),setScopeId(e,t){e.setAttribute(t,\"\")},insertStaticContent(e,t,n,r,o,s){const i=n?n.previousSibling:t.lastChild;if(o&&(o===s||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===s||!(o=o.nextSibling)););else{ai.innerHTML=r?`<svg>${e}</svg>`:e;const l=ai.content;if(r){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Mf=Symbol(\"_vtc\");function Df(e,t,n){const r=e[Mf];r&&(t=(t?[t,...r]:[...r]).join(\" \")),t==null?e.removeAttribute(\"class\"):n?e.setAttribute(\"class\",t):e.className=t}const Uf=Symbol(\"_vod\");function $f(e,t,n){const r=e.style,o=Le(n);if(n&&!o){if(t&&!Le(t))for(const s in t)n[s]==null&&Rs(r,s,\"\");for(const s in n)Rs(r,s,n[s])}else{const s=r.display;o?t!==n&&(r.cssText=n):t&&e.removeAttribute(\"style\"),Uf in e&&(r.display=s)}}const ci=/\\s*!important$/;function Rs(e,t,n){if(G(n))n.forEach(r=>Rs(e,t,r));else if(n==null&&(n=\"\"),t.startsWith(\"--\"))e.setProperty(t,n);else{const r=jf(e,t);ci.test(n)?e.setProperty(bn(r),n.replace(ci,\"\"),\"important\"):e[r]=n}}const ui=[\"Webkit\",\"Moz\",\"ms\"],ss={};function jf(e,t){const n=ss[t];if(n)return n;let r=ht(t);if(r!==\"filter\"&&r in e)return ss[t]=r;r=kr(r);for(let o=0;o<ui.length;o++){const s=ui[o]+r;if(s in e)return ss[t]=s}return t}const fi=\"http://www.w3.org/1999/xlink\";function Hf(e,t,n,r,o){if(r&&t.startsWith(\"xlink:\"))n==null?e.removeAttributeNS(fi,t.slice(6,t.length)):e.setAttributeNS(fi,t,n);else{const s=Vc(t);n==null||s&&!Pl(n)?e.removeAttribute(t):e.setAttribute(t,s?\"\":n)}}function Wf(e,t,n,r,o,s,i){if(t===\"innerHTML\"||t===\"textContent\"){r&&i(r,o,s),e[t]=n??\"\";return}const l=e.tagName;if(t===\"value\"&&l!==\"PROGRESS\"&&!l.includes(\"-\")){e._value=n;const f=l===\"OPTION\"?e.getAttribute(\"value\"):e.value,d=n??\"\";f!==d&&(e.value=d),n==null&&e.removeAttribute(t);return}let a=!1;if(n===\"\"||n==null){const f=typeof e[t];f===\"boolean\"?n=Pl(n):n==null&&f===\"string\"?(n=\"\",a=!0):f===\"number\"&&(n=0,a=!0)}try{e[t]=n}catch{}a&&e.removeAttribute(t)}function Kt(e,t,n,r){e.addEventListener(t,n,r)}function Bf(e,t,n,r){e.removeEventListener(t,n,r)}const di=Symbol(\"_vei\");function Vf(e,t,n,r,o=null){const s=e[di]||(e[di]={}),i=s[t];if(r&&i)i.value=r;else{const[l,a]=Kf(t);if(r){const f=s[t]=qf(r,o);Kt(e,l,f,a)}else i&&(Bf(e,l,i,a),s[t]=void 0)}}const hi=/(?:Once|Passive|Capture)$/;function Kf(e){let t;if(hi.test(e)){t={};let r;for(;r=e.match(hi);)e=e.slice(0,e.length-r[0].length),t[r[0].toLowerCase()]=!0}return[e[2]===\":\"?e.slice(3):bn(e.slice(2)),t]}let os=0;const Yf=Promise.resolve(),Gf=()=>os||(Yf.then(()=>os=0),os=Date.now());function qf(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;rt(Xf(r,n.value),t,5,[r])};return n.value=e,n.attached=Gf(),n}function Xf(e,t){if(G(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r&&r(o))}else return t}const mi=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Jf=(e,t,n,r,o=!1,s,i,l,a)=>{t===\"class\"?Df(e,r,o):t===\"style\"?$f(e,n,r):Pr(t)?Js(t)||Vf(e,t,n,r,i):(t[0]===\".\"?(t=t.slice(1),!0):t[0]===\"^\"?(t=t.slice(1),!1):zf(e,t,r,o))?Wf(e,t,r,s,i,l,a):(t===\"true-value\"?e._trueValue=r:t===\"false-value\"&&(e._falseValue=r),Hf(e,t,r,o))};function zf(e,t,n,r){if(r)return!!(t===\"innerHTML\"||t===\"textContent\"||t in e&&mi(t)&&Q(n));if(t===\"spellcheck\"||t===\"draggable\"||t===\"translate\"||t===\"form\"||t===\"list\"&&e.tagName===\"INPUT\"||t===\"type\"&&e.tagName===\"TEXTAREA\")return!1;if(t===\"width\"||t===\"height\"){const o=e.tagName;return!(o===\"IMG\"||o===\"VIDEO\"||o===\"CANVAS\"||o===\"SOURCE\")}return mi(t)&&Le(n)?!1:t in e}const Rr=e=>{const t=e.props[\"onUpdate:modelValue\"]||!1;return G(t)?n=>fr(t,n):t};function Qf(e){e.target.composing=!0}function pi(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event(\"input\")))}const ln=Symbol(\"_assign\"),Y_={created(e,{modifiers:{lazy:t,trim:n,number:r}},o){e[ln]=Rr(o);const s=r||o.props&&o.props.type===\"number\";Kt(e,t?\"change\":\"input\",i=>{if(i.target.composing)return;let l=e.value;n&&(l=l.trim()),s&&(l=Or(l)),e[ln](l)}),n&&Kt(e,\"change\",()=>{e.value=e.value.trim()}),t||(Kt(e,\"compositionstart\",Qf),Kt(e,\"compositionend\",pi),Kt(e,\"change\",pi))},mounted(e,{value:t}){e.value=t??\"\"},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:r,number:o}},s){if(e[ln]=Rr(s),e.composing)return;const i=o||e.type===\"number\"?Or(e.value):e.value,l=t??\"\";i!==l&&(document.activeElement===e&&e.type!==\"range\"&&(n||r&&e.value.trim()===l)||(e.value=l))}},G_={deep:!0,created(e,{value:t,modifiers:{number:n}},r){const o=Ir(t);Kt(e,\"change\",()=>{const s=Array.prototype.filter.call(e.options,i=>i.selected).map(i=>n?Or(Ar(i)):Ar(i));e[ln](e.multiple?o?new Set(s):s:s[0])}),e[ln]=Rr(r)},mounted(e,{value:t}){_i(e,t)},beforeUpdate(e,t,n){e[ln]=Rr(n)},updated(e,{value:t}){_i(e,t)}};function _i(e,t){const n=e.multiple;if(!(n&&!G(t)&&!Ir(t))){for(let r=0,o=e.options.length;r<o;r++){const s=e.options[r],i=Ar(s);if(n)G(t)?s.selected=Yc(t,i)>-1:s.selected=t.has(i);else if(xr(Ar(s),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Ar(e){return\"_value\"in e?e._value:e.value}const Zf=[\"ctrl\",\"shift\",\"alt\",\"meta\"],ed={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>\"button\"in e&&e.button!==0,middle:e=>\"button\"in e&&e.button!==1,right:e=>\"button\"in e&&e.button!==2,exact:(e,t)=>Zf.some(n=>e[`${n}Key`]&&!t.includes(n))},q_=(e,t)=>e._withMods||(e._withMods=(n,...r)=>{for(let o=0;o<t.length;o++){const s=ed[t[o]];if(s&&s(n,t))return}return e(n,...r)}),td=ke({patchProp:Jf},Ff);let gi;function nd(){return gi||(gi=uf(td))}const X_=(...e)=>{const t=nd().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=rd(r);if(!o)return;const s=t._component;!Q(s)&&!s.render&&!s.template&&(s.template=o.innerHTML),o.innerHTML=\"\";const i=n(o,!1,o instanceof SVGElement);return o instanceof Element&&(o.removeAttribute(\"v-cloak\"),o.setAttribute(\"data-v-app\",\"\")),i},t};function rd(e){return Le(e)?document.querySelector(e):e}/*!\n  * vue-router v4.2.5\n  * (c) 2023 Eduardo San Martin Morote\n  * @license MIT\n  */const Zt=typeof window<\"u\";function sd(e){return e.__esModule||e[Symbol.toStringTag]===\"Module\"}const ue=Object.assign;function is(e,t){const n={};for(const r in t){const o=t[r];n[r]=ot(o)?o.map(e):e(o)}return n}const xn=()=>{},ot=Array.isArray,od=/\\/$/,id=e=>e.replace(od,\"\");function ls(e,t,n=\"/\"){let r,o={},s=\"\",i=\"\";const l=t.indexOf(\"#\");let a=t.indexOf(\"?\");return l<a&&l>=0&&(a=-1),a>-1&&(r=t.slice(0,a),s=t.slice(a+1,l>-1?l:t.length),o=e(s)),l>-1&&(r=r||t.slice(0,l),i=t.slice(l,t.length)),r=ud(r??t,n),{fullPath:r+(s&&\"?\")+s+i,path:r,query:o,hash:i}}function ld(e,t){const n=t.query?e(t.query):\"\";return t.path+(n&&\"?\")+n+(t.hash||\"\")}function bi(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||\"/\"}function ad(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&dn(t.matched[r],n.matched[o])&&Sa(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function dn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Sa(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!cd(e[n],t[n]))return!1;return!0}function cd(e,t){return ot(e)?Ei(e,t):ot(t)?Ei(t,e):e===t}function Ei(e,t){return ot(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function ud(e,t){if(e.startsWith(\"/\"))return e;if(!e)return t;const n=t.split(\"/\"),r=e.split(\"/\"),o=r[r.length-1];(o===\"..\"||o===\".\")&&r.push(\"\");let s=n.length-1,i,l;for(i=0;i<r.length;i++)if(l=r[i],l!==\".\")if(l===\"..\")s>1&&s--;else break;return n.slice(0,s).join(\"/\")+\"/\"+r.slice(i-(i===r.length?1:0)).join(\"/\")}var Kn;(function(e){e.pop=\"pop\",e.push=\"push\"})(Kn||(Kn={}));var Fn;(function(e){e.back=\"back\",e.forward=\"forward\",e.unknown=\"\"})(Fn||(Fn={}));function fd(e){if(!e)if(Zt){const t=document.querySelector(\"base\");e=t&&t.getAttribute(\"href\")||\"/\",e=e.replace(/^\\w+:\\/\\/[^\\/]+/,\"\")}else e=\"/\";return e[0]!==\"/\"&&e[0]!==\"#\"&&(e=\"/\"+e),id(e)}const dd=/^[^#]+#/;function hd(e,t){return e.replace(dd,\"#\")+t}function md(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const Br=()=>({left:window.pageXOffset,top:window.pageYOffset});function pd(e){let t;if(\"el\"in e){const n=e.el,r=typeof n==\"string\"&&n.startsWith(\"#\"),o=typeof n==\"string\"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=md(o,e)}else t=e;\"scrollBehavior\"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function yi(e,t){return(history.state?history.state.position-t:-1)+e}const As=new Map;function _d(e,t){As.set(e,t)}function gd(e){const t=As.get(e);return As.delete(e),t}let bd=()=>location.protocol+\"//\"+location.host;function Na(e,t){const{pathname:n,search:r,hash:o}=t,s=e.indexOf(\"#\");if(s>-1){let l=o.includes(e.slice(s))?e.slice(s).length:1,a=o.slice(l);return a[0]!==\"/\"&&(a=\"/\"+a),bi(a,\"\")}return bi(n,e)+r+o}function Ed(e,t,n,r){let o=[],s=[],i=null;const l=({state:m})=>{const b=Na(e,location),y=n.value,S=t.value;let A=0;if(m){if(n.value=b,t.value=m,i&&i===y){i=null;return}A=S?m.position-S.position:0}else r(b);o.forEach(g=>{g(n.value,y,{delta:A,type:Kn.pop,direction:A?A>0?Fn.forward:Fn.back:Fn.unknown})})};function a(){i=n.value}function f(m){o.push(m);const b=()=>{const y=o.indexOf(m);y>-1&&o.splice(y,1)};return s.push(b),b}function d(){const{history:m}=window;m.state&&m.replaceState(ue({},m.state,{scroll:Br()}),\"\")}function h(){for(const m of s)m();s=[],window.removeEventListener(\"popstate\",l),window.removeEventListener(\"beforeunload\",d)}return window.addEventListener(\"popstate\",l),window.addEventListener(\"beforeunload\",d,{passive:!0}),{pauseListeners:a,listen:f,destroy:h}}function Oi(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?Br():null}}function yd(e){const{history:t,location:n}=window,r={value:Na(e,n)},o={value:t.state};o.value||s(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function s(a,f,d){const h=e.indexOf(\"#\"),m=h>-1?(n.host&&document.querySelector(\"base\")?e:e.slice(h))+a:bd()+e+a;try{t[d?\"replaceState\":\"pushState\"](f,\"\",m),o.value=f}catch(b){console.error(b),n[d?\"replace\":\"assign\"](m)}}function i(a,f){const d=ue({},t.state,Oi(o.value.back,a,o.value.forward,!0),f,{position:o.value.position});s(a,d,!0),r.value=a}function l(a,f){const d=ue({},o.value,t.state,{forward:a,scroll:Br()});s(d.current,d,!0);const h=ue({},Oi(r.value,a,null),{position:d.position+1},f);s(a,h,!1),r.value=a}return{location:r,state:o,push:l,replace:i}}function J_(e){e=fd(e);const t=yd(e),n=Ed(e,t.state,t.location,t.replace);function r(s,i=!0){i||n.pauseListeners(),history.go(s)}const o=ue({location:\"\",base:e,go:r,createHref:hd.bind(null,e)},t,n);return Object.defineProperty(o,\"location\",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,\"state\",{enumerable:!0,get:()=>t.state.value}),o}function Od(e){return typeof e==\"string\"||e&&typeof e==\"object\"}function Ra(e){return typeof e==\"string\"||typeof e==\"symbol\"}const Nt={path:\"/\",name:void 0,params:{},query:{},hash:\"\",fullPath:\"/\",matched:[],meta:{},redirectedFrom:void 0},Aa=Symbol(\"\");var Ti;(function(e){e[e.aborted=4]=\"aborted\",e[e.cancelled=8]=\"cancelled\",e[e.duplicated=16]=\"duplicated\"})(Ti||(Ti={}));function hn(e,t){return ue(new Error,{type:e,[Aa]:!0},t)}function _t(e,t){return e instanceof Error&&Aa in e&&(t==null||!!(e.type&t))}const vi=\"[^/]+?\",Td={sensitive:!1,strict:!1,start:!0,end:!0},vd=/[.+*?^${}()[\\]/\\\\]/g;function Sd(e,t){const n=ue({},Td,t),r=[];let o=n.start?\"^\":\"\";const s=[];for(const f of e){const d=f.length?[]:[90];n.strict&&!f.length&&(o+=\"/\");for(let h=0;h<f.length;h++){const m=f[h];let b=40+(n.sensitive?.25:0);if(m.type===0)h||(o+=\"/\"),o+=m.value.replace(vd,\"\\\\$&\"),b+=40;else if(m.type===1){const{value:y,repeatable:S,optional:A,regexp:g}=m;s.push({name:y,repeatable:S,optional:A});const v=g||vi;if(v!==vi){b+=10;try{new RegExp(`(${v})`)}catch(T){throw new Error(`Invalid custom RegExp for param \"${y}\" (${v}): `+T.message)}}let L=S?`((?:${v})(?:/(?:${v}))*)`:`(${v})`;h||(L=A&&f.length<2?`(?:/${L})`:\"/\"+L),A&&(L+=\"?\"),o+=L,b+=20,A&&(b+=-8),S&&(b+=-20),v===\".*\"&&(b+=-50)}d.push(b)}r.push(d)}if(n.strict&&n.end){const f=r.length-1;r[f][r[f].length-1]+=.7000000000000001}n.strict||(o+=\"/?\"),n.end?o+=\"$\":n.strict&&(o+=\"(?:/|$)\");const i=new RegExp(o,n.sensitive?\"\":\"i\");function l(f){const d=f.match(i),h={};if(!d)return null;for(let m=1;m<d.length;m++){const b=d[m]||\"\",y=s[m-1];h[y.name]=b&&y.repeatable?b.split(\"/\"):b}return h}function a(f){let d=\"\",h=!1;for(const m of e){(!h||!d.endsWith(\"/\"))&&(d+=\"/\"),h=!1;for(const b of m)if(b.type===0)d+=b.value;else if(b.type===1){const{value:y,repeatable:S,optional:A}=b,g=y in f?f[y]:\"\";if(ot(g)&&!S)throw new Error(`Provided param \"${y}\" is an array but it is not repeatable (* or + modifiers)`);const v=ot(g)?g.join(\"/\"):g;if(!v)if(A)m.length<2&&(d.endsWith(\"/\")?d=d.slice(0,-1):h=!0);else throw new Error(`Missing required param \"${y}\"`);d+=v}}return d||\"/\"}return{re:i,score:r,keys:s,parse:l,stringify:a}}function Nd(e,t){let n=0;for(;n<e.length&&n<t.length;){const r=t[n]-e[n];if(r)return r;n++}return e.length<t.length?e.length===1&&e[0]===40+40?-1:1:e.length>t.length?t.length===1&&t[0]===40+40?1:-1:0}function Rd(e,t){let n=0;const r=e.score,o=t.score;for(;n<r.length&&n<o.length;){const s=Nd(r[n],o[n]);if(s)return s;n++}if(Math.abs(o.length-r.length)===1){if(Si(r))return 1;if(Si(o))return-1}return o.length-r.length}function Si(e){const t=e[e.length-1];return e.length>0&&t[t.length-1]<0}const Ad={type:0,value:\"\"},Ld=/[a-zA-Z0-9_]/;function Cd(e){if(!e)return[[]];if(e===\"/\")return[[Ad]];if(!e.startsWith(\"/\"))throw new Error(`Invalid path \"${e}\"`);function t(b){throw new Error(`ERR (${n})/\"${f}\": ${b}`)}let n=0,r=n;const o=[];let s;function i(){s&&o.push(s),s=[]}let l=0,a,f=\"\",d=\"\";function h(){f&&(n===0?s.push({type:0,value:f}):n===1||n===2||n===3?(s.length>1&&(a===\"*\"||a===\"+\")&&t(`A repeatable param (${f}) must be alone in its segment. eg: '/:ids+.`),s.push({type:1,value:f,regexp:d,repeatable:a===\"*\"||a===\"+\",optional:a===\"*\"||a===\"?\"})):t(\"Invalid state to consume buffer\"),f=\"\")}function m(){f+=a}for(;l<e.length;){if(a=e[l++],a===\"\\\\\"&&n!==2){r=n,n=4;continue}switch(n){case 0:a===\"/\"?(f&&h(),i()):a===\":\"?(h(),n=1):m();break;case 4:m(),n=r;break;case 1:a===\"(\"?n=2:Ld.test(a)?m():(h(),n=0,a!==\"*\"&&a!==\"?\"&&a!==\"+\"&&l--);break;case 2:a===\")\"?d[d.length-1]==\"\\\\\"?d=d.slice(0,-1)+a:n=3:d+=a;break;case 3:h(),n=0,a!==\"*\"&&a!==\"?\"&&a!==\"+\"&&l--,d=\"\";break;default:t(\"Unknown state\");break}}return n===2&&t(`Unfinished custom RegExp for param \"${f}\"`),h(),i(),o}function Pd(e,t,n){const r=Sd(Cd(e.path),n),o=ue(r,{record:e,parent:t,children:[],alias:[]});return t&&!o.record.aliasOf==!t.record.aliasOf&&t.children.push(o),o}function Id(e,t){const n=[],r=new Map;t=Ai({strict:!1,end:!0,sensitive:!1},t);function o(d){return r.get(d)}function s(d,h,m){const b=!m,y=wd(d);y.aliasOf=m&&m.record;const S=Ai(t,d),A=[y];if(\"alias\"in d){const L=typeof d.alias==\"string\"?[d.alias]:d.alias;for(const T of L)A.push(ue({},y,{components:m?m.record.components:y.components,path:T,aliasOf:m?m.record:y}))}let g,v;for(const L of A){const{path:T}=L;if(h&&T[0]!==\"/\"){const k=h.record.path,M=k[k.length-1]===\"/\"?\"\":\"/\";L.path=h.record.path+(T&&M+T)}if(g=Pd(L,h,S),m?m.alias.push(g):(v=v||g,v!==g&&v.alias.push(g),b&&d.name&&!Ri(g)&&i(d.name)),y.children){const k=y.children;for(let M=0;M<k.length;M++)s(k[M],g,m&&m.children[M])}m=m||g,(g.record.components&&Object.keys(g.record.components).length||g.record.name||g.record.redirect)&&a(g)}return v?()=>{i(v)}:xn}function i(d){if(Ra(d)){const h=r.get(d);h&&(r.delete(d),n.splice(n.indexOf(h),1),h.children.forEach(i),h.alias.forEach(i))}else{const h=n.indexOf(d);h>-1&&(n.splice(h,1),d.record.name&&r.delete(d.record.name),d.children.forEach(i),d.alias.forEach(i))}}function l(){return n}function a(d){let h=0;for(;h<n.length&&Rd(d,n[h])>=0&&(d.record.path!==n[h].record.path||!La(d,n[h]));)h++;n.splice(h,0,d),d.record.name&&!Ri(d)&&r.set(d.record.name,d)}function f(d,h){let m,b={},y,S;if(\"name\"in d&&d.name){if(m=r.get(d.name),!m)throw hn(1,{location:d});S=m.record.name,b=ue(Ni(h.params,m.keys.filter(v=>!v.optional).map(v=>v.name)),d.params&&Ni(d.params,m.keys.map(v=>v.name))),y=m.stringify(b)}else if(\"path\"in d)y=d.path,m=n.find(v=>v.re.test(y)),m&&(b=m.parse(y),S=m.record.name);else{if(m=h.name?r.get(h.name):n.find(v=>v.re.test(h.path)),!m)throw hn(1,{location:d,currentLocation:h});S=m.record.name,b=ue({},h.params,d.params),y=m.stringify(b)}const A=[];let g=m;for(;g;)A.unshift(g.record),g=g.parent;return{name:S,path:y,params:b,matched:A,meta:xd(A)}}return e.forEach(d=>s(d)),{addRoute:s,resolve:f,removeRoute:i,getRoutes:l,getRecordMatcher:o}}function Ni(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function wd(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:kd(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:\"components\"in e?e.components||null:e.component&&{default:e.component}}}function kd(e){const t={},n=e.props||!1;if(\"component\"in e)t.default=n;else for(const r in e.components)t[r]=typeof n==\"object\"?n[r]:n;return t}function Ri(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function xd(e){return e.reduce((t,n)=>ue(t,n.meta),{})}function Ai(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function La(e,t){return t.children.some(n=>n===e||La(e,n))}const Ca=/#/g,Fd=/&/g,Md=/\\//g,Dd=/=/g,Ud=/\\?/g,Pa=/\\+/g,$d=/%5B/g,jd=/%5D/g,Ia=/%5E/g,Hd=/%60/g,wa=/%7B/g,Wd=/%7C/g,ka=/%7D/g,Bd=/%20/g;function bo(e){return encodeURI(\"\"+e).replace(Wd,\"|\").replace($d,\"[\").replace(jd,\"]\")}function Vd(e){return bo(e).replace(wa,\"{\").replace(ka,\"}\").replace(Ia,\"^\")}function Ls(e){return bo(e).replace(Pa,\"%2B\").replace(Bd,\"+\").replace(Ca,\"%23\").replace(Fd,\"%26\").replace(Hd,\"`\").replace(wa,\"{\").replace(ka,\"}\").replace(Ia,\"^\")}function Kd(e){return Ls(e).replace(Dd,\"%3D\")}function Yd(e){return bo(e).replace(Ca,\"%23\").replace(Ud,\"%3F\")}function Gd(e){return e==null?\"\":Yd(e).replace(Md,\"%2F\")}function Lr(e){try{return decodeURIComponent(\"\"+e)}catch{}return\"\"+e}function qd(e){const t={};if(e===\"\"||e===\"?\")return t;const r=(e[0]===\"?\"?e.slice(1):e).split(\"&\");for(let o=0;o<r.length;++o){const s=r[o].replace(Pa,\" \"),i=s.indexOf(\"=\"),l=Lr(i<0?s:s.slice(0,i)),a=i<0?null:Lr(s.slice(i+1));if(l in t){let f=t[l];ot(f)||(f=t[l]=[f]),f.push(a)}else t[l]=a}return t}function Li(e){let t=\"\";for(let n in e){const r=e[n];if(n=Kd(n),r==null){r!==void 0&&(t+=(t.length?\"&\":\"\")+n);continue}(ot(r)?r.map(s=>s&&Ls(s)):[r&&Ls(r)]).forEach(s=>{s!==void 0&&(t+=(t.length?\"&\":\"\")+n,s!=null&&(t+=\"=\"+s))})}return t}function Xd(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=ot(r)?r.map(o=>o==null?null:\"\"+o):r==null?r:\"\"+r)}return t}const Jd=Symbol(\"\"),Ci=Symbol(\"\"),Eo=Symbol(\"\"),xa=Symbol(\"\"),Cs=Symbol(\"\");function Nn(){let e=[];function t(r){return e.push(r),()=>{const o=e.indexOf(r);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function It(e,t,n,r,o){const s=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((i,l)=>{const a=h=>{h===!1?l(hn(4,{from:n,to:t})):h instanceof Error?l(h):Od(h)?l(hn(2,{from:t,to:h})):(s&&r.enterCallbacks[o]===s&&typeof h==\"function\"&&s.push(h),i())},f=e.call(r&&r.instances[o],t,n,a);let d=Promise.resolve(f);e.length<3&&(d=d.then(a)),d.catch(h=>l(h))})}function as(e,t,n,r){const o=[];for(const s of e)for(const i in s.components){let l=s.components[i];if(!(t!==\"beforeRouteEnter\"&&!s.instances[i]))if(zd(l)){const f=(l.__vccOpts||l)[t];f&&o.push(It(f,n,r,s,i))}else{let a=l();o.push(()=>a.then(f=>{if(!f)return Promise.reject(new Error(`Couldn't resolve component \"${i}\" at \"${s.path}\"`));const d=sd(f)?f.default:f;s.components[i]=d;const m=(d.__vccOpts||d)[t];return m&&It(m,n,r,s,i)()}))}}return o}function zd(e){return typeof e==\"object\"||\"displayName\"in e||\"props\"in e||\"__vccOpts\"in e}function Pi(e){const t=st(Eo),n=st(xa),r=Oe(()=>t.resolve(sn(e.to))),o=Oe(()=>{const{matched:a}=r.value,{length:f}=a,d=a[f-1],h=n.matched;if(!d||!h.length)return-1;const m=h.findIndex(dn.bind(null,d));if(m>-1)return m;const b=Ii(a[f-2]);return f>1&&Ii(d)===b&&h[h.length-1].path!==b?h.findIndex(dn.bind(null,a[f-2])):m}),s=Oe(()=>o.value>-1&&th(n.params,r.value.params)),i=Oe(()=>o.value>-1&&o.value===n.matched.length-1&&Sa(n.params,r.value.params));function l(a={}){return eh(a)?t[sn(e.replace)?\"replace\":\"push\"](sn(e.to)).catch(xn):Promise.resolve()}return{route:r,href:Oe(()=>r.value.href),isActive:s,isExactActive:i,navigate:l}}const Qd=Qn({name:\"RouterLink\",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:\"page\"}},useLink:Pi,setup(e,{slots:t}){const n=zn(Pi(e)),{options:r}=st(Eo),o=Oe(()=>({[wi(e.activeClass,r.linkActiveClass,\"router-link-active\")]:n.isActive,[wi(e.exactActiveClass,r.linkExactActiveClass,\"router-link-exact-active\")]:n.isExactActive}));return()=>{const s=t.default&&t.default(n);return e.custom?s:Wr(\"a\",{\"aria-current\":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},s)}}}),Zd=Qd;function eh(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute(\"target\");if(/\\b_blank\\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function th(e,t){for(const n in t){const r=t[n],o=e[n];if(typeof r==\"string\"){if(r!==o)return!1}else if(!ot(o)||o.length!==r.length||r.some((s,i)=>s!==o[i]))return!1}return!0}function Ii(e){return e?e.aliasOf?e.aliasOf.path:e.path:\"\"}const wi=(e,t,n)=>e??t??n,nh=Qn({name:\"RouterView\",inheritAttrs:!1,props:{name:{type:String,default:\"default\"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=st(Cs),o=Oe(()=>e.route||r.value),s=st(Ci,0),i=Oe(()=>{let f=sn(s);const{matched:d}=o.value;let h;for(;(h=d[f])&&!h.components;)f++;return f}),l=Oe(()=>o.value.matched[i.value]);hr(Ci,Oe(()=>i.value+1)),hr(Jd,l),hr(Cs,o);const a=qe();return Ft(()=>[a.value,l.value,e.name],([f,d,h],[m,b,y])=>{d&&(d.instances[h]=f,b&&b!==d&&f&&f===m&&(d.leaveGuards.size||(d.leaveGuards=b.leaveGuards),d.updateGuards.size||(d.updateGuards=b.updateGuards))),f&&d&&(!b||!dn(d,b)||!m)&&(d.enterCallbacks[h]||[]).forEach(S=>S(f))},{flush:\"post\"}),()=>{const f=o.value,d=e.name,h=l.value,m=h&&h.components[d];if(!m)return ki(n.default,{Component:m,route:f});const b=h.props[d],y=b?b===!0?f.params:typeof b==\"function\"?b(f):b:null,A=Wr(m,ue({},y,t,{onVnodeUnmounted:g=>{g.component.isUnmounted&&(h.instances[d]=null)},ref:a}));return ki(n.default,{Component:A,route:f})||A}}});function ki(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const rh=nh;function z_(e){const t=Id(e.routes,e),n=e.parseQuery||qd,r=e.stringifyQuery||Li,o=e.history,s=Nn(),i=Nn(),l=Nn(),a=Xl(Nt);let f=Nt;Zt&&e.scrollBehavior&&\"scrollRestoration\"in history&&(history.scrollRestoration=\"manual\");const d=is.bind(null,C=>\"\"+C),h=is.bind(null,Gd),m=is.bind(null,Lr);function b(C,j){let U,W;return Ra(C)?(U=t.getRecordMatcher(C),W=j):W=C,t.addRoute(W,U)}function y(C){const j=t.getRecordMatcher(C);j&&t.removeRoute(j)}function S(){return t.getRoutes().map(C=>C.record)}function A(C){return!!t.getRecordMatcher(C)}function g(C,j){if(j=ue({},j||a.value),typeof C==\"string\"){const u=ls(n,C,j.path),p=t.resolve({path:u.path},j),E=o.createHref(u.fullPath);return ue(u,p,{params:m(p.params),hash:Lr(u.hash),redirectedFrom:void 0,href:E})}let U;if(\"path\"in C)U=ue({},C,{path:ls(n,C.path,j.path).path});else{const u=ue({},C.params);for(const p in u)u[p]==null&&delete u[p];U=ue({},C,{params:h(u)}),j.params=h(j.params)}const W=t.resolve(U,j),Z=C.hash||\"\";W.params=d(m(W.params));const _=ld(r,ue({},C,{hash:Vd(Z),path:W.path})),c=o.createHref(_);return ue({fullPath:_,hash:Z,query:r===Li?Xd(C.query):C.query||{}},W,{redirectedFrom:void 0,href:c})}function v(C){return typeof C==\"string\"?ls(n,C,a.value.path):ue({},C)}function L(C,j){if(f!==C)return hn(8,{from:j,to:C})}function T(C){return I(C)}function k(C){return T(ue(v(C),{replace:!0}))}function M(C){const j=C.matched[C.matched.length-1];if(j&&j.redirect){const{redirect:U}=j;let W=typeof U==\"function\"?U(C):U;return typeof W==\"string\"&&(W=W.includes(\"?\")||W.includes(\"#\")?W=v(W):{path:W},W.params={}),ue({query:C.query,hash:C.hash,params:\"path\"in W?{}:C.params},W)}}function I(C,j){const U=f=g(C),W=a.value,Z=C.state,_=C.force,c=C.replace===!0,u=M(U);if(u)return I(ue(v(u),{state:typeof u==\"object\"?ue({},Z,u.state):Z,force:_,replace:c}),j||U);const p=U;p.redirectedFrom=j;let E;return!_&&ad(r,W,U)&&(E=hn(16,{to:p,from:W}),xe(W,W,!0,!1)),(E?Promise.resolve(E):te(p,W)).catch(N=>_t(N)?_t(N,2)?N:Me(N):ne(N,p,W)).then(N=>{if(N){if(_t(N,2))return I(ue({replace:c},v(N.to),{state:typeof N.to==\"object\"?ue({},Z,N.to.state):Z,force:_}),j||p)}else N=ae(p,W,!0,c,Z);return fe(p,W,N),N})}function V(C,j){const U=L(C,j);return U?Promise.reject(U):Promise.resolve()}function K(C){const j=Ke.values().next().value;return j&&typeof j.runWithContext==\"function\"?j.runWithContext(C):C()}function te(C,j){let U;const[W,Z,_]=sh(C,j);U=as(W.reverse(),\"beforeRouteLeave\",C,j);for(const u of W)u.leaveGuards.forEach(p=>{U.push(It(p,C,j))});const c=V.bind(null,C,j);return U.push(c),ye(U).then(()=>{U=[];for(const u of s.list())U.push(It(u,C,j));return U.push(c),ye(U)}).then(()=>{U=as(Z,\"beforeRouteUpdate\",C,j);for(const u of Z)u.updateGuards.forEach(p=>{U.push(It(p,C,j))});return U.push(c),ye(U)}).then(()=>{U=[];for(const u of _)if(u.beforeEnter)if(ot(u.beforeEnter))for(const p of u.beforeEnter)U.push(It(p,C,j));else U.push(It(u.beforeEnter,C,j));return U.push(c),ye(U)}).then(()=>(C.matched.forEach(u=>u.enterCallbacks={}),U=as(_,\"beforeRouteEnter\",C,j),U.push(c),ye(U))).then(()=>{U=[];for(const u of i.list())U.push(It(u,C,j));return U.push(c),ye(U)}).catch(u=>_t(u,8)?u:Promise.reject(u))}function fe(C,j,U){l.list().forEach(W=>K(()=>W(C,j,U)))}function ae(C,j,U,W,Z){const _=L(C,j);if(_)return _;const c=j===Nt,u=Zt?history.state:{};U&&(W||c?o.replace(C.fullPath,ue({scroll:c&&u&&u.scroll},Z)):o.push(C.fullPath,Z)),a.value=C,xe(C,j,U,c),Me()}let me;function je(){me||(me=o.listen((C,j,U)=>{if(!pt.listening)return;const W=g(C),Z=M(W);if(Z){I(ue(Z,{replace:!0}),W).catch(xn);return}f=W;const _=a.value;Zt&&_d(yi(_.fullPath,U.delta),Br()),te(W,_).catch(c=>_t(c,12)?c:_t(c,2)?(I(c.to,W).then(u=>{_t(u,20)&&!U.delta&&U.type===Kn.pop&&o.go(-1,!1)}).catch(xn),Promise.reject()):(U.delta&&o.go(-U.delta,!1),ne(c,W,_))).then(c=>{c=c||ae(W,_,!1),c&&(U.delta&&!_t(c,8)?o.go(-U.delta,!1):U.type===Kn.pop&&_t(c,20)&&o.go(-1,!1)),fe(W,_,c)}).catch(xn)}))}let Ce=Nn(),z=Nn(),se;function ne(C,j,U){Me(C);const W=z.list();return W.length?W.forEach(Z=>Z(C,j,U)):console.error(C),Promise.reject(C)}function Ee(){return se&&a.value!==Nt?Promise.resolve():new Promise((C,j)=>{Ce.add([C,j])})}function Me(C){return se||(se=!C,je(),Ce.list().forEach(([j,U])=>C?U(C):j()),Ce.reset()),C}function xe(C,j,U,W){const{scrollBehavior:Z}=e;if(!Zt||!Z)return Promise.resolve();const _=!U&&gd(yi(C.fullPath,0))||(W||!U)&&history.state&&history.state.scroll||null;return co().then(()=>Z(C,j,_)).then(c=>c&&pd(c)).catch(c=>ne(c,C,j))}const ve=C=>o.go(C);let Xe;const Ke=new Set,pt={currentRoute:a,listening:!0,addRoute:b,removeRoute:y,hasRoute:A,getRoutes:S,resolve:g,options:e,push:T,replace:k,go:ve,back:()=>ve(-1),forward:()=>ve(1),beforeEach:s.add,beforeResolve:i.add,afterEach:l.add,onError:z.add,isReady:Ee,install(C){const j=this;C.component(\"RouterLink\",Zd),C.component(\"RouterView\",rh),C.config.globalProperties.$router=j,Object.defineProperty(C.config.globalProperties,\"$route\",{enumerable:!0,get:()=>sn(a)}),Zt&&!Xe&&a.value===Nt&&(Xe=!0,T(o.location).catch(Z=>{}));const U={};for(const Z in Nt)Object.defineProperty(U,Z,{get:()=>a.value[Z],enumerable:!0});C.provide(Eo,j),C.provide(xa,Vl(U)),C.provide(Cs,a);const W=C.unmount;Ke.add(C),C.unmount=function(){Ke.delete(C),Ke.size<1&&(f=Nt,me&&me(),me=null,a.value=Nt,Xe=!1,se=!1),W()}}};function ye(C){return C.reduce((j,U)=>j.then(()=>K(U)),Promise.resolve())}return pt}function sh(e,t){const n=[],r=[],o=[],s=Math.max(t.matched.length,e.matched.length);for(let i=0;i<s;i++){const l=t.matched[i];l&&(e.matched.find(f=>dn(f,l))?r.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(f=>dn(f,a))||o.push(a))}return[n,r,o]}var oh=!1;/*!\n * pinia v2.1.7\n * (c) 2023 Eduardo San Martin Morote\n * @license MIT\n */let Fa;const Vr=e=>Fa=e,Ma=Symbol();function Ps(e){return e&&typeof e==\"object\"&&Object.prototype.toString.call(e)===\"[object Object]\"&&typeof e.toJSON!=\"function\"}var Mn;(function(e){e.direct=\"direct\",e.patchObject=\"patch object\",e.patchFunction=\"patch function\"})(Mn||(Mn={}));function Q_(){const e=to(!0),t=e.run(()=>qe({}));let n=[],r=[];const o=Mr({install(s){Vr(o),o._a=s,s.provide(Ma,o),s.config.globalProperties.$pinia=o,r.forEach(i=>n.push(i)),r=[]},use(s){return!this._a&&!oh?r.push(s):n.push(s),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return o}const Da=()=>{};function xi(e,t,n,r=Da){e.push(t);const o=()=>{const s=e.indexOf(t);s>-1&&(e.splice(s,1),r())};return!n&&kl()&&qc(o),o}function Qt(e,...t){e.slice().forEach(n=>{n(...t)})}const ih=e=>e();function Is(e,t){e instanceof Map&&t instanceof Map&&t.forEach((n,r)=>e.set(r,n)),e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const r=t[n],o=e[n];Ps(o)&&Ps(r)&&e.hasOwnProperty(n)&&!Te(r)&&!kt(r)?e[n]=Is(o,r):e[n]=r}return e}const lh=Symbol();function ah(e){return!Ps(e)||!e.hasOwnProperty(lh)}const{assign:Ct}=Object;function ch(e){return!!(Te(e)&&e.effect)}function uh(e,t,n,r){const{state:o,actions:s,getters:i}=t,l=n.state.value[e];let a;function f(){l||(n.state.value[e]=o?o():{});const d=bu(n.state.value[e]);return Ct(d,s,Object.keys(i||{}).reduce((h,m)=>(h[m]=Mr(Oe(()=>{Vr(n);const b=n._s.get(e);return i[m].call(b,b)})),h),{}))}return a=Ua(e,f,t,n,r,!0),a}function Ua(e,t,n={},r,o,s){let i;const l=Ct({actions:{}},n),a={deep:!0};let f,d,h=[],m=[],b;const y=r.state.value[e];!s&&!y&&(r.state.value[e]={}),qe({});let S;function A(V){let K;f=d=!1,typeof V==\"function\"?(V(r.state.value[e]),K={type:Mn.patchFunction,storeId:e,events:b}):(Is(r.state.value[e],V),K={type:Mn.patchObject,payload:V,storeId:e,events:b});const te=S=Symbol();co().then(()=>{S===te&&(f=!0)}),d=!0,Qt(h,K,r.state.value[e])}const g=s?function(){const{state:K}=n,te=K?K():{};this.$patch(fe=>{Ct(fe,te)})}:Da;function v(){i.stop(),h=[],m=[],r._s.delete(e)}function L(V,K){return function(){Vr(r);const te=Array.from(arguments),fe=[],ae=[];function me(z){fe.push(z)}function je(z){ae.push(z)}Qt(m,{args:te,name:V,store:k,after:me,onError:je});let Ce;try{Ce=K.apply(this&&this.$id===e?this:k,te)}catch(z){throw Qt(ae,z),z}return Ce instanceof Promise?Ce.then(z=>(Qt(fe,z),z)).catch(z=>(Qt(ae,z),Promise.reject(z))):(Qt(fe,Ce),Ce)}}const T={_p:r,$id:e,$onAction:xi.bind(null,m),$patch:A,$reset:g,$subscribe(V,K={}){const te=xi(h,V,K.detached,()=>fe()),fe=i.run(()=>Ft(()=>r.state.value[e],ae=>{(K.flush===\"sync\"?d:f)&&V({storeId:e,type:Mn.direct,events:b},ae)},Ct({},a,K)));return te},$dispose:v},k=zn(T);r._s.set(e,k);const I=(r._a&&r._a.runWithContext||ih)(()=>r._e.run(()=>(i=to()).run(t)));for(const V in I){const K=I[V];if(Te(K)&&!ch(K)||kt(K))s||(y&&ah(K)&&(Te(K)?K.value=y[V]:Is(K,y[V])),r.state.value[e][V]=K);else if(typeof K==\"function\"){const te=L(V,K);I[V]=te,l.actions[V]=K}}return Ct(k,I),Ct(le(k),I),Object.defineProperty(k,\"$state\",{get:()=>r.state.value[e],set:V=>{A(K=>{Ct(K,V)})}}),r._p.forEach(V=>{Ct(k,i.run(()=>V({store:k,app:r._a,pinia:r,options:l})))}),y&&s&&n.hydrate&&n.hydrate(k.$state,y),f=!0,d=!0,k}function Z_(e,t,n){let r,o;const s=typeof t==\"function\";typeof e==\"string\"?(r=e,o=s?n:t):(o=e,r=e.id);function i(l,a){const f=rf();return l=l||(f?st(Ma,null):null),l&&Vr(l),l=Fa,l._s.has(r)||(s?Ua(r,t,o,l):uh(r,o,l)),l._s.get(r)}return i.$id=r,i}const fh=(e,t)=>{const n=e.__vccOpts||e;for(const[r,o]of t)n[r]=o;return n},dh={},hh={class:\"container\"},mh=po(\"h1\",null,\"Oooops... not found. This is a 404\",-1),ph=[mh];function _h(e,t){return Ea(),_f(\"div\",hh,ph)}const eg=fh(dh,[[\"render\",_h]]);function $a(e,t){return function(){return e.apply(t,arguments)}}const{toString:gh}=Object.prototype,{getPrototypeOf:yo}=Object,Kr=(e=>t=>{const n=gh.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),mt=e=>(e=e.toLowerCase(),t=>Kr(t)===e),Yr=e=>t=>typeof t===e,{isArray:On}=Array,Yn=Yr(\"undefined\");function bh(e){return e!==null&&!Yn(e)&&e.constructor!==null&&!Yn(e.constructor)&&ze(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const ja=mt(\"ArrayBuffer\");function Eh(e){let t;return typeof ArrayBuffer<\"u\"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&ja(e.buffer),t}const yh=Yr(\"string\"),ze=Yr(\"function\"),Ha=Yr(\"number\"),Gr=e=>e!==null&&typeof e==\"object\",Oh=e=>e===!0||e===!1,_r=e=>{if(Kr(e)!==\"object\")return!1;const t=yo(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},Th=mt(\"Date\"),vh=mt(\"File\"),Sh=mt(\"Blob\"),Nh=mt(\"FileList\"),Rh=e=>Gr(e)&&ze(e.pipe),Ah=e=>{let t;return e&&(typeof FormData==\"function\"&&e instanceof FormData||ze(e.append)&&((t=Kr(e))===\"formdata\"||t===\"object\"&&ze(e.toString)&&e.toString()===\"[object FormData]\"))},Lh=mt(\"URLSearchParams\"),Ch=e=>e.trim?e.trim():e.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\"\");function er(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>\"u\")return;let r,o;if(typeof e!=\"object\"&&(e=[e]),On(e))for(r=0,o=e.length;r<o;r++)t.call(null,e[r],r,e);else{const s=n?Object.getOwnPropertyNames(e):Object.keys(e),i=s.length;let l;for(r=0;r<i;r++)l=s[r],t.call(null,e[l],l,e)}}function Wa(e,t){t=t.toLowerCase();const n=Object.keys(e);let r=n.length,o;for(;r-- >0;)if(o=n[r],t===o.toLowerCase())return o;return null}const Ba=(()=>typeof globalThis<\"u\"?globalThis:typeof self<\"u\"?self:typeof window<\"u\"?window:global)(),Va=e=>!Yn(e)&&e!==Ba;function ws(){const{caseless:e}=Va(this)&&this||{},t={},n=(r,o)=>{const s=e&&Wa(t,o)||o;_r(t[s])&&_r(r)?t[s]=ws(t[s],r):_r(r)?t[s]=ws({},r):On(r)?t[s]=r.slice():t[s]=r};for(let r=0,o=arguments.length;r<o;r++)arguments[r]&&er(arguments[r],n);return t}const Ph=(e,t,n,{allOwnKeys:r}={})=>(er(t,(o,s)=>{n&&ze(o)?e[s]=$a(o,n):e[s]=o},{allOwnKeys:r}),e),Ih=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),wh=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,\"super\",{value:t.prototype}),n&&Object.assign(e.prototype,n)},kh=(e,t,n,r)=>{let o,s,i;const l={};if(t=t||{},e==null)return t;do{for(o=Object.getOwnPropertyNames(e),s=o.length;s-- >0;)i=o[s],(!r||r(i,e,t))&&!l[i]&&(t[i]=e[i],l[i]=!0);e=n!==!1&&yo(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},xh=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return r!==-1&&r===n},Fh=e=>{if(!e)return null;if(On(e))return e;let t=e.length;if(!Ha(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},Mh=(e=>t=>e&&t instanceof e)(typeof Uint8Array<\"u\"&&yo(Uint8Array)),Dh=(e,t)=>{const r=(e&&e[Symbol.iterator]).call(e);let o;for(;(o=r.next())&&!o.done;){const s=o.value;t.call(e,s[0],s[1])}},Uh=(e,t)=>{let n;const r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},$h=mt(\"HTMLFormElement\"),jh=e=>e.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,function(n,r,o){return r.toUpperCase()+o}),Fi=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),Hh=mt(\"RegExp\"),Ka=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};er(n,(o,s)=>{let i;(i=t(o,s,e))!==!1&&(r[s]=i||o)}),Object.defineProperties(e,r)},Wh=e=>{Ka(e,(t,n)=>{if(ze(e)&&[\"arguments\",\"caller\",\"callee\"].indexOf(n)!==-1)return!1;const r=e[n];if(ze(r)){if(t.enumerable=!1,\"writable\"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error(\"Can not rewrite read-only method '\"+n+\"'\")})}})},Bh=(e,t)=>{const n={},r=o=>{o.forEach(s=>{n[s]=!0})};return On(e)?r(e):r(String(e).split(t)),n},Vh=()=>{},Kh=(e,t)=>(e=+e,Number.isFinite(e)?e:t),cs=\"abcdefghijklmnopqrstuvwxyz\",Mi=\"0123456789\",Ya={DIGIT:Mi,ALPHA:cs,ALPHA_DIGIT:cs+cs.toUpperCase()+Mi},Yh=(e=16,t=Ya.ALPHA_DIGIT)=>{let n=\"\";const{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n};function Gh(e){return!!(e&&ze(e.append)&&e[Symbol.toStringTag]===\"FormData\"&&e[Symbol.iterator])}const qh=e=>{const t=new Array(10),n=(r,o)=>{if(Gr(r)){if(t.indexOf(r)>=0)return;if(!(\"toJSON\"in r)){t[o]=r;const s=On(r)?[]:{};return er(r,(i,l)=>{const a=n(i,o+1);!Yn(a)&&(s[l]=a)}),t[o]=void 0,s}}return r};return n(e,0)},Xh=mt(\"AsyncFunction\"),Jh=e=>e&&(Gr(e)||ze(e))&&ze(e.then)&&ze(e.catch),P={isArray:On,isArrayBuffer:ja,isBuffer:bh,isFormData:Ah,isArrayBufferView:Eh,isString:yh,isNumber:Ha,isBoolean:Oh,isObject:Gr,isPlainObject:_r,isUndefined:Yn,isDate:Th,isFile:vh,isBlob:Sh,isRegExp:Hh,isFunction:ze,isStream:Rh,isURLSearchParams:Lh,isTypedArray:Mh,isFileList:Nh,forEach:er,merge:ws,extend:Ph,trim:Ch,stripBOM:Ih,inherits:wh,toFlatObject:kh,kindOf:Kr,kindOfTest:mt,endsWith:xh,toArray:Fh,forEachEntry:Dh,matchAll:Uh,isHTMLForm:$h,hasOwnProperty:Fi,hasOwnProp:Fi,reduceDescriptors:Ka,freezeMethods:Wh,toObjectSet:Bh,toCamelCase:jh,noop:Vh,toFiniteNumber:Kh,findKey:Wa,global:Ba,isContextDefined:Va,ALPHABET:Ya,generateString:Yh,isSpecCompliantForm:Gh,toJSONObject:qh,isAsyncFn:Xh,isThenable:Jh};function oe(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name=\"AxiosError\",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}P.inherits(oe,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:P.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const Ga=oe.prototype,qa={};[\"ERR_BAD_OPTION_VALUE\",\"ERR_BAD_OPTION\",\"ECONNABORTED\",\"ETIMEDOUT\",\"ERR_NETWORK\",\"ERR_FR_TOO_MANY_REDIRECTS\",\"ERR_DEPRECATED\",\"ERR_BAD_RESPONSE\",\"ERR_BAD_REQUEST\",\"ERR_CANCELED\",\"ERR_NOT_SUPPORT\",\"ERR_INVALID_URL\"].forEach(e=>{qa[e]={value:e}});Object.defineProperties(oe,qa);Object.defineProperty(Ga,\"isAxiosError\",{value:!0});oe.from=(e,t,n,r,o,s)=>{const i=Object.create(Ga);return P.toFlatObject(e,i,function(a){return a!==Error.prototype},l=>l!==\"isAxiosError\"),oe.call(i,e.message,t,n,r,o),i.cause=e,i.name=e.name,s&&Object.assign(i,s),i};const zh=null;function ks(e){return P.isPlainObject(e)||P.isArray(e)}function Xa(e){return P.endsWith(e,\"[]\")?e.slice(0,-2):e}function Di(e,t,n){return e?e.concat(t).map(function(o,s){return o=Xa(o),!n&&s?\"[\"+o+\"]\":o}).join(n?\".\":\"\"):t}function Qh(e){return P.isArray(e)&&!e.some(ks)}const Zh=P.toFlatObject(P,{},null,function(t){return/^is[A-Z]/.test(t)});function qr(e,t,n){if(!P.isObject(e))throw new TypeError(\"target must be an object\");t=t||new FormData,n=P.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(S,A){return!P.isUndefined(A[S])});const r=n.metaTokens,o=n.visitor||d,s=n.dots,i=n.indexes,a=(n.Blob||typeof Blob<\"u\"&&Blob)&&P.isSpecCompliantForm(t);if(!P.isFunction(o))throw new TypeError(\"visitor must be a function\");function f(y){if(y===null)return\"\";if(P.isDate(y))return y.toISOString();if(!a&&P.isBlob(y))throw new oe(\"Blob is not supported. Use a Buffer instead.\");return P.isArrayBuffer(y)||P.isTypedArray(y)?a&&typeof Blob==\"function\"?new Blob([y]):Buffer.from(y):y}function d(y,S,A){let g=y;if(y&&!A&&typeof y==\"object\"){if(P.endsWith(S,\"{}\"))S=r?S:S.slice(0,-2),y=JSON.stringify(y);else if(P.isArray(y)&&Qh(y)||(P.isFileList(y)||P.endsWith(S,\"[]\"))&&(g=P.toArray(y)))return S=Xa(S),g.forEach(function(L,T){!(P.isUndefined(L)||L===null)&&t.append(i===!0?Di([S],T,s):i===null?S:S+\"[]\",f(L))}),!1}return ks(y)?!0:(t.append(Di(A,S,s),f(y)),!1)}const h=[],m=Object.assign(Zh,{defaultVisitor:d,convertValue:f,isVisitable:ks});function b(y,S){if(!P.isUndefined(y)){if(h.indexOf(y)!==-1)throw Error(\"Circular reference detected in \"+S.join(\".\"));h.push(y),P.forEach(y,function(g,v){(!(P.isUndefined(g)||g===null)&&o.call(t,g,P.isString(v)?v.trim():v,S,m))===!0&&b(g,S?S.concat(v):[v])}),h.pop()}}if(!P.isObject(e))throw new TypeError(\"data must be an object\");return b(e),t}function Ui(e){const t={\"!\":\"%21\",\"'\":\"%27\",\"(\":\"%28\",\")\":\"%29\",\"~\":\"%7E\",\"%20\":\"+\",\"%00\":\"\\0\"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(r){return t[r]})}function Oo(e,t){this._pairs=[],e&&qr(e,this,t)}const Ja=Oo.prototype;Ja.append=function(t,n){this._pairs.push([t,n])};Ja.toString=function(t){const n=t?function(r){return t.call(this,r,Ui)}:Ui;return this._pairs.map(function(o){return n(o[0])+\"=\"+n(o[1])},\"\").join(\"&\")};function em(e){return encodeURIComponent(e).replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\").replace(/%5B/gi,\"[\").replace(/%5D/gi,\"]\")}function za(e,t,n){if(!t)return e;const r=n&&n.encode||em,o=n&&n.serialize;let s;if(o?s=o(t,n):s=P.isURLSearchParams(t)?t.toString():new Oo(t,n).toString(r),s){const i=e.indexOf(\"#\");i!==-1&&(e=e.slice(0,i)),e+=(e.indexOf(\"?\")===-1?\"?\":\"&\")+s}return e}class tm{constructor(){this.handlers=[]}use(t,n,r){return this.handlers.push({fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){P.forEach(this.handlers,function(r){r!==null&&t(r)})}}const $i=tm,Qa={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},nm=typeof URLSearchParams<\"u\"?URLSearchParams:Oo,rm=typeof FormData<\"u\"?FormData:null,sm=typeof Blob<\"u\"?Blob:null,om={isBrowser:!0,classes:{URLSearchParams:nm,FormData:rm,Blob:sm},protocols:[\"http\",\"https\",\"file\",\"blob\",\"url\",\"data\"]},Za=typeof window<\"u\"&&typeof document<\"u\",im=(e=>Za&&[\"ReactNative\",\"NativeScript\",\"NS\"].indexOf(e)<0)(typeof navigator<\"u\"&&navigator.product),lm=(()=>typeof WorkerGlobalScope<\"u\"&&self instanceof WorkerGlobalScope&&typeof self.importScripts==\"function\")(),am=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Za,hasStandardBrowserEnv:im,hasStandardBrowserWebWorkerEnv:lm},Symbol.toStringTag,{value:\"Module\"})),ft={...am,...om};function cm(e,t){return qr(e,new ft.classes.URLSearchParams,Object.assign({visitor:function(n,r,o,s){return ft.isNode&&P.isBuffer(n)?(this.append(r,n.toString(\"base64\")),!1):s.defaultVisitor.apply(this,arguments)}},t))}function um(e){return P.matchAll(/\\w+|\\[(\\w*)]/g,e).map(t=>t[0]===\"[]\"?\"\":t[1]||t[0])}function fm(e){const t={},n=Object.keys(e);let r;const o=n.length;let s;for(r=0;r<o;r++)s=n[r],t[s]=e[s];return t}function ec(e){function t(n,r,o,s){let i=n[s++];const l=Number.isFinite(+i),a=s>=n.length;return i=!i&&P.isArray(o)?o.length:i,a?(P.hasOwnProp(o,i)?o[i]=[o[i],r]:o[i]=r,!l):((!o[i]||!P.isObject(o[i]))&&(o[i]=[]),t(n,r,o[i],s)&&P.isArray(o[i])&&(o[i]=fm(o[i])),!l)}if(P.isFormData(e)&&P.isFunction(e.entries)){const n={};return P.forEachEntry(e,(r,o)=>{t(um(r),o,n,0)}),n}return null}function dm(e,t,n){if(P.isString(e))try{return(t||JSON.parse)(e),P.trim(e)}catch(r){if(r.name!==\"SyntaxError\")throw r}return(n||JSON.stringify)(e)}const To={transitional:Qa,adapter:[\"xhr\",\"http\"],transformRequest:[function(t,n){const r=n.getContentType()||\"\",o=r.indexOf(\"application/json\")>-1,s=P.isObject(t);if(s&&P.isHTMLForm(t)&&(t=new FormData(t)),P.isFormData(t))return o&&o?JSON.stringify(ec(t)):t;if(P.isArrayBuffer(t)||P.isBuffer(t)||P.isStream(t)||P.isFile(t)||P.isBlob(t))return t;if(P.isArrayBufferView(t))return t.buffer;if(P.isURLSearchParams(t))return n.setContentType(\"application/x-www-form-urlencoded;charset=utf-8\",!1),t.toString();let l;if(s){if(r.indexOf(\"application/x-www-form-urlencoded\")>-1)return cm(t,this.formSerializer).toString();if((l=P.isFileList(t))||r.indexOf(\"multipart/form-data\")>-1){const a=this.env&&this.env.FormData;return qr(l?{\"files[]\":t}:t,a&&new a,this.formSerializer)}}return s||o?(n.setContentType(\"application/json\",!1),dm(t)):t}],transformResponse:[function(t){const n=this.transitional||To.transitional,r=n&&n.forcedJSONParsing,o=this.responseType===\"json\";if(t&&P.isString(t)&&(r&&!this.responseType||o)){const i=!(n&&n.silentJSONParsing)&&o;try{return JSON.parse(t)}catch(l){if(i)throw l.name===\"SyntaxError\"?oe.from(l,oe.ERR_BAD_RESPONSE,this,null,this.response):l}}return t}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ft.classes.FormData,Blob:ft.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:\"application/json, text/plain, */*\",\"Content-Type\":void 0}}};P.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\"],e=>{To.headers[e]={}});const vo=To,hm=P.toObjectSet([\"age\",\"authorization\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"from\",\"host\",\"if-modified-since\",\"if-unmodified-since\",\"last-modified\",\"location\",\"max-forwards\",\"proxy-authorization\",\"referer\",\"retry-after\",\"user-agent\"]),mm=e=>{const t={};let n,r,o;return e&&e.split(`\n`).forEach(function(i){o=i.indexOf(\":\"),n=i.substring(0,o).trim().toLowerCase(),r=i.substring(o+1).trim(),!(!n||t[n]&&hm[n])&&(n===\"set-cookie\"?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+\", \"+r:r)}),t},ji=Symbol(\"internals\");function Rn(e){return e&&String(e).trim().toLowerCase()}function gr(e){return e===!1||e==null?e:P.isArray(e)?e.map(gr):String(e)}function pm(e){const t=Object.create(null),n=/([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}const _m=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function us(e,t,n,r,o){if(P.isFunction(r))return r.call(this,t,n);if(o&&(t=n),!!P.isString(t)){if(P.isString(r))return t.indexOf(r)!==-1;if(P.isRegExp(r))return r.test(t)}}function gm(e){return e.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g,(t,n,r)=>n.toUpperCase()+r)}function bm(e,t){const n=P.toCamelCase(\" \"+t);[\"get\",\"set\",\"has\"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(o,s,i){return this[r].call(this,t,o,s,i)},configurable:!0})})}class Xr{constructor(t){t&&this.set(t)}set(t,n,r){const o=this;function s(l,a,f){const d=Rn(a);if(!d)throw new Error(\"header name must be a non-empty string\");const h=P.findKey(o,d);(!h||o[h]===void 0||f===!0||f===void 0&&o[h]!==!1)&&(o[h||a]=gr(l))}const i=(l,a)=>P.forEach(l,(f,d)=>s(f,d,a));return P.isPlainObject(t)||t instanceof this.constructor?i(t,n):P.isString(t)&&(t=t.trim())&&!_m(t)?i(mm(t),n):t!=null&&s(n,t,r),this}get(t,n){if(t=Rn(t),t){const r=P.findKey(this,t);if(r){const o=this[r];if(!n)return o;if(n===!0)return pm(o);if(P.isFunction(n))return n.call(this,o,r);if(P.isRegExp(n))return n.exec(o);throw new TypeError(\"parser must be boolean|regexp|function\")}}}has(t,n){if(t=Rn(t),t){const r=P.findKey(this,t);return!!(r&&this[r]!==void 0&&(!n||us(this,this[r],r,n)))}return!1}delete(t,n){const r=this;let o=!1;function s(i){if(i=Rn(i),i){const l=P.findKey(r,i);l&&(!n||us(r,r[l],l,n))&&(delete r[l],o=!0)}}return P.isArray(t)?t.forEach(s):s(t),o}clear(t){const n=Object.keys(this);let r=n.length,o=!1;for(;r--;){const s=n[r];(!t||us(this,this[s],s,t,!0))&&(delete this[s],o=!0)}return o}normalize(t){const n=this,r={};return P.forEach(this,(o,s)=>{const i=P.findKey(r,s);if(i){n[i]=gr(o),delete n[s];return}const l=t?gm(s):String(s).trim();l!==s&&delete n[s],n[l]=gr(o),r[l]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return P.forEach(this,(r,o)=>{r!=null&&r!==!1&&(n[o]=t&&P.isArray(r)?r.join(\", \"):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+\": \"+n).join(`\n`)}get[Symbol.toStringTag](){return\"AxiosHeaders\"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const r=new this(t);return n.forEach(o=>r.set(o)),r}static accessor(t){const r=(this[ji]=this[ji]={accessors:{}}).accessors,o=this.prototype;function s(i){const l=Rn(i);r[l]||(bm(o,i),r[l]=!0)}return P.isArray(t)?t.forEach(s):s(t),this}}Xr.accessor([\"Content-Type\",\"Content-Length\",\"Accept\",\"Accept-Encoding\",\"User-Agent\",\"Authorization\"]);P.reduceDescriptors(Xr.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}});P.freezeMethods(Xr);const Ot=Xr;function fs(e,t){const n=this||vo,r=t||n,o=Ot.from(r.headers);let s=r.data;return P.forEach(e,function(l){s=l.call(n,s,o.normalize(),t?t.status:void 0)}),o.normalize(),s}function tc(e){return!!(e&&e.__CANCEL__)}function tr(e,t,n){oe.call(this,e??\"canceled\",oe.ERR_CANCELED,t,n),this.name=\"CanceledError\"}P.inherits(tr,oe,{__CANCEL__:!0});function Em(e,t,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new oe(\"Request failed with status code \"+n.status,[oe.ERR_BAD_REQUEST,oe.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}const ym=ft.hasStandardBrowserEnv?{write(e,t,n,r,o,s){const i=[e+\"=\"+encodeURIComponent(t)];P.isNumber(n)&&i.push(\"expires=\"+new Date(n).toGMTString()),P.isString(r)&&i.push(\"path=\"+r),P.isString(o)&&i.push(\"domain=\"+o),s===!0&&i.push(\"secure\"),document.cookie=i.join(\"; \")},read(e){const t=document.cookie.match(new RegExp(\"(^|;\\\\s*)(\"+e+\")=([^;]*)\"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,\"\",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function Om(e){return/^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(e)}function Tm(e,t){return t?e.replace(/\\/+$/,\"\")+\"/\"+t.replace(/^\\/+/,\"\"):e}function nc(e,t){return e&&!Om(t)?Tm(e,t):t}const vm=ft.hasStandardBrowserEnv?function(){const t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement(\"a\");let r;function o(s){let i=s;return t&&(n.setAttribute(\"href\",i),i=n.href),n.setAttribute(\"href\",i),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,\"\"):\"\",host:n.host,search:n.search?n.search.replace(/^\\?/,\"\"):\"\",hash:n.hash?n.hash.replace(/^#/,\"\"):\"\",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)===\"/\"?n.pathname:\"/\"+n.pathname}}return r=o(window.location.href),function(i){const l=P.isString(i)?o(i):i;return l.protocol===r.protocol&&l.host===r.host}}():function(){return function(){return!0}}();function Sm(e){const t=/^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(e);return t&&t[1]||\"\"}function Nm(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o=0,s=0,i;return t=t!==void 0?t:1e3,function(a){const f=Date.now(),d=r[s];i||(i=f),n[o]=a,r[o]=f;let h=s,m=0;for(;h!==o;)m+=n[h++],h=h%e;if(o=(o+1)%e,o===s&&(s=(s+1)%e),f-i<t)return;const b=d&&f-d;return b?Math.round(m*1e3/b):void 0}}function Hi(e,t){let n=0;const r=Nm(50,250);return o=>{const s=o.loaded,i=o.lengthComputable?o.total:void 0,l=s-n,a=r(l),f=s<=i;n=s;const d={loaded:s,total:i,progress:i?s/i:void 0,bytes:l,rate:a||void 0,estimated:a&&i&&f?(i-s)/a:void 0,event:o};d[t?\"download\":\"upload\"]=!0,e(d)}}const Rm=typeof XMLHttpRequest<\"u\",Am=Rm&&function(e){return new Promise(function(n,r){let o=e.data;const s=Ot.from(e.headers).normalize();let{responseType:i,withXSRFToken:l}=e,a;function f(){e.cancelToken&&e.cancelToken.unsubscribe(a),e.signal&&e.signal.removeEventListener(\"abort\",a)}let d;if(P.isFormData(o)){if(ft.hasStandardBrowserEnv||ft.hasStandardBrowserWebWorkerEnv)s.setContentType(!1);else if((d=s.getContentType())!==!1){const[S,...A]=d?d.split(\";\").map(g=>g.trim()).filter(Boolean):[];s.setContentType([S||\"multipart/form-data\",...A].join(\"; \"))}}let h=new XMLHttpRequest;if(e.auth){const S=e.auth.username||\"\",A=e.auth.password?unescape(encodeURIComponent(e.auth.password)):\"\";s.set(\"Authorization\",\"Basic \"+btoa(S+\":\"+A))}const m=nc(e.baseURL,e.url);h.open(e.method.toUpperCase(),za(m,e.params,e.paramsSerializer),!0),h.timeout=e.timeout;function b(){if(!h)return;const S=Ot.from(\"getAllResponseHeaders\"in h&&h.getAllResponseHeaders()),g={data:!i||i===\"text\"||i===\"json\"?h.responseText:h.response,status:h.status,statusText:h.statusText,headers:S,config:e,request:h};Em(function(L){n(L),f()},function(L){r(L),f()},g),h=null}if(\"onloadend\"in h?h.onloadend=b:h.onreadystatechange=function(){!h||h.readyState!==4||h.status===0&&!(h.responseURL&&h.responseURL.indexOf(\"file:\")===0)||setTimeout(b)},h.onabort=function(){h&&(r(new oe(\"Request aborted\",oe.ECONNABORTED,e,h)),h=null)},h.onerror=function(){r(new oe(\"Network Error\",oe.ERR_NETWORK,e,h)),h=null},h.ontimeout=function(){let A=e.timeout?\"timeout of \"+e.timeout+\"ms exceeded\":\"timeout exceeded\";const g=e.transitional||Qa;e.timeoutErrorMessage&&(A=e.timeoutErrorMessage),r(new oe(A,g.clarifyTimeoutError?oe.ETIMEDOUT:oe.ECONNABORTED,e,h)),h=null},ft.hasStandardBrowserEnv&&(l&&P.isFunction(l)&&(l=l(e)),l||l!==!1&&vm(m))){const S=e.xsrfHeaderName&&e.xsrfCookieName&&ym.read(e.xsrfCookieName);S&&s.set(e.xsrfHeaderName,S)}o===void 0&&s.setContentType(null),\"setRequestHeader\"in h&&P.forEach(s.toJSON(),function(A,g){h.setRequestHeader(g,A)}),P.isUndefined(e.withCredentials)||(h.withCredentials=!!e.withCredentials),i&&i!==\"json\"&&(h.responseType=e.responseType),typeof e.onDownloadProgress==\"function\"&&h.addEventListener(\"progress\",Hi(e.onDownloadProgress,!0)),typeof e.onUploadProgress==\"function\"&&h.upload&&h.upload.addEventListener(\"progress\",Hi(e.onUploadProgress)),(e.cancelToken||e.signal)&&(a=S=>{h&&(r(!S||S.type?new tr(null,e,h):S),h.abort(),h=null)},e.cancelToken&&e.cancelToken.subscribe(a),e.signal&&(e.signal.aborted?a():e.signal.addEventListener(\"abort\",a)));const y=Sm(m);if(y&&ft.protocols.indexOf(y)===-1){r(new oe(\"Unsupported protocol \"+y+\":\",oe.ERR_BAD_REQUEST,e));return}h.send(o||null)})},xs={http:zh,xhr:Am};P.forEach(xs,(e,t)=>{if(e){try{Object.defineProperty(e,\"name\",{value:t})}catch{}Object.defineProperty(e,\"adapterName\",{value:t})}});const Wi=e=>`- ${e}`,Lm=e=>P.isFunction(e)||e===null||e===!1,rc={getAdapter:e=>{e=P.isArray(e)?e:[e];const{length:t}=e;let n,r;const o={};for(let s=0;s<t;s++){n=e[s];let i;if(r=n,!Lm(n)&&(r=xs[(i=String(n)).toLowerCase()],r===void 0))throw new oe(`Unknown adapter '${i}'`);if(r)break;o[i||\"#\"+s]=r}if(!r){const s=Object.entries(o).map(([l,a])=>`adapter ${l} `+(a===!1?\"is not supported by the environment\":\"is not available in the build\"));let i=t?s.length>1?`since :\n`+s.map(Wi).join(`\n`):\" \"+Wi(s[0]):\"as no adapter specified\";throw new oe(\"There is no suitable adapter to dispatch the request \"+i,\"ERR_NOT_SUPPORT\")}return r},adapters:xs};function ds(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new tr(null,e)}function Bi(e){return ds(e),e.headers=Ot.from(e.headers),e.data=fs.call(e,e.transformRequest),[\"post\",\"put\",\"patch\"].indexOf(e.method)!==-1&&e.headers.setContentType(\"application/x-www-form-urlencoded\",!1),rc.getAdapter(e.adapter||vo.adapter)(e).then(function(r){return ds(e),r.data=fs.call(e,e.transformResponse,r),r.headers=Ot.from(r.headers),r},function(r){return tc(r)||(ds(e),r&&r.response&&(r.response.data=fs.call(e,e.transformResponse,r.response),r.response.headers=Ot.from(r.response.headers))),Promise.reject(r)})}const Vi=e=>e instanceof Ot?e.toJSON():e;function mn(e,t){t=t||{};const n={};function r(f,d,h){return P.isPlainObject(f)&&P.isPlainObject(d)?P.merge.call({caseless:h},f,d):P.isPlainObject(d)?P.merge({},d):P.isArray(d)?d.slice():d}function o(f,d,h){if(P.isUndefined(d)){if(!P.isUndefined(f))return r(void 0,f,h)}else return r(f,d,h)}function s(f,d){if(!P.isUndefined(d))return r(void 0,d)}function i(f,d){if(P.isUndefined(d)){if(!P.isUndefined(f))return r(void 0,f)}else return r(void 0,d)}function l(f,d,h){if(h in t)return r(f,d);if(h in e)return r(void 0,f)}const a={url:s,method:s,data:s,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:l,headers:(f,d)=>o(Vi(f),Vi(d),!0)};return P.forEach(Object.keys(Object.assign({},e,t)),function(d){const h=a[d]||o,m=h(e[d],t[d],d);P.isUndefined(m)&&h!==l||(n[d]=m)}),n}const sc=\"1.6.2\",So={};[\"object\",\"boolean\",\"number\",\"function\",\"string\",\"symbol\"].forEach((e,t)=>{So[e]=function(r){return typeof r===e||\"a\"+(t<1?\"n \":\" \")+e}});const Ki={};So.transitional=function(t,n,r){function o(s,i){return\"[Axios v\"+sc+\"] Transitional option '\"+s+\"'\"+i+(r?\". \"+r:\"\")}return(s,i,l)=>{if(t===!1)throw new oe(o(i,\" has been removed\"+(n?\" in \"+n:\"\")),oe.ERR_DEPRECATED);return n&&!Ki[i]&&(Ki[i]=!0,console.warn(o(i,\" has been deprecated since v\"+n+\" and will be removed in the near future\"))),t?t(s,i,l):!0}};function Cm(e,t,n){if(typeof e!=\"object\")throw new oe(\"options must be an object\",oe.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const s=r[o],i=t[s];if(i){const l=e[s],a=l===void 0||i(l,s,e);if(a!==!0)throw new oe(\"option \"+s+\" must be \"+a,oe.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new oe(\"Unknown option \"+s,oe.ERR_BAD_OPTION)}}const Fs={assertOptions:Cm,validators:So},Rt=Fs.validators;let Cr=class{constructor(t){this.defaults=t,this.interceptors={request:new $i,response:new $i}}request(t,n){typeof t==\"string\"?(n=n||{},n.url=t):n=t||{},n=mn(this.defaults,n);const{transitional:r,paramsSerializer:o,headers:s}=n;r!==void 0&&Fs.assertOptions(r,{silentJSONParsing:Rt.transitional(Rt.boolean),forcedJSONParsing:Rt.transitional(Rt.boolean),clarifyTimeoutError:Rt.transitional(Rt.boolean)},!1),o!=null&&(P.isFunction(o)?n.paramsSerializer={serialize:o}:Fs.assertOptions(o,{encode:Rt.function,serialize:Rt.function},!0)),n.method=(n.method||this.defaults.method||\"get\").toLowerCase();let i=s&&P.merge(s.common,s[n.method]);s&&P.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],y=>{delete s[y]}),n.headers=Ot.concat(i,s);const l=[];let a=!0;this.interceptors.request.forEach(function(S){typeof S.runWhen==\"function\"&&S.runWhen(n)===!1||(a=a&&S.synchronous,l.unshift(S.fulfilled,S.rejected))});const f=[];this.interceptors.response.forEach(function(S){f.push(S.fulfilled,S.rejected)});let d,h=0,m;if(!a){const y=[Bi.bind(this),void 0];for(y.unshift.apply(y,l),y.push.apply(y,f),m=y.length,d=Promise.resolve(n);h<m;)d=d.then(y[h++],y[h++]);return d}m=l.length;let b=n;for(h=0;h<m;){const y=l[h++],S=l[h++];try{b=y(b)}catch(A){S.call(this,A);break}}try{d=Bi.call(this,b)}catch(y){return Promise.reject(y)}for(h=0,m=f.length;h<m;)d=d.then(f[h++],f[h++]);return d}getUri(t){t=mn(this.defaults,t);const n=nc(t.baseURL,t.url);return za(n,t.params,t.paramsSerializer)}};P.forEach([\"delete\",\"get\",\"head\",\"options\"],function(t){Cr.prototype[t]=function(n,r){return this.request(mn(r||{},{method:t,url:n,data:(r||{}).data}))}});P.forEach([\"post\",\"put\",\"patch\"],function(t){function n(r){return function(s,i,l){return this.request(mn(l||{},{method:t,headers:r?{\"Content-Type\":\"multipart/form-data\"}:{},url:s,data:i}))}}Cr.prototype[t]=n(),Cr.prototype[t+\"Form\"]=n(!0)});const br=Cr;class No{constructor(t){if(typeof t!=\"function\")throw new TypeError(\"executor must be a function.\");let n;this.promise=new Promise(function(s){n=s});const r=this;this.promise.then(o=>{if(!r._listeners)return;let s=r._listeners.length;for(;s-- >0;)r._listeners[s](o);r._listeners=null}),this.promise.then=o=>{let s;const i=new Promise(l=>{r.subscribe(l),s=l}).then(o);return i.cancel=function(){r.unsubscribe(s)},i},t(function(s,i,l){r.reason||(r.reason=new tr(s,i,l),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}static source(){let t;return{token:new No(function(o){t=o}),cancel:t}}}const Pm=No;function Im(e){return function(n){return e.apply(null,n)}}function wm(e){return P.isObject(e)&&e.isAxiosError===!0}const Ms={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Ms).forEach(([e,t])=>{Ms[t]=e});const km=Ms;function oc(e){const t=new br(e),n=$a(br.prototype.request,t);return P.extend(n,br.prototype,t,{allOwnKeys:!0}),P.extend(n,t,null,{allOwnKeys:!0}),n.create=function(o){return oc(mn(e,o))},n}const Se=oc(vo);Se.Axios=br;Se.CanceledError=tr;Se.CancelToken=Pm;Se.isCancel=tc;Se.VERSION=sc;Se.toFormData=qr;Se.AxiosError=oe;Se.Cancel=Se.CanceledError;Se.all=function(t){return Promise.all(t)};Se.spread=Im;Se.isAxiosError=wm;Se.mergeConfig=mn;Se.AxiosHeaders=Ot;Se.formToJSON=e=>ec(P.isHTMLForm(e)?new FormData(e):e);Se.getAdapter=rc.getAdapter;Se.HttpStatusCode=km;Se.default=Se;const ng=Se;var Er={logger:self.console,WebSocket:self.WebSocket},be={log(...e){this.enabled&&(e.push(Date.now()),Er.logger.log(\"[ActionCable]\",...e))}};const In=()=>new Date().getTime(),ar=e=>(In()-e)/1e3;class Ro{constructor(t){this.visibilityDidChange=this.visibilityDidChange.bind(this),this.connection=t,this.reconnectAttempts=0}start(){this.isRunning()||(this.startedAt=In(),delete this.stoppedAt,this.startPolling(),addEventListener(\"visibilitychange\",this.visibilityDidChange),be.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`))}stop(){this.isRunning()&&(this.stoppedAt=In(),this.stopPolling(),removeEventListener(\"visibilitychange\",this.visibilityDidChange),be.log(\"ConnectionMonitor stopped\"))}isRunning(){return this.startedAt&&!this.stoppedAt}recordPing(){this.pingedAt=In()}recordConnect(){this.reconnectAttempts=0,this.recordPing(),delete this.disconnectedAt,be.log(\"ConnectionMonitor recorded connect\")}recordDisconnect(){this.disconnectedAt=In(),be.log(\"ConnectionMonitor recorded disconnect\")}startPolling(){this.stopPolling(),this.poll()}stopPolling(){clearTimeout(this.pollTimeout)}poll(){this.pollTimeout=setTimeout(()=>{this.reconnectIfStale(),this.poll()},this.getPollInterval())}getPollInterval(){const{staleThreshold:t,reconnectionBackoffRate:n}=this.constructor,r=Math.pow(1+n,Math.min(this.reconnectAttempts,10)),s=(this.reconnectAttempts===0?1:n)*Math.random();return t*1e3*r*(1+s)}reconnectIfStale(){this.connectionIsStale()&&(be.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${ar(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`),this.reconnectAttempts++,this.disconnectedRecently()?be.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${ar(this.disconnectedAt)} s`):(be.log(\"ConnectionMonitor reopening\"),this.connection.reopen()))}get refreshedAt(){return this.pingedAt?this.pingedAt:this.startedAt}connectionIsStale(){return ar(this.refreshedAt)>this.constructor.staleThreshold}disconnectedRecently(){return this.disconnectedAt&&ar(this.disconnectedAt)<this.constructor.staleThreshold}visibilityDidChange(){document.visibilityState===\"visible\"&&setTimeout(()=>{(this.connectionIsStale()||!this.connection.isOpen())&&(be.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`),this.connection.reopen())},200)}}Ro.staleThreshold=6;Ro.reconnectionBackoffRate=.15;var ic={message_types:{welcome:\"welcome\",disconnect:\"disconnect\",ping:\"ping\",confirmation:\"confirm_subscription\",rejection:\"reject_subscription\"},disconnect_reasons:{unauthorized:\"unauthorized\",invalid_request:\"invalid_request\",server_restart:\"server_restart\",remote:\"remote\"},default_mount_path:\"/cable\",protocols:[\"actioncable-v1-json\",\"actioncable-unsupported\"]};const{message_types:An,protocols:Ds}=ic,xm=Ds.slice(0,Ds.length-1),Yi=[].indexOf;class Ao{constructor(t){this.open=this.open.bind(this),this.consumer=t,this.subscriptions=this.consumer.subscriptions,this.monitor=new Ro(this),this.disconnected=!0}send(t){return this.isOpen()?(this.webSocket.send(JSON.stringify(t)),!0):!1}open(){if(this.isActive())return be.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`),!1;{const t=[...Ds,...this.consumer.subprotocols||[]];return be.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${t}`),this.webSocket&&this.uninstallEventHandlers(),this.webSocket=new Er.WebSocket(this.consumer.url,t),this.installEventHandlers(),this.monitor.start(),!0}}close({allowReconnect:t}={allowReconnect:!0}){if(t||this.monitor.stop(),this.isOpen())return this.webSocket.close()}reopen(){if(be.log(`Reopening WebSocket, current state is ${this.getState()}`),this.isActive())try{return this.close()}catch(t){be.log(\"Failed to reopen WebSocket\",t)}finally{be.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`),setTimeout(this.open,this.constructor.reopenDelay)}else return this.open()}getProtocol(){if(this.webSocket)return this.webSocket.protocol}isOpen(){return this.isState(\"open\")}isActive(){return this.isState(\"open\",\"connecting\")}triedToReconnect(){return this.monitor.reconnectAttempts>0}isProtocolSupported(){return Yi.call(xm,this.getProtocol())>=0}isState(...t){return Yi.call(t,this.getState())>=0}getState(){if(this.webSocket){for(let t in Er.WebSocket)if(Er.WebSocket[t]===this.webSocket.readyState)return t.toLowerCase()}return null}installEventHandlers(){for(let t in this.events){const n=this.events[t].bind(this);this.webSocket[`on${t}`]=n}}uninstallEventHandlers(){for(let t in this.events)this.webSocket[`on${t}`]=function(){}}}Ao.reopenDelay=500;Ao.prototype.events={message(e){if(!this.isProtocolSupported())return;const{identifier:t,message:n,reason:r,reconnect:o,type:s}=JSON.parse(e.data);switch(s){case An.welcome:return this.triedToReconnect()&&(this.reconnectAttempted=!0),this.monitor.recordConnect(),this.subscriptions.reload();case An.disconnect:return be.log(`Disconnecting. Reason: ${r}`),this.close({allowReconnect:o});case An.ping:return this.monitor.recordPing();case An.confirmation:return this.subscriptions.confirmSubscription(t),this.reconnectAttempted?(this.reconnectAttempted=!1,this.subscriptions.notify(t,\"connected\",{reconnected:!0})):this.subscriptions.notify(t,\"connected\",{reconnected:!1});case An.rejection:return this.subscriptions.reject(t);default:return this.subscriptions.notify(t,\"received\",n)}},open(){if(be.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`),this.disconnected=!1,!this.isProtocolSupported())return be.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\"),this.close({allowReconnect:!1})},close(e){if(be.log(\"WebSocket onclose event\"),!this.disconnected)return this.disconnected=!0,this.monitor.recordDisconnect(),this.subscriptions.notifyAll(\"disconnected\",{willAttemptReconnect:this.monitor.isRunning()})},error(){be.log(\"WebSocket onerror event\")}};const Fm=function(e,t){if(t!=null)for(let n in t){const r=t[n];e[n]=r}return e};class Mm{constructor(t,n={},r){this.consumer=t,this.identifier=JSON.stringify(n),Fm(this,r)}perform(t,n={}){return n.action=t,this.send(n)}send(t){return this.consumer.send({command:\"message\",identifier:this.identifier,data:JSON.stringify(t)})}unsubscribe(){return this.consumer.subscriptions.remove(this)}}class Dm{constructor(t){this.subscriptions=t,this.pendingSubscriptions=[]}guarantee(t){this.pendingSubscriptions.indexOf(t)==-1?(be.log(`SubscriptionGuarantor guaranteeing ${t.identifier}`),this.pendingSubscriptions.push(t)):be.log(`SubscriptionGuarantor already guaranteeing ${t.identifier}`),this.startGuaranteeing()}forget(t){be.log(`SubscriptionGuarantor forgetting ${t.identifier}`),this.pendingSubscriptions=this.pendingSubscriptions.filter(n=>n!==t)}startGuaranteeing(){this.stopGuaranteeing(),this.retrySubscribing()}stopGuaranteeing(){clearTimeout(this.retryTimeout)}retrySubscribing(){this.retryTimeout=setTimeout(()=>{this.subscriptions&&typeof this.subscriptions.subscribe==\"function\"&&this.pendingSubscriptions.map(t=>{be.log(`SubscriptionGuarantor resubscribing ${t.identifier}`),this.subscriptions.subscribe(t)})},500)}}class Um{constructor(t){this.consumer=t,this.guarantor=new Dm(this),this.subscriptions=[]}create(t,n){const r=t,o=typeof r==\"object\"?r:{channel:r},s=new Mm(this.consumer,o,n);return this.add(s)}add(t){return this.subscriptions.push(t),this.consumer.ensureActiveConnection(),this.notify(t,\"initialized\"),this.subscribe(t),t}remove(t){return this.forget(t),this.findAll(t.identifier).length||this.sendCommand(t,\"unsubscribe\"),t}reject(t){return this.findAll(t).map(n=>(this.forget(n),this.notify(n,\"rejected\"),n))}forget(t){return this.guarantor.forget(t),this.subscriptions=this.subscriptions.filter(n=>n!==t),t}findAll(t){return this.subscriptions.filter(n=>n.identifier===t)}reload(){return this.subscriptions.map(t=>this.subscribe(t))}notifyAll(t,...n){return this.subscriptions.map(r=>this.notify(r,t,...n))}notify(t,n,...r){let o;return typeof t==\"string\"?o=this.findAll(t):o=[t],o.map(s=>typeof s[n]==\"function\"?s[n](...r):void 0)}subscribe(t){this.sendCommand(t,\"subscribe\")&&this.guarantor.guarantee(t)}confirmSubscription(t){be.log(`Subscription confirmed ${t}`),this.findAll(t).map(n=>this.guarantor.forget(n))}sendCommand(t,n){const{identifier:r}=t;return this.consumer.send({command:n,identifier:r})}}class $m{constructor(t){this._url=t,this.subscriptions=new Um(this),this.connection=new Ao(this),this.subprotocols=[]}get url(){return jm(this._url)}send(t){return this.connection.send(t)}connect(){return this.connection.open()}disconnect(){return this.connection.close({allowReconnect:!1})}ensureActiveConnection(){if(!this.connection.isActive())return this.connection.open()}addSubProtocol(t){this.subprotocols=[...this.subprotocols,t]}}function jm(e){if(typeof e==\"function\"&&(e=e()),e&&!/^wss?:/i.test(e)){const t=document.createElement(\"a\");return t.href=e,t.href=t.href,t.protocol=t.protocol.replace(\"http\",\"ws\"),t.href}else return e}function Hm(e=Wm(\"url\")||ic.default_mount_path){return new $m(e)}function Wm(e){const t=document.head.querySelector(`meta[name='action-cable-${e}']`);if(t)return t.getAttribute(\"content\")}function Bm(e){return{all:e=e||new Map,on:function(t,n){var r=e.get(t);r?r.push(n):e.set(t,[n])},off:function(t,n){var r=e.get(t);r&&(n?r.splice(r.indexOf(n)>>>0,1):e.set(t,[]))},emit:function(t,n){var r=e.get(t);r&&r.slice().map(function(o){o(n)}),(r=e.get(\"*\"))&&r.slice().map(function(o){o(t,n)})}}}const Vm=window.location.protocol===\"https:\"?\"wss\":\"ws\",Km=Hm(`${Vm}://${window.location.host}/cable`),lc=Bm();let ac=null;function Jr(){}Jr.prototype.on=function(e,t){return lc.on(e,t)};Jr.prototype.send=function(e){ac.send({message:e})};Jr.prototype.install=function(e){e.plugin=this,e.config.globalProperties.$cable=this};function rg(e){return ac=Km.subscriptions.create({channel:e.channel},{received(t){lc.emit(\"chat\",t)}}),new Jr}function Lo(){}Lo.prototype.call=function(e,t){let n=null;try{t.classList.add(\"loading\"),n=!0}catch{n=!1}return new Promise(r=>{e.then(o=>{if(n===!0){t.classList.remove(\"loading\");let s=null;o===!0&&(s=\"success\"),o===!1&&(s=\"failed\"),t.classList.add(s),setTimeout(function(){t.classList.remove(s)},1e3)}r(o)})})};Lo.prototype.install=function(e){e.plugin=this,e.config.globalProperties.$api=this};function sg(e){return e.handler.defaults.baseURL=`${window.location.protocol}/${window.I18n.prefix}api${e.namespace}/`,e.handler.defaults.headers.common[\"X-CSRF-Token\"]=document.querySelector('meta[name=\"csrf-token\"]').getAttribute(\"content\"),e.handler.interceptors.response.use(t=>t,t=>{switch(t.response.status){case 500:window.location.href=\"/500\";break;case 401:alert(\"not authenticated\");break}return Promise.reject(t)}),new Lo}/*!\n  * shared v9.8.0\n  * (c) 2023 kazuya kawaguchi\n  * Released under the MIT License.\n  */const Us=typeof window<\"u\",Ut=(e,t=!1)=>t?Symbol.for(e):Symbol(e),Ym=(e,t,n)=>Gm({l:e,k:t,s:n}),Gm=e=>JSON.stringify(e).replace(/\\u2028/g,\"\\\\u2028\").replace(/\\u2029/g,\"\\\\u2029\").replace(/\\u0027/g,\"\\\\u0027\"),Re=e=>typeof e==\"number\"&&isFinite(e),qm=e=>uc(e)===\"[object Date]\",Dt=e=>uc(e)===\"[object RegExp]\",zr=e=>J(e)&&Object.keys(e).length===0,we=Object.assign;let Gi;const Et=()=>Gi||(Gi=typeof globalThis<\"u\"?globalThis:typeof self<\"u\"?self:typeof window<\"u\"?window:typeof global<\"u\"?global:{});function qi(e){return e.replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&apos;\")}const Xm=Object.prototype.hasOwnProperty;function Gn(e,t){return Xm.call(e,t)}const ge=Array.isArray,de=e=>typeof e==\"function\",H=e=>typeof e==\"string\",ee=e=>typeof e==\"boolean\",ce=e=>e!==null&&typeof e==\"object\",Jm=e=>ce(e)&&de(e.then)&&de(e.catch),cc=Object.prototype.toString,uc=e=>cc.call(e),J=e=>{if(!ce(e))return!1;const t=Object.getPrototypeOf(e);return t===null||t.constructor===Object},zm=e=>e==null?\"\":ge(e)||J(e)&&e.toString===cc?JSON.stringify(e,null,2):String(e);function Qm(e,t=\"\"){return e.reduce((n,r,o)=>o===0?n+r:n+t+r,\"\")}function Co(e){let t=e;return()=>++t}function Zm(e,t){typeof console<\"u\"&&(console.warn(\"[intlify] \"+e),t&&console.warn(t.stack))}const cr=e=>!ce(e)||ge(e);function Dn(e,t){if(cr(e)||cr(t))throw new Error(\"Invalid value\");for(const n in e)Gn(e,n)&&(cr(e[n])||cr(t[n])?t[n]=e[n]:Dn(e[n],t[n]))}/*!\n  * message-compiler v9.8.0\n  * (c) 2023 kazuya kawaguchi\n  * Released under the MIT License.\n  */function ep(e,t,n){return{line:e,column:t,offset:n}}function $s(e,t,n){const r={start:e,end:t};return n!=null&&(r.source=n),r}const tp=/\\{([0-9a-zA-Z]+)\\}/g;function np(e,...t){return t.length===1&&rp(t[0])&&(t=t[0]),(!t||!t.hasOwnProperty)&&(t={}),e.replace(tp,(n,r)=>t.hasOwnProperty(r)?t[r]:\"\")}const fc=Object.assign,Xi=e=>typeof e==\"string\",rp=e=>e!==null&&typeof e==\"object\";function dc(e,t=\"\"){return e.reduce((n,r,o)=>o===0?n+r:n+t+r,\"\")}const q={EXPECTED_TOKEN:1,INVALID_TOKEN_IN_PLACEHOLDER:2,UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER:3,UNKNOWN_ESCAPE_SEQUENCE:4,INVALID_UNICODE_ESCAPE_SEQUENCE:5,UNBALANCED_CLOSING_BRACE:6,UNTERMINATED_CLOSING_BRACE:7,EMPTY_PLACEHOLDER:8,NOT_ALLOW_NEST_PLACEHOLDER:9,INVALID_LINKED_FORMAT:10,MUST_HAVE_MESSAGES_IN_PLURAL:11,UNEXPECTED_EMPTY_LINKED_MODIFIER:12,UNEXPECTED_EMPTY_LINKED_KEY:13,UNEXPECTED_LEXICAL_ANALYSIS:14,UNHANDLED_CODEGEN_NODE_TYPE:15,UNHANDLED_MINIFIER_NODE_TYPE:16,__EXTEND_POINT__:17},sp={[q.EXPECTED_TOKEN]:\"Expected token: '{0}'\",[q.INVALID_TOKEN_IN_PLACEHOLDER]:\"Invalid token in placeholder: '{0}'\",[q.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER]:\"Unterminated single quote in placeholder\",[q.UNKNOWN_ESCAPE_SEQUENCE]:\"Unknown escape sequence: \\\\{0}\",[q.INVALID_UNICODE_ESCAPE_SEQUENCE]:\"Invalid unicode escape sequence: {0}\",[q.UNBALANCED_CLOSING_BRACE]:\"Unbalanced closing brace\",[q.UNTERMINATED_CLOSING_BRACE]:\"Unterminated closing brace\",[q.EMPTY_PLACEHOLDER]:\"Empty placeholder\",[q.NOT_ALLOW_NEST_PLACEHOLDER]:\"Not allowed nest placeholder\",[q.INVALID_LINKED_FORMAT]:\"Invalid linked format\",[q.MUST_HAVE_MESSAGES_IN_PLURAL]:\"Plural must have messages\",[q.UNEXPECTED_EMPTY_LINKED_MODIFIER]:\"Unexpected empty linked modifier\",[q.UNEXPECTED_EMPTY_LINKED_KEY]:\"Unexpected empty linked key\",[q.UNEXPECTED_LEXICAL_ANALYSIS]:\"Unexpected lexical analysis in token: '{0}'\",[q.UNHANDLED_CODEGEN_NODE_TYPE]:\"unhandled codegen node type: '{0}'\",[q.UNHANDLED_MINIFIER_NODE_TYPE]:\"unhandled mimifier node type: '{0}'\"};function Tn(e,t,n={}){const{domain:r,messages:o,args:s}=n,i=np((o||sp)[e]||\"\",...s||[]),l=new SyntaxError(String(i));return l.code=e,t&&(l.location=t),l.domain=r,l}function op(e){throw e}const gt=\" \",ip=\"\\r\",Ue=`\n`,lp=String.fromCharCode(8232),ap=String.fromCharCode(8233);function cp(e){const t=e;let n=0,r=1,o=1,s=0;const i=I=>t[I]===ip&&t[I+1]===Ue,l=I=>t[I]===Ue,a=I=>t[I]===ap,f=I=>t[I]===lp,d=I=>i(I)||l(I)||a(I)||f(I),h=()=>n,m=()=>r,b=()=>o,y=()=>s,S=I=>i(I)||a(I)||f(I)?Ue:t[I],A=()=>S(n),g=()=>S(n+s);function v(){return s=0,d(n)&&(r++,o=0),i(n)&&n++,n++,o++,t[n]}function L(){return i(n+s)&&s++,s++,t[n+s]}function T(){n=0,r=1,o=1,s=0}function k(I=0){s=I}function M(){const I=n+s;for(;I!==n;)v();s=0}return{index:h,line:m,column:b,peekOffset:y,charAt:S,currentChar:A,currentPeek:g,next:v,peek:L,reset:T,resetPeek:k,skipToPeek:M}}const At=void 0,up=\".\",Ji=\"'\",fp=\"tokenizer\";function dp(e,t={}){const n=t.location!==!1,r=cp(e),o=()=>r.index(),s=()=>ep(r.line(),r.column(),r.index()),i=s(),l=o(),a={currentType:14,offset:l,startLoc:i,endLoc:i,lastType:14,lastOffset:l,lastStartLoc:i,lastEndLoc:i,braceNest:0,inLinked:!1,text:\"\"},f=()=>a,{onError:d}=t;function h(c,u,p,...E){const N=f();if(u.column+=p,u.offset+=p,d){const w=n?$s(N.startLoc,u):null,F=Tn(c,w,{domain:fp,args:E});d(F)}}function m(c,u,p){c.endLoc=s(),c.currentType=u;const E={type:u};return n&&(E.loc=$s(c.startLoc,c.endLoc)),p!=null&&(E.value=p),E}const b=c=>m(c,14);function y(c,u){return c.currentChar()===u?(c.next(),u):(h(q.EXPECTED_TOKEN,s(),0,u),\"\")}function S(c){let u=\"\";for(;c.currentPeek()===gt||c.currentPeek()===Ue;)u+=c.currentPeek(),c.peek();return u}function A(c){const u=S(c);return c.skipToPeek(),u}function g(c){if(c===At)return!1;const u=c.charCodeAt(0);return u>=97&&u<=122||u>=65&&u<=90||u===95}function v(c){if(c===At)return!1;const u=c.charCodeAt(0);return u>=48&&u<=57}function L(c,u){const{currentType:p}=u;if(p!==2)return!1;S(c);const E=g(c.currentPeek());return c.resetPeek(),E}function T(c,u){const{currentType:p}=u;if(p!==2)return!1;S(c);const E=c.currentPeek()===\"-\"?c.peek():c.currentPeek(),N=v(E);return c.resetPeek(),N}function k(c,u){const{currentType:p}=u;if(p!==2)return!1;S(c);const E=c.currentPeek()===Ji;return c.resetPeek(),E}function M(c,u){const{currentType:p}=u;if(p!==8)return!1;S(c);const E=c.currentPeek()===\".\";return c.resetPeek(),E}function I(c,u){const{currentType:p}=u;if(p!==9)return!1;S(c);const E=g(c.currentPeek());return c.resetPeek(),E}function V(c,u){const{currentType:p}=u;if(!(p===8||p===12))return!1;S(c);const E=c.currentPeek()===\":\";return c.resetPeek(),E}function K(c,u){const{currentType:p}=u;if(p!==10)return!1;const E=()=>{const w=c.currentPeek();return w===\"{\"?g(c.peek()):w===\"@\"||w===\"%\"||w===\"|\"||w===\":\"||w===\".\"||w===gt||!w?!1:w===Ue?(c.peek(),E()):g(w)},N=E();return c.resetPeek(),N}function te(c){S(c);const u=c.currentPeek()===\"|\";return c.resetPeek(),u}function fe(c){const u=S(c),p=c.currentPeek()===\"%\"&&c.peek()===\"{\";return c.resetPeek(),{isModulo:p,hasSpace:u.length>0}}function ae(c,u=!0){const p=(N=!1,w=\"\",F=!1)=>{const D=c.currentPeek();return D===\"{\"?w===\"%\"?!1:N:D===\"@\"||!D?w===\"%\"?!0:N:D===\"%\"?(c.peek(),p(N,\"%\",!0)):D===\"|\"?w===\"%\"||F?!0:!(w===gt||w===Ue):D===gt?(c.peek(),p(!0,gt,F)):D===Ue?(c.peek(),p(!0,Ue,F)):!0},E=p();return u&&c.resetPeek(),E}function me(c,u){const p=c.currentChar();return p===At?At:u(p)?(c.next(),p):null}function je(c){return me(c,p=>{const E=p.charCodeAt(0);return E>=97&&E<=122||E>=65&&E<=90||E>=48&&E<=57||E===95||E===36})}function Ce(c){return me(c,p=>{const E=p.charCodeAt(0);return E>=48&&E<=57})}function z(c){return me(c,p=>{const E=p.charCodeAt(0);return E>=48&&E<=57||E>=65&&E<=70||E>=97&&E<=102})}function se(c){let u=\"\",p=\"\";for(;u=Ce(c);)p+=u;return p}function ne(c){A(c);const u=c.currentChar();return u!==\"%\"&&h(q.EXPECTED_TOKEN,s(),0,u),c.next(),\"%\"}function Ee(c){let u=\"\";for(;;){const p=c.currentChar();if(p===\"{\"||p===\"}\"||p===\"@\"||p===\"|\"||!p)break;if(p===\"%\")if(ae(c))u+=p,c.next();else break;else if(p===gt||p===Ue)if(ae(c))u+=p,c.next();else{if(te(c))break;u+=p,c.next()}else u+=p,c.next()}return u}function Me(c){A(c);let u=\"\",p=\"\";for(;u=je(c);)p+=u;return c.currentChar()===At&&h(q.UNTERMINATED_CLOSING_BRACE,s(),0),p}function xe(c){A(c);let u=\"\";return c.currentChar()===\"-\"?(c.next(),u+=`-${se(c)}`):u+=se(c),c.currentChar()===At&&h(q.UNTERMINATED_CLOSING_BRACE,s(),0),u}function ve(c){A(c),y(c,\"'\");let u=\"\",p=\"\";const E=w=>w!==Ji&&w!==Ue;for(;u=me(c,E);)u===\"\\\\\"?p+=Xe(c):p+=u;const N=c.currentChar();return N===Ue||N===At?(h(q.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,s(),0),N===Ue&&(c.next(),y(c,\"'\")),p):(y(c,\"'\"),p)}function Xe(c){const u=c.currentChar();switch(u){case\"\\\\\":case\"'\":return c.next(),`\\\\${u}`;case\"u\":return Ke(c,u,4);case\"U\":return Ke(c,u,6);default:return h(q.UNKNOWN_ESCAPE_SEQUENCE,s(),0,u),\"\"}}function Ke(c,u,p){y(c,u);let E=\"\";for(let N=0;N<p;N++){const w=z(c);if(!w){h(q.INVALID_UNICODE_ESCAPE_SEQUENCE,s(),0,`\\\\${u}${E}${c.currentChar()}`);break}E+=w}return`\\\\${u}${E}`}function pt(c){A(c);let u=\"\",p=\"\";const E=N=>N!==\"{\"&&N!==\"}\"&&N!==gt&&N!==Ue;for(;u=me(c,E);)p+=u;return p}function ye(c){let u=\"\",p=\"\";for(;u=je(c);)p+=u;return p}function C(c){const u=(p=!1,E)=>{const N=c.currentChar();return N===\"{\"||N===\"%\"||N===\"@\"||N===\"|\"||N===\"(\"||N===\")\"||!N||N===gt?E:N===Ue||N===up?(E+=N,c.next(),u(p,E)):(E+=N,c.next(),u(!0,E))};return u(!1,\"\")}function j(c){A(c);const u=y(c,\"|\");return A(c),u}function U(c,u){let p=null;switch(c.currentChar()){case\"{\":return u.braceNest>=1&&h(q.NOT_ALLOW_NEST_PLACEHOLDER,s(),0),c.next(),p=m(u,2,\"{\"),A(c),u.braceNest++,p;case\"}\":return u.braceNest>0&&u.currentType===2&&h(q.EMPTY_PLACEHOLDER,s(),0),c.next(),p=m(u,3,\"}\"),u.braceNest--,u.braceNest>0&&A(c),u.inLinked&&u.braceNest===0&&(u.inLinked=!1),p;case\"@\":return u.braceNest>0&&h(q.UNTERMINATED_CLOSING_BRACE,s(),0),p=W(c,u)||b(u),u.braceNest=0,p;default:let N=!0,w=!0,F=!0;if(te(c))return u.braceNest>0&&h(q.UNTERMINATED_CLOSING_BRACE,s(),0),p=m(u,1,j(c)),u.braceNest=0,u.inLinked=!1,p;if(u.braceNest>0&&(u.currentType===5||u.currentType===6||u.currentType===7))return h(q.UNTERMINATED_CLOSING_BRACE,s(),0),u.braceNest=0,Z(c,u);if(N=L(c,u))return p=m(u,5,Me(c)),A(c),p;if(w=T(c,u))return p=m(u,6,xe(c)),A(c),p;if(F=k(c,u))return p=m(u,7,ve(c)),A(c),p;if(!N&&!w&&!F)return p=m(u,13,pt(c)),h(q.INVALID_TOKEN_IN_PLACEHOLDER,s(),0,p.value),A(c),p;break}return p}function W(c,u){const{currentType:p}=u;let E=null;const N=c.currentChar();switch((p===8||p===9||p===12||p===10)&&(N===Ue||N===gt)&&h(q.INVALID_LINKED_FORMAT,s(),0),N){case\"@\":return c.next(),E=m(u,8,\"@\"),u.inLinked=!0,E;case\".\":return A(c),c.next(),m(u,9,\".\");case\":\":return A(c),c.next(),m(u,10,\":\");default:return te(c)?(E=m(u,1,j(c)),u.braceNest=0,u.inLinked=!1,E):M(c,u)||V(c,u)?(A(c),W(c,u)):I(c,u)?(A(c),m(u,12,ye(c))):K(c,u)?(A(c),N===\"{\"?U(c,u)||E:m(u,11,C(c))):(p===8&&h(q.INVALID_LINKED_FORMAT,s(),0),u.braceNest=0,u.inLinked=!1,Z(c,u))}}function Z(c,u){let p={type:14};if(u.braceNest>0)return U(c,u)||b(u);if(u.inLinked)return W(c,u)||b(u);switch(c.currentChar()){case\"{\":return U(c,u)||b(u);case\"}\":return h(q.UNBALANCED_CLOSING_BRACE,s(),0),c.next(),m(u,3,\"}\");case\"@\":return W(c,u)||b(u);default:if(te(c))return p=m(u,1,j(c)),u.braceNest=0,u.inLinked=!1,p;const{isModulo:N,hasSpace:w}=fe(c);if(N)return w?m(u,0,Ee(c)):m(u,4,ne(c));if(ae(c))return m(u,0,Ee(c));break}return p}function _(){const{currentType:c,offset:u,startLoc:p,endLoc:E}=a;return a.lastType=c,a.lastOffset=u,a.lastStartLoc=p,a.lastEndLoc=E,a.offset=o(),a.startLoc=s(),r.currentChar()===At?m(a,14):Z(r,a)}return{nextToken:_,currentOffset:o,currentPosition:s,context:f}}const hp=\"parser\",mp=/(?:\\\\\\\\|\\\\'|\\\\u([0-9a-fA-F]{4})|\\\\U([0-9a-fA-F]{6}))/g;function pp(e,t,n){switch(e){case\"\\\\\\\\\":return\"\\\\\";case\"\\\\'\":return\"'\";default:{const r=parseInt(t||n,16);return r<=55295||r>=57344?String.fromCodePoint(r):\"�\"}}}function _p(e={}){const t=e.location!==!1,{onError:n}=e;function r(g,v,L,T,...k){const M=g.currentPosition();if(M.offset+=T,M.column+=T,n){const I=t?$s(L,M):null,V=Tn(v,I,{domain:hp,args:k});n(V)}}function o(g,v,L){const T={type:g};return t&&(T.start=v,T.end=v,T.loc={start:L,end:L}),T}function s(g,v,L,T){T&&(g.type=T),t&&(g.end=v,g.loc&&(g.loc.end=L))}function i(g,v){const L=g.context(),T=o(3,L.offset,L.startLoc);return T.value=v,s(T,g.currentOffset(),g.currentPosition()),T}function l(g,v){const L=g.context(),{lastOffset:T,lastStartLoc:k}=L,M=o(5,T,k);return M.index=parseInt(v,10),g.nextToken(),s(M,g.currentOffset(),g.currentPosition()),M}function a(g,v){const L=g.context(),{lastOffset:T,lastStartLoc:k}=L,M=o(4,T,k);return M.key=v,g.nextToken(),s(M,g.currentOffset(),g.currentPosition()),M}function f(g,v){const L=g.context(),{lastOffset:T,lastStartLoc:k}=L,M=o(9,T,k);return M.value=v.replace(mp,pp),g.nextToken(),s(M,g.currentOffset(),g.currentPosition()),M}function d(g){const v=g.nextToken(),L=g.context(),{lastOffset:T,lastStartLoc:k}=L,M=o(8,T,k);return v.type!==12?(r(g,q.UNEXPECTED_EMPTY_LINKED_MODIFIER,L.lastStartLoc,0),M.value=\"\",s(M,T,k),{nextConsumeToken:v,node:M}):(v.value==null&&r(g,q.UNEXPECTED_LEXICAL_ANALYSIS,L.lastStartLoc,0,at(v)),M.value=v.value||\"\",s(M,g.currentOffset(),g.currentPosition()),{node:M})}function h(g,v){const L=g.context(),T=o(7,L.offset,L.startLoc);return T.value=v,s(T,g.currentOffset(),g.currentPosition()),T}function m(g){const v=g.context(),L=o(6,v.offset,v.startLoc);let T=g.nextToken();if(T.type===9){const k=d(g);L.modifier=k.node,T=k.nextConsumeToken||g.nextToken()}switch(T.type!==10&&r(g,q.UNEXPECTED_LEXICAL_ANALYSIS,v.lastStartLoc,0,at(T)),T=g.nextToken(),T.type===2&&(T=g.nextToken()),T.type){case 11:T.value==null&&r(g,q.UNEXPECTED_LEXICAL_ANALYSIS,v.lastStartLoc,0,at(T)),L.key=h(g,T.value||\"\");break;case 5:T.value==null&&r(g,q.UNEXPECTED_LEXICAL_ANALYSIS,v.lastStartLoc,0,at(T)),L.key=a(g,T.value||\"\");break;case 6:T.value==null&&r(g,q.UNEXPECTED_LEXICAL_ANALYSIS,v.lastStartLoc,0,at(T)),L.key=l(g,T.value||\"\");break;case 7:T.value==null&&r(g,q.UNEXPECTED_LEXICAL_ANALYSIS,v.lastStartLoc,0,at(T)),L.key=f(g,T.value||\"\");break;default:r(g,q.UNEXPECTED_EMPTY_LINKED_KEY,v.lastStartLoc,0);const k=g.context(),M=o(7,k.offset,k.startLoc);return M.value=\"\",s(M,k.offset,k.startLoc),L.key=M,s(L,k.offset,k.startLoc),{nextConsumeToken:T,node:L}}return s(L,g.currentOffset(),g.currentPosition()),{node:L}}function b(g){const v=g.context(),L=v.currentType===1?g.currentOffset():v.offset,T=v.currentType===1?v.endLoc:v.startLoc,k=o(2,L,T);k.items=[];let M=null;do{const K=M||g.nextToken();switch(M=null,K.type){case 0:K.value==null&&r(g,q.UNEXPECTED_LEXICAL_ANALYSIS,v.lastStartLoc,0,at(K)),k.items.push(i(g,K.value||\"\"));break;case 6:K.value==null&&r(g,q.UNEXPECTED_LEXICAL_ANALYSIS,v.lastStartLoc,0,at(K)),k.items.push(l(g,K.value||\"\"));break;case 5:K.value==null&&r(g,q.UNEXPECTED_LEXICAL_ANALYSIS,v.lastStartLoc,0,at(K)),k.items.push(a(g,K.value||\"\"));break;case 7:K.value==null&&r(g,q.UNEXPECTED_LEXICAL_ANALYSIS,v.lastStartLoc,0,at(K)),k.items.push(f(g,K.value||\"\"));break;case 8:const te=m(g);k.items.push(te.node),M=te.nextConsumeToken||null;break}}while(v.currentType!==14&&v.currentType!==1);const I=v.currentType===1?v.lastOffset:g.currentOffset(),V=v.currentType===1?v.lastEndLoc:g.currentPosition();return s(k,I,V),k}function y(g,v,L,T){const k=g.context();let M=T.items.length===0;const I=o(1,v,L);I.cases=[],I.cases.push(T);do{const V=b(g);M||(M=V.items.length===0),I.cases.push(V)}while(k.currentType!==14);return M&&r(g,q.MUST_HAVE_MESSAGES_IN_PLURAL,L,0),s(I,g.currentOffset(),g.currentPosition()),I}function S(g){const v=g.context(),{offset:L,startLoc:T}=v,k=b(g);return v.currentType===14?k:y(g,L,T,k)}function A(g){const v=dp(g,fc({},e)),L=v.context(),T=o(0,L.offset,L.startLoc);return t&&T.loc&&(T.loc.source=g),T.body=S(v),e.onCacheKey&&(T.cacheKey=e.onCacheKey(g)),L.currentType!==14&&r(v,q.UNEXPECTED_LEXICAL_ANALYSIS,L.lastStartLoc,0,g[L.offset]||\"\"),s(T,v.currentOffset(),v.currentPosition()),T}return{parse:A}}function at(e){if(e.type===14)return\"EOF\";const t=(e.value||\"\").replace(/\\r?\\n/gu,\"\\\\n\");return t.length>10?t.slice(0,9)+\"…\":t}function gp(e,t={}){const n={ast:e,helpers:new Set};return{context:()=>n,helper:s=>(n.helpers.add(s),s)}}function zi(e,t){for(let n=0;n<e.length;n++)Po(e[n],t)}function Po(e,t){switch(e.type){case 1:zi(e.cases,t),t.helper(\"plural\");break;case 2:zi(e.items,t);break;case 6:Po(e.key,t),t.helper(\"linked\"),t.helper(\"type\");break;case 5:t.helper(\"interpolate\"),t.helper(\"list\");break;case 4:t.helper(\"interpolate\"),t.helper(\"named\");break}}function bp(e,t={}){const n=gp(e);n.helper(\"normalize\"),e.body&&Po(e.body,n);const r=n.context();e.helpers=Array.from(r.helpers)}function Ep(e){const t=e.body;return t.type===2?Qi(t):t.cases.forEach(n=>Qi(n)),e}function Qi(e){if(e.items.length===1){const t=e.items[0];(t.type===3||t.type===9)&&(e.static=t.value,delete t.value)}else{const t=[];for(let n=0;n<e.items.length;n++){const r=e.items[n];if(!(r.type===3||r.type===9)||r.value==null)break;t.push(r.value)}if(t.length===e.items.length){e.static=dc(t);for(let n=0;n<e.items.length;n++){const r=e.items[n];(r.type===3||r.type===9)&&delete r.value}}}}const yp=\"minifier\";function en(e){switch(e.t=e.type,e.type){case 0:const t=e;en(t.body),t.b=t.body,delete t.body;break;case 1:const n=e,r=n.cases;for(let d=0;d<r.length;d++)en(r[d]);n.c=r,delete n.cases;break;case 2:const o=e,s=o.items;for(let d=0;d<s.length;d++)en(s[d]);o.i=s,delete o.items,o.static&&(o.s=o.static,delete o.static);break;case 3:case 9:case 8:case 7:const i=e;i.value&&(i.v=i.value,delete i.value);break;case 6:const l=e;en(l.key),l.k=l.key,delete l.key,l.modifier&&(en(l.modifier),l.m=l.modifier,delete l.modifier);break;case 5:const a=e;a.i=a.index,delete a.index;break;case 4:const f=e;f.k=f.key,delete f.key;break;default:throw Tn(q.UNHANDLED_MINIFIER_NODE_TYPE,null,{domain:yp,args:[e.type]})}delete e.type}const Op=\"parser\";function Tp(e,t){const{sourceMap:n,filename:r,breakLineCode:o,needIndent:s}=t,i=t.location!==!1,l={filename:r,code:\"\",column:1,line:1,offset:0,map:void 0,breakLineCode:o,needIndent:s,indentLevel:0};i&&e.loc&&(l.source=e.loc.source);const a=()=>l;function f(A,g){l.code+=A}function d(A,g=!0){const v=g?o:\"\";f(s?v+\"  \".repeat(A):v)}function h(A=!0){const g=++l.indentLevel;A&&d(g)}function m(A=!0){const g=--l.indentLevel;A&&d(g)}function b(){d(l.indentLevel)}return{context:a,push:f,indent:h,deindent:m,newline:b,helper:A=>`_${A}`,needIndent:()=>l.needIndent}}function vp(e,t){const{helper:n}=e;e.push(`${n(\"linked\")}(`),pn(e,t.key),t.modifier?(e.push(\", \"),pn(e,t.modifier),e.push(\", _type\")):e.push(\", undefined, _type\"),e.push(\")\")}function Sp(e,t){const{helper:n,needIndent:r}=e;e.push(`${n(\"normalize\")}([`),e.indent(r());const o=t.items.length;for(let s=0;s<o&&(pn(e,t.items[s]),s!==o-1);s++)e.push(\", \");e.deindent(r()),e.push(\"])\")}function Np(e,t){const{helper:n,needIndent:r}=e;if(t.cases.length>1){e.push(`${n(\"plural\")}([`),e.indent(r());const o=t.cases.length;for(let s=0;s<o&&(pn(e,t.cases[s]),s!==o-1);s++)e.push(\", \");e.deindent(r()),e.push(\"])\")}}function Rp(e,t){t.body?pn(e,t.body):e.push(\"null\")}function pn(e,t){const{helper:n}=e;switch(t.type){case 0:Rp(e,t);break;case 1:Np(e,t);break;case 2:Sp(e,t);break;case 6:vp(e,t);break;case 8:e.push(JSON.stringify(t.value),t);break;case 7:e.push(JSON.stringify(t.value),t);break;case 5:e.push(`${n(\"interpolate\")}(${n(\"list\")}(${t.index}))`,t);break;case 4:e.push(`${n(\"interpolate\")}(${n(\"named\")}(${JSON.stringify(t.key)}))`,t);break;case 9:e.push(JSON.stringify(t.value),t);break;case 3:e.push(JSON.stringify(t.value),t);break;default:throw Tn(q.UNHANDLED_CODEGEN_NODE_TYPE,null,{domain:Op,args:[t.type]})}}const Ap=(e,t={})=>{const n=Xi(t.mode)?t.mode:\"normal\",r=Xi(t.filename)?t.filename:\"message.intl\",o=!!t.sourceMap,s=t.breakLineCode!=null?t.breakLineCode:n===\"arrow\"?\";\":`\n`,i=t.needIndent?t.needIndent:n!==\"arrow\",l=e.helpers||[],a=Tp(e,{mode:n,filename:r,sourceMap:o,breakLineCode:s,needIndent:i});a.push(n===\"normal\"?\"function __msg__ (ctx) {\":\"(ctx) => {\"),a.indent(i),l.length>0&&(a.push(`const { ${dc(l.map(h=>`${h}: _${h}`),\", \")} } = ctx`),a.newline()),a.push(\"return \"),pn(a,e),a.deindent(i),a.push(\"}\"),delete e.helpers;const{code:f,map:d}=a.context();return{ast:e,code:f,map:d?d.toJSON():void 0}};function Lp(e,t={}){const n=fc({},t),r=!!n.jit,o=!!n.minify,s=n.optimize==null?!0:n.optimize,l=_p(n).parse(e);return r?(s&&Ep(l),o&&en(l),{ast:l,code:\"\"}):(bp(l,n),Ap(l,n))}/*!\n  * core-base v9.8.0\n  * (c) 2023 kazuya kawaguchi\n  * Released under the MIT License.\n  */function Cp(){typeof __INTLIFY_PROD_DEVTOOLS__!=\"boolean\"&&(Et().__INTLIFY_PROD_DEVTOOLS__=!1),typeof __INTLIFY_JIT_COMPILATION__!=\"boolean\"&&(Et().__INTLIFY_JIT_COMPILATION__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!=\"boolean\"&&(Et().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}const $t=[];$t[0]={w:[0],i:[3,0],\"[\":[4],o:[7]};$t[1]={w:[1],\".\":[2],\"[\":[4],o:[7]};$t[2]={w:[2],i:[3,0],0:[3,0]};$t[3]={i:[3,0],0:[3,0],w:[1,1],\".\":[2,1],\"[\":[4,1],o:[7,1]};$t[4]={\"'\":[5,0],'\"':[6,0],\"[\":[4,2],\"]\":[1,3],o:8,l:[4,0]};$t[5]={\"'\":[4,0],o:8,l:[5,0]};$t[6]={'\"':[4,0],o:8,l:[6,0]};const Pp=/^\\s?(?:true|false|-?[\\d.]+|'[^']*'|\"[^\"]*\")\\s?$/;function Ip(e){return Pp.test(e)}function wp(e){const t=e.charCodeAt(0),n=e.charCodeAt(e.length-1);return t===n&&(t===34||t===39)?e.slice(1,-1):e}function kp(e){if(e==null)return\"o\";switch(e.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return e;case 95:case 36:case 45:return\"i\";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return\"w\"}return\"i\"}function xp(e){const t=e.trim();return e.charAt(0)===\"0\"&&isNaN(parseInt(e))?!1:Ip(t)?wp(t):\"*\"+t}function Fp(e){const t=[];let n=-1,r=0,o=0,s,i,l,a,f,d,h;const m=[];m[0]=()=>{i===void 0?i=l:i+=l},m[1]=()=>{i!==void 0&&(t.push(i),i=void 0)},m[2]=()=>{m[0](),o++},m[3]=()=>{if(o>0)o--,r=4,m[0]();else{if(o=0,i===void 0||(i=xp(i),i===!1))return!1;m[1]()}};function b(){const y=e[n+1];if(r===5&&y===\"'\"||r===6&&y==='\"')return n++,l=\"\\\\\"+y,m[0](),!0}for(;r!==null;)if(n++,s=e[n],!(s===\"\\\\\"&&b())){if(a=kp(s),h=$t[r],f=h[a]||h.l||8,f===8||(r=f[0],f[1]!==void 0&&(d=m[f[1]],d&&(l=s,d()===!1))))return;if(r===7)return t}}const Zi=new Map;function Mp(e,t){return ce(e)?e[t]:null}function Dp(e,t){if(!ce(e))return null;let n=Zi.get(t);if(n||(n=Fp(t),n&&Zi.set(t,n)),!n)return null;const r=n.length;let o=e,s=0;for(;s<r;){const i=o[n[s]];if(i===void 0||de(o))return null;o=i,s++}return o}const Up=e=>e,$p=e=>\"\",jp=\"text\",Hp=e=>e.length===0?\"\":Qm(e),Wp=zm;function el(e,t){return e=Math.abs(e),t===2?e?e>1?1:0:1:e?Math.min(e,2):0}function Bp(e){const t=Re(e.pluralIndex)?e.pluralIndex:-1;return e.named&&(Re(e.named.count)||Re(e.named.n))?Re(e.named.count)?e.named.count:Re(e.named.n)?e.named.n:t:t}function Vp(e,t){t.count||(t.count=e),t.n||(t.n=e)}function Kp(e={}){const t=e.locale,n=Bp(e),r=ce(e.pluralRules)&&H(t)&&de(e.pluralRules[t])?e.pluralRules[t]:el,o=ce(e.pluralRules)&&H(t)&&de(e.pluralRules[t])?el:void 0,s=g=>g[r(n,g.length,o)],i=e.list||[],l=g=>i[g],a=e.named||{};Re(e.pluralIndex)&&Vp(n,a);const f=g=>a[g];function d(g){const v=de(e.messages)?e.messages(g):ce(e.messages)?e.messages[g]:!1;return v||(e.parent?e.parent.message(g):$p)}const h=g=>e.modifiers?e.modifiers[g]:Up,m=J(e.processor)&&de(e.processor.normalize)?e.processor.normalize:Hp,b=J(e.processor)&&de(e.processor.interpolate)?e.processor.interpolate:Wp,y=J(e.processor)&&H(e.processor.type)?e.processor.type:jp,A={list:l,named:f,plural:s,linked:(g,...v)=>{const[L,T]=v;let k=\"text\",M=\"\";v.length===1?ce(L)?(M=L.modifier||M,k=L.type||k):H(L)&&(M=L||M):v.length===2&&(H(L)&&(M=L||M),H(T)&&(k=T||k));const I=d(g)(A),V=k===\"vnode\"&&ge(I)&&M?I[0]:I;return M?h(M)(V,k):V},message:d,type:y,interpolate:b,normalize:m,values:we({},i,a)};return A}let qn=null;function Yp(e){qn=e}function Gp(e,t,n){qn&&qn.emit(\"i18n:init\",{timestamp:Date.now(),i18n:e,version:t,meta:n})}const qp=Xp(\"function:translate\");function Xp(e){return t=>qn&&qn.emit(e,t)}const Jp={NOT_FOUND_KEY:1,FALLBACK_TO_TRANSLATE:2,CANNOT_FORMAT_NUMBER:3,FALLBACK_TO_NUMBER_FORMAT:4,CANNOT_FORMAT_DATE:5,FALLBACK_TO_DATE_FORMAT:6,EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER:7,__EXTEND_POINT__:8},hc=q.__EXTEND_POINT__,Wt=Co(hc),tt={INVALID_ARGUMENT:hc,INVALID_DATE_ARGUMENT:Wt(),INVALID_ISO_DATE_ARGUMENT:Wt(),NOT_SUPPORT_NON_STRING_MESSAGE:Wt(),NOT_SUPPORT_LOCALE_PROMISE_VALUE:Wt(),NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:Wt(),NOT_SUPPORT_LOCALE_TYPE:Wt(),__EXTEND_POINT__:Wt()};function dt(e){return Tn(e,null,void 0)}function Io(e,t){return t.locale!=null?tl(t.locale):tl(e.locale)}let hs;function tl(e){if(H(e))return e;if(de(e)){if(e.resolvedOnce&&hs!=null)return hs;if(e.constructor.name===\"Function\"){const t=e();if(Jm(t))throw dt(tt.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return hs=t}else throw dt(tt.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}else throw dt(tt.NOT_SUPPORT_LOCALE_TYPE)}function zp(e,t,n){return[...new Set([n,...ge(t)?t:ce(t)?Object.keys(t):H(t)?[t]:[n]])]}function mc(e,t,n){const r=H(n)?n:_n,o=e;o.__localeChainCache||(o.__localeChainCache=new Map);let s=o.__localeChainCache.get(r);if(!s){s=[];let i=[n];for(;ge(i);)i=nl(s,i,t);const l=ge(t)||!J(t)?t:t.default?t.default:null;i=H(l)?[l]:l,ge(i)&&nl(s,i,!1),o.__localeChainCache.set(r,s)}return s}function nl(e,t,n){let r=!0;for(let o=0;o<t.length&&ee(r);o++){const s=t[o];H(s)&&(r=Qp(e,t[o],n))}return r}function Qp(e,t,n){let r;const o=t.split(\"-\");do{const s=o.join(\"-\");r=Zp(e,s,n),o.splice(-1,1)}while(o.length&&r===!0);return r}function Zp(e,t,n){let r=!1;if(!e.includes(t)&&(r=!0,t)){r=t[t.length-1]!==\"!\";const o=t.replace(/!/g,\"\");e.push(o),(ge(n)||J(n))&&n[o]&&(r=n[o])}return r}const e_=\"9.8.0\",Qr=-1,_n=\"en-US\",rl=\"\",sl=e=>`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;function t_(){return{upper:(e,t)=>t===\"text\"&&H(e)?e.toUpperCase():t===\"vnode\"&&ce(e)&&\"__v_isVNode\"in e?e.children.toUpperCase():e,lower:(e,t)=>t===\"text\"&&H(e)?e.toLowerCase():t===\"vnode\"&&ce(e)&&\"__v_isVNode\"in e?e.children.toLowerCase():e,capitalize:(e,t)=>t===\"text\"&&H(e)?sl(e):t===\"vnode\"&&ce(e)&&\"__v_isVNode\"in e?sl(e.children):e}}let pc;function ol(e){pc=e}let _c;function n_(e){_c=e}let gc;function r_(e){gc=e}let bc=null;const s_=e=>{bc=e},o_=()=>bc;let Ec=null;const il=e=>{Ec=e},i_=()=>Ec;let ll=0;function l_(e={}){const t=de(e.onWarn)?e.onWarn:Zm,n=H(e.version)?e.version:e_,r=H(e.locale)||de(e.locale)?e.locale:_n,o=de(r)?_n:r,s=ge(e.fallbackLocale)||J(e.fallbackLocale)||H(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:o,i=J(e.messages)?e.messages:{[o]:{}},l=J(e.datetimeFormats)?e.datetimeFormats:{[o]:{}},a=J(e.numberFormats)?e.numberFormats:{[o]:{}},f=we({},e.modifiers||{},t_()),d=e.pluralRules||{},h=de(e.missing)?e.missing:null,m=ee(e.missingWarn)||Dt(e.missingWarn)?e.missingWarn:!0,b=ee(e.fallbackWarn)||Dt(e.fallbackWarn)?e.fallbackWarn:!0,y=!!e.fallbackFormat,S=!!e.unresolving,A=de(e.postTranslation)?e.postTranslation:null,g=J(e.processor)?e.processor:null,v=ee(e.warnHtmlMessage)?e.warnHtmlMessage:!0,L=!!e.escapeParameter,T=de(e.messageCompiler)?e.messageCompiler:pc,k=de(e.messageResolver)?e.messageResolver:_c||Mp,M=de(e.localeFallbacker)?e.localeFallbacker:gc||zp,I=ce(e.fallbackContext)?e.fallbackContext:void 0,V=e,K=ce(V.__datetimeFormatters)?V.__datetimeFormatters:new Map,te=ce(V.__numberFormatters)?V.__numberFormatters:new Map,fe=ce(V.__meta)?V.__meta:{};ll++;const ae={version:n,cid:ll,locale:r,fallbackLocale:s,messages:i,modifiers:f,pluralRules:d,missing:h,missingWarn:m,fallbackWarn:b,fallbackFormat:y,unresolving:S,postTranslation:A,processor:g,warnHtmlMessage:v,escapeParameter:L,messageCompiler:T,messageResolver:k,localeFallbacker:M,fallbackContext:I,onWarn:t,__meta:fe};return ae.datetimeFormats=l,ae.numberFormats=a,ae.__datetimeFormatters=K,ae.__numberFormatters=te,__INTLIFY_PROD_DEVTOOLS__&&Gp(ae,n,fe),ae}function wo(e,t,n,r,o){const{missing:s,onWarn:i}=e;if(s!==null){const l=s(e,n,t,o);return H(l)?l:t}else return t}function Ln(e,t,n){const r=e;r.__localeChainCache=new Map,e.localeFallbacker(e,n,t)}function ms(e){return n=>a_(n,e)}function a_(e,t){const n=t.b||t.body;if((n.t||n.type)===1){const r=n,o=r.c||r.cases;return e.plural(o.reduce((s,i)=>[...s,al(e,i)],[]))}else return al(e,n)}function al(e,t){const n=t.s||t.static;if(n)return e.type===\"text\"?n:e.normalize([n]);{const r=(t.i||t.items).reduce((o,s)=>[...o,js(e,s)],[]);return e.normalize(r)}}function js(e,t){const n=t.t||t.type;switch(n){case 3:const r=t;return r.v||r.value;case 9:const o=t;return o.v||o.value;case 4:const s=t;return e.interpolate(e.named(s.k||s.key));case 5:const i=t;return e.interpolate(e.list(i.i!=null?i.i:i.index));case 6:const l=t,a=l.m||l.modifier;return e.linked(js(e,l.k||l.key),a?js(e,a):void 0,e.type);case 7:const f=t;return f.v||f.value;case 8:const d=t;return d.v||d.value;default:throw new Error(`unhandled node type on format message part: ${n}`)}}const yc=e=>e;let tn=Object.create(null);const gn=e=>ce(e)&&(e.t===0||e.type===0)&&(\"b\"in e||\"body\"in e);function Oc(e,t={}){let n=!1;const r=t.onError||op;return t.onError=o=>{n=!0,r(o)},{...Lp(e,t),detectError:n}}const c_=(e,t)=>{if(!H(e))throw dt(tt.NOT_SUPPORT_NON_STRING_MESSAGE);{ee(t.warnHtmlMessage)&&t.warnHtmlMessage;const r=(t.onCacheKey||yc)(e),o=tn[r];if(o)return o;const{code:s,detectError:i}=Oc(e,t),l=new Function(`return ${s}`)();return i?l:tn[r]=l}};function u_(e,t){if(__INTLIFY_JIT_COMPILATION__&&!__INTLIFY_DROP_MESSAGE_COMPILER__&&H(e)){ee(t.warnHtmlMessage)&&t.warnHtmlMessage;const r=(t.onCacheKey||yc)(e),o=tn[r];if(o)return o;const{ast:s,detectError:i}=Oc(e,{...t,location:!1,jit:!0}),l=ms(s);return i?l:tn[r]=l}else{const n=e.cacheKey;if(n){const r=tn[n];return r||(tn[n]=ms(e))}else return ms(e)}}const cl=()=>\"\",Je=e=>de(e);function ul(e,...t){const{fallbackFormat:n,postTranslation:r,unresolving:o,messageCompiler:s,fallbackLocale:i,messages:l}=e,[a,f]=Hs(...t),d=ee(f.missingWarn)?f.missingWarn:e.missingWarn,h=ee(f.fallbackWarn)?f.fallbackWarn:e.fallbackWarn,m=ee(f.escapeParameter)?f.escapeParameter:e.escapeParameter,b=!!f.resolvedMessage,y=H(f.default)||ee(f.default)?ee(f.default)?s?a:()=>a:f.default:n?s?a:()=>a:\"\",S=n||y!==\"\",A=Io(e,f);m&&f_(f);let[g,v,L]=b?[a,A,l[A]||{}]:Tc(e,a,A,i,h,d),T=g,k=a;if(!b&&!(H(T)||gn(T)||Je(T))&&S&&(T=y,k=T),!b&&(!(H(T)||gn(T)||Je(T))||!H(v)))return o?Qr:a;let M=!1;const I=()=>{M=!0},V=Je(T)?T:vc(e,a,v,T,k,I);if(M)return T;const K=m_(e,v,L,f),te=Kp(K),fe=d_(e,V,te),ae=r?r(fe,a):fe;if(__INTLIFY_PROD_DEVTOOLS__){const me={timestamp:Date.now(),key:H(a)?a:Je(T)?T.key:\"\",locale:v||(Je(T)?T.locale:\"\"),format:H(T)?T:Je(T)?T.source:\"\",message:ae};me.meta=we({},e.__meta,o_()||{}),qp(me)}return ae}function f_(e){ge(e.list)?e.list=e.list.map(t=>H(t)?qi(t):t):ce(e.named)&&Object.keys(e.named).forEach(t=>{H(e.named[t])&&(e.named[t]=qi(e.named[t]))})}function Tc(e,t,n,r,o,s){const{messages:i,onWarn:l,messageResolver:a,localeFallbacker:f}=e,d=f(e,r,n);let h={},m,b=null;const y=\"translate\";for(let S=0;S<d.length&&(m=d[S],h=i[m]||{},(b=a(h,t))===null&&(b=h[t]),!(H(b)||gn(b)||Je(b)));S++){const A=wo(e,t,m,s,y);A!==t&&(b=A)}return[b,m,h]}function vc(e,t,n,r,o,s){const{messageCompiler:i,warnHtmlMessage:l}=e;if(Je(r)){const f=r;return f.locale=f.locale||n,f.key=f.key||t,f}if(i==null){const f=()=>r;return f.locale=n,f.key=t,f}const a=i(r,h_(e,n,o,r,l,s));return a.locale=n,a.key=t,a.source=r,a}function d_(e,t,n){return t(n)}function Hs(...e){const[t,n,r]=e,o={};if(!H(t)&&!Re(t)&&!Je(t)&&!gn(t))throw dt(tt.INVALID_ARGUMENT);const s=Re(t)?String(t):(Je(t),t);return Re(n)?o.plural=n:H(n)?o.default=n:J(n)&&!zr(n)?o.named=n:ge(n)&&(o.list=n),Re(r)?o.plural=r:H(r)?o.default=r:J(r)&&we(o,r),[s,o]}function h_(e,t,n,r,o,s){return{locale:t,key:n,warnHtmlMessage:o,onError:i=>{throw s&&s(i),i},onCacheKey:i=>Ym(t,n,i)}}function m_(e,t,n,r){const{modifiers:o,pluralRules:s,messageResolver:i,fallbackLocale:l,fallbackWarn:a,missingWarn:f,fallbackContext:d}=e,m={locale:t,modifiers:o,pluralRules:s,messages:b=>{let y=i(n,b);if(y==null&&d){const[,,S]=Tc(d,b,t,l,a,f);y=i(S,b)}if(H(y)||gn(y)){let S=!1;const g=vc(e,b,t,y,b,()=>{S=!0});return S?cl:g}else return Je(y)?y:cl}};return e.processor&&(m.processor=e.processor),r.list&&(m.list=r.list),r.named&&(m.named=r.named),Re(r.plural)&&(m.pluralIndex=r.plural),m}function fl(e,...t){const{datetimeFormats:n,unresolving:r,fallbackLocale:o,onWarn:s,localeFallbacker:i}=e,{__datetimeFormatters:l}=e,[a,f,d,h]=Ws(...t),m=ee(d.missingWarn)?d.missingWarn:e.missingWarn;ee(d.fallbackWarn)?d.fallbackWarn:e.fallbackWarn;const b=!!d.part,y=Io(e,d),S=i(e,o,y);if(!H(a)||a===\"\")return new Intl.DateTimeFormat(y,h).format(f);let A={},g,v=null;const L=\"datetime format\";for(let M=0;M<S.length&&(g=S[M],A=n[g]||{},v=A[a],!J(v));M++)wo(e,a,g,m,L);if(!J(v)||!H(g))return r?Qr:a;let T=`${g}__${a}`;zr(h)||(T=`${T}__${JSON.stringify(h)}`);let k=l.get(T);return k||(k=new Intl.DateTimeFormat(g,we({},v,h)),l.set(T,k)),b?k.formatToParts(f):k.format(f)}const Sc=[\"localeMatcher\",\"weekday\",\"era\",\"year\",\"month\",\"day\",\"hour\",\"minute\",\"second\",\"timeZoneName\",\"formatMatcher\",\"hour12\",\"timeZone\",\"dateStyle\",\"timeStyle\",\"calendar\",\"dayPeriod\",\"numberingSystem\",\"hourCycle\",\"fractionalSecondDigits\"];function Ws(...e){const[t,n,r,o]=e,s={};let i={},l;if(H(t)){const a=t.match(/(\\d{4}-\\d{2}-\\d{2})(T|\\s)?(.*)/);if(!a)throw dt(tt.INVALID_ISO_DATE_ARGUMENT);const f=a[3]?a[3].trim().startsWith(\"T\")?`${a[1].trim()}${a[3].trim()}`:`${a[1].trim()}T${a[3].trim()}`:a[1].trim();l=new Date(f);try{l.toISOString()}catch{throw dt(tt.INVALID_ISO_DATE_ARGUMENT)}}else if(qm(t)){if(isNaN(t.getTime()))throw dt(tt.INVALID_DATE_ARGUMENT);l=t}else if(Re(t))l=t;else throw dt(tt.INVALID_ARGUMENT);return H(n)?s.key=n:J(n)&&Object.keys(n).forEach(a=>{Sc.includes(a)?i[a]=n[a]:s[a]=n[a]}),H(r)?s.locale=r:J(r)&&(i=r),J(o)&&(i=o),[s.key||\"\",l,s,i]}function dl(e,t,n){const r=e;for(const o in n){const s=`${t}__${o}`;r.__datetimeFormatters.has(s)&&r.__datetimeFormatters.delete(s)}}function hl(e,...t){const{numberFormats:n,unresolving:r,fallbackLocale:o,onWarn:s,localeFallbacker:i}=e,{__numberFormatters:l}=e,[a,f,d,h]=Bs(...t),m=ee(d.missingWarn)?d.missingWarn:e.missingWarn;ee(d.fallbackWarn)?d.fallbackWarn:e.fallbackWarn;const b=!!d.part,y=Io(e,d),S=i(e,o,y);if(!H(a)||a===\"\")return new Intl.NumberFormat(y,h).format(f);let A={},g,v=null;const L=\"number format\";for(let M=0;M<S.length&&(g=S[M],A=n[g]||{},v=A[a],!J(v));M++)wo(e,a,g,m,L);if(!J(v)||!H(g))return r?Qr:a;let T=`${g}__${a}`;zr(h)||(T=`${T}__${JSON.stringify(h)}`);let k=l.get(T);return k||(k=new Intl.NumberFormat(g,we({},v,h)),l.set(T,k)),b?k.formatToParts(f):k.format(f)}const Nc=[\"localeMatcher\",\"style\",\"currency\",\"currencyDisplay\",\"currencySign\",\"useGrouping\",\"minimumIntegerDigits\",\"minimumFractionDigits\",\"maximumFractionDigits\",\"minimumSignificantDigits\",\"maximumSignificantDigits\",\"compactDisplay\",\"notation\",\"signDisplay\",\"unit\",\"unitDisplay\",\"roundingMode\",\"roundingPriority\",\"roundingIncrement\",\"trailingZeroDisplay\"];function Bs(...e){const[t,n,r,o]=e,s={};let i={};if(!Re(t))throw dt(tt.INVALID_ARGUMENT);const l=t;return H(n)?s.key=n:J(n)&&Object.keys(n).forEach(a=>{Nc.includes(a)?i[a]=n[a]:s[a]=n[a]}),H(r)?s.locale=r:J(r)&&(i=r),J(o)&&(i=o),[s.key||\"\",l,s,i]}function ml(e,t,n){const r=e;for(const o in n){const s=`${t}__${o}`;r.__numberFormatters.has(s)&&r.__numberFormatters.delete(s)}}Cp();/*!\n  * vue-i18n v9.8.0\n  * (c) 2023 kazuya kawaguchi\n  * Released under the MIT License.\n  */const p_=\"9.8.0\";function __(){typeof __VUE_I18N_FULL_INSTALL__!=\"boolean\"&&(Et().__VUE_I18N_FULL_INSTALL__=!0),typeof __VUE_I18N_LEGACY_API__!=\"boolean\"&&(Et().__VUE_I18N_LEGACY_API__=!0),typeof __INTLIFY_JIT_COMPILATION__!=\"boolean\"&&(Et().__INTLIFY_JIT_COMPILATION__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!=\"boolean\"&&(Et().__INTLIFY_DROP_MESSAGE_COMPILER__=!1),typeof __INTLIFY_PROD_DEVTOOLS__!=\"boolean\"&&(Et().__INTLIFY_PROD_DEVTOOLS__=!1)}const Rc=Jp.__EXTEND_POINT__,Lt=Co(Rc);Lt(),Lt(),Lt(),Lt(),Lt(),Lt(),Lt(),Lt();const Ac=tt.__EXTEND_POINT__,He=Co(Ac),Ae={UNEXPECTED_RETURN_TYPE:Ac,INVALID_ARGUMENT:He(),MUST_BE_CALL_SETUP_TOP:He(),NOT_INSTALLED:He(),NOT_AVAILABLE_IN_LEGACY_MODE:He(),REQUIRED_VALUE:He(),INVALID_VALUE:He(),CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:He(),NOT_INSTALLED_WITH_PROVIDE:He(),UNEXPECTED_ERROR:He(),NOT_COMPATIBLE_LEGACY_VUE_I18N:He(),BRIDGE_SUPPORT_VUE_2_ONLY:He(),MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION:He(),NOT_AVAILABLE_COMPOSITION_IN_LEGACY:He(),__EXTEND_POINT__:He()};function Ie(e,...t){return Tn(e,null,void 0)}const Vs=Ut(\"__translateVNode\"),Ks=Ut(\"__datetimeParts\"),Ys=Ut(\"__numberParts\"),Lc=Ut(\"__setPluralRules\"),Cc=Ut(\"__injectWithOption\"),Gs=Ut(\"__dispose\");function Xn(e){if(!ce(e))return e;for(const t in e)if(Gn(e,t))if(!t.includes(\".\"))ce(e[t])&&Xn(e[t]);else{const n=t.split(\".\"),r=n.length-1;let o=e,s=!1;for(let i=0;i<r;i++){if(n[i]in o||(o[n[i]]={}),!ce(o[n[i]])){s=!0;break}o=o[n[i]]}s||(o[n[r]]=e[t],delete e[t]),ce(o[n[r]])&&Xn(o[n[r]])}return e}function Zr(e,t){const{messages:n,__i18n:r,messageResolver:o,flatJson:s}=t,i=J(n)?n:ge(r)?{}:{[e]:{}};if(ge(r)&&r.forEach(l=>{if(\"locale\"in l&&\"resource\"in l){const{locale:a,resource:f}=l;a?(i[a]=i[a]||{},Dn(f,i[a])):Dn(f,i)}else H(l)&&Dn(JSON.parse(l),i)}),o==null&&s)for(const l in i)Gn(i,l)&&Xn(i[l]);return i}function Pc(e){return e.type}function Ic(e,t,n){let r=ce(t.messages)?t.messages:{};\"__i18nGlobal\"in n&&(r=Zr(e.locale.value,{messages:r,__i18n:n.__i18nGlobal}));const o=Object.keys(r);o.length&&o.forEach(s=>{e.mergeLocaleMessage(s,r[s])});{if(ce(t.datetimeFormats)){const s=Object.keys(t.datetimeFormats);s.length&&s.forEach(i=>{e.mergeDateTimeFormat(i,t.datetimeFormats[i])})}if(ce(t.numberFormats)){const s=Object.keys(t.numberFormats);s.length&&s.forEach(i=>{e.mergeNumberFormat(i,t.numberFormats[i])})}}}function pl(e){return $e(Zn,null,e,0)}const _l=\"__INTLIFY_META__\",gl=()=>[],g_=()=>!1;let bl=0;function El(e){return(t,n,r,o)=>e(n,r,Bn()||void 0,o)}const b_=()=>{const e=Bn();let t=null;return e&&(t=Pc(e)[_l])?{[_l]:t}:null};function ko(e={},t){const{__root:n,__injectWithOption:r}=e,o=n===void 0,s=e.flatJson;let i=ee(e.inheritLocale)?e.inheritLocale:!0;const l=qe(n&&i?n.locale.value:H(e.locale)?e.locale:_n),a=qe(n&&i?n.fallbackLocale.value:H(e.fallbackLocale)||ge(e.fallbackLocale)||J(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:l.value),f=qe(Zr(l.value,e)),d=qe(J(e.datetimeFormats)?e.datetimeFormats:{[l.value]:{}}),h=qe(J(e.numberFormats)?e.numberFormats:{[l.value]:{}});let m=n?n.missingWarn:ee(e.missingWarn)||Dt(e.missingWarn)?e.missingWarn:!0,b=n?n.fallbackWarn:ee(e.fallbackWarn)||Dt(e.fallbackWarn)?e.fallbackWarn:!0,y=n?n.fallbackRoot:ee(e.fallbackRoot)?e.fallbackRoot:!0,S=!!e.fallbackFormat,A=de(e.missing)?e.missing:null,g=de(e.missing)?El(e.missing):null,v=de(e.postTranslation)?e.postTranslation:null,L=n?n.warnHtmlMessage:ee(e.warnHtmlMessage)?e.warnHtmlMessage:!0,T=!!e.escapeParameter;const k=n?n.modifiers:J(e.modifiers)?e.modifiers:{};let M=e.pluralRules||n&&n.pluralRules,I;I=(()=>{o&&il(null);const O={version:p_,locale:l.value,fallbackLocale:a.value,messages:f.value,modifiers:k,pluralRules:M,missing:g===null?void 0:g,missingWarn:m,fallbackWarn:b,fallbackFormat:S,unresolving:!0,postTranslation:v===null?void 0:v,warnHtmlMessage:L,escapeParameter:T,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:\"vue\"}};O.datetimeFormats=d.value,O.numberFormats=h.value,O.__datetimeFormatters=J(I)?I.__datetimeFormatters:void 0,O.__numberFormatters=J(I)?I.__numberFormatters:void 0;const R=l_(O);return o&&il(R),R})(),Ln(I,l.value,a.value);function K(){return[l.value,a.value,f.value,d.value,h.value]}const te=Oe({get:()=>l.value,set:O=>{l.value=O,I.locale=l.value}}),fe=Oe({get:()=>a.value,set:O=>{a.value=O,I.fallbackLocale=a.value,Ln(I,l.value,O)}}),ae=Oe(()=>f.value),me=Oe(()=>d.value),je=Oe(()=>h.value);function Ce(){return de(v)?v:null}function z(O){v=O,I.postTranslation=O}function se(){return A}function ne(O){O!==null&&(g=El(O)),A=O,I.missing=g}const Ee=(O,R,B,X,re,pe)=>{K();let Pe;try{__INTLIFY_PROD_DEVTOOLS__,o||(I.fallbackContext=n?i_():void 0),Pe=O(I)}finally{__INTLIFY_PROD_DEVTOOLS__,o||(I.fallbackContext=void 0)}if(B!==\"translate exists\"&&Re(Pe)&&Pe===Qr||B===\"translate exists\"&&!Pe){const[vt,es]=R();return n&&y?X(n):re(vt)}else{if(pe(Pe))return Pe;throw Ie(Ae.UNEXPECTED_RETURN_TYPE)}};function Me(...O){return Ee(R=>Reflect.apply(ul,null,[R,...O]),()=>Hs(...O),\"translate\",R=>Reflect.apply(R.t,R,[...O]),R=>R,R=>H(R))}function xe(...O){const[R,B,X]=O;if(X&&!ce(X))throw Ie(Ae.INVALID_ARGUMENT);return Me(R,B,we({resolvedMessage:!0},X||{}))}function ve(...O){return Ee(R=>Reflect.apply(fl,null,[R,...O]),()=>Ws(...O),\"datetime format\",R=>Reflect.apply(R.d,R,[...O]),()=>rl,R=>H(R))}function Xe(...O){return Ee(R=>Reflect.apply(hl,null,[R,...O]),()=>Bs(...O),\"number format\",R=>Reflect.apply(R.n,R,[...O]),()=>rl,R=>H(R))}function Ke(O){return O.map(R=>H(R)||Re(R)||ee(R)?pl(String(R)):R)}const ye={normalize:Ke,interpolate:O=>O,type:\"vnode\"};function C(...O){return Ee(R=>{let B;const X=R;try{X.processor=ye,B=Reflect.apply(ul,null,[X,...O])}finally{X.processor=null}return B},()=>Hs(...O),\"translate\",R=>R[Vs](...O),R=>[pl(R)],R=>ge(R))}function j(...O){return Ee(R=>Reflect.apply(hl,null,[R,...O]),()=>Bs(...O),\"number format\",R=>R[Ys](...O),gl,R=>H(R)||ge(R))}function U(...O){return Ee(R=>Reflect.apply(fl,null,[R,...O]),()=>Ws(...O),\"datetime format\",R=>R[Ks](...O),gl,R=>H(R)||ge(R))}function W(O){M=O,I.pluralRules=M}function Z(O,R){return Ee(()=>{if(!O)return!1;const B=H(R)?R:l.value,X=u(B),re=I.messageResolver(X,O);return gn(re)||Je(re)||H(re)},()=>[O],\"translate exists\",B=>Reflect.apply(B.te,B,[O,R]),g_,B=>ee(B))}function _(O){let R=null;const B=mc(I,a.value,l.value);for(let X=0;X<B.length;X++){const re=f.value[B[X]]||{},pe=I.messageResolver(re,O);if(pe!=null){R=pe;break}}return R}function c(O){const R=_(O);return R??(n?n.tm(O)||{}:{})}function u(O){return f.value[O]||{}}function p(O,R){if(s){const B={[O]:R};for(const X in B)Gn(B,X)&&Xn(B[X]);R=B[O]}f.value[O]=R,I.messages=f.value}function E(O,R){f.value[O]=f.value[O]||{};const B={[O]:R};for(const X in B)Gn(B,X)&&Xn(B[X]);R=B[O],Dn(R,f.value[O]),I.messages=f.value}function N(O){return d.value[O]||{}}function w(O,R){d.value[O]=R,I.datetimeFormats=d.value,dl(I,O,R)}function F(O,R){d.value[O]=we(d.value[O]||{},R),I.datetimeFormats=d.value,dl(I,O,R)}function D(O){return h.value[O]||{}}function x(O,R){h.value[O]=R,I.numberFormats=h.value,ml(I,O,R)}function Y(O,R){h.value[O]=we(h.value[O]||{},R),I.numberFormats=h.value,ml(I,O,R)}bl++,n&&Us&&(Ft(n.locale,O=>{i&&(l.value=O,I.locale=O,Ln(I,l.value,a.value))}),Ft(n.fallbackLocale,O=>{i&&(a.value=O,I.fallbackLocale=O,Ln(I,l.value,a.value))}));const $={id:bl,locale:te,fallbackLocale:fe,get inheritLocale(){return i},set inheritLocale(O){i=O,O&&n&&(l.value=n.locale.value,a.value=n.fallbackLocale.value,Ln(I,l.value,a.value))},get availableLocales(){return Object.keys(f.value).sort()},messages:ae,get modifiers(){return k},get pluralRules(){return M||{}},get isGlobal(){return o},get missingWarn(){return m},set missingWarn(O){m=O,I.missingWarn=m},get fallbackWarn(){return b},set fallbackWarn(O){b=O,I.fallbackWarn=b},get fallbackRoot(){return y},set fallbackRoot(O){y=O},get fallbackFormat(){return S},set fallbackFormat(O){S=O,I.fallbackFormat=S},get warnHtmlMessage(){return L},set warnHtmlMessage(O){L=O,I.warnHtmlMessage=O},get escapeParameter(){return T},set escapeParameter(O){T=O,I.escapeParameter=O},t:Me,getLocaleMessage:u,setLocaleMessage:p,mergeLocaleMessage:E,getPostTranslationHandler:Ce,setPostTranslationHandler:z,getMissingHandler:se,setMissingHandler:ne,[Lc]:W};return $.datetimeFormats=me,$.numberFormats=je,$.rt=xe,$.te=Z,$.tm=c,$.d=ve,$.n=Xe,$.getDateTimeFormat=N,$.setDateTimeFormat=w,$.mergeDateTimeFormat=F,$.getNumberFormat=D,$.setNumberFormat=x,$.mergeNumberFormat=Y,$[Cc]=r,$[Vs]=C,$[Ks]=U,$[Ys]=j,$}function E_(e){const t=H(e.locale)?e.locale:_n,n=H(e.fallbackLocale)||ge(e.fallbackLocale)||J(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:t,r=de(e.missing)?e.missing:void 0,o=ee(e.silentTranslationWarn)||Dt(e.silentTranslationWarn)?!e.silentTranslationWarn:!0,s=ee(e.silentFallbackWarn)||Dt(e.silentFallbackWarn)?!e.silentFallbackWarn:!0,i=ee(e.fallbackRoot)?e.fallbackRoot:!0,l=!!e.formatFallbackMessages,a=J(e.modifiers)?e.modifiers:{},f=e.pluralizationRules,d=de(e.postTranslation)?e.postTranslation:void 0,h=H(e.warnHtmlInMessage)?e.warnHtmlInMessage!==\"off\":!0,m=!!e.escapeParameterHtml,b=ee(e.sync)?e.sync:!0;let y=e.messages;if(J(e.sharedMessages)){const k=e.sharedMessages;y=Object.keys(k).reduce((I,V)=>{const K=I[V]||(I[V]={});return we(K,k[V]),I},y||{})}const{__i18n:S,__root:A,__injectWithOption:g}=e,v=e.datetimeFormats,L=e.numberFormats,T=e.flatJson;return{locale:t,fallbackLocale:n,messages:y,flatJson:T,datetimeFormats:v,numberFormats:L,missing:r,missingWarn:o,fallbackWarn:s,fallbackRoot:i,fallbackFormat:l,modifiers:a,pluralRules:f,postTranslation:d,warnHtmlMessage:h,escapeParameter:m,messageResolver:e.messageResolver,inheritLocale:b,__i18n:S,__root:A,__injectWithOption:g}}function qs(e={},t){{const n=ko(E_(e)),{__extender:r}=e,o={id:n.id,get locale(){return n.locale.value},set locale(s){n.locale.value=s},get fallbackLocale(){return n.fallbackLocale.value},set fallbackLocale(s){n.fallbackLocale.value=s},get messages(){return n.messages.value},get datetimeFormats(){return n.datetimeFormats.value},get numberFormats(){return n.numberFormats.value},get availableLocales(){return n.availableLocales},get formatter(){return{interpolate(){return[]}}},set formatter(s){},get missing(){return n.getMissingHandler()},set missing(s){n.setMissingHandler(s)},get silentTranslationWarn(){return ee(n.missingWarn)?!n.missingWarn:n.missingWarn},set silentTranslationWarn(s){n.missingWarn=ee(s)?!s:s},get silentFallbackWarn(){return ee(n.fallbackWarn)?!n.fallbackWarn:n.fallbackWarn},set silentFallbackWarn(s){n.fallbackWarn=ee(s)?!s:s},get modifiers(){return n.modifiers},get formatFallbackMessages(){return n.fallbackFormat},set formatFallbackMessages(s){n.fallbackFormat=s},get postTranslation(){return n.getPostTranslationHandler()},set postTranslation(s){n.setPostTranslationHandler(s)},get sync(){return n.inheritLocale},set sync(s){n.inheritLocale=s},get warnHtmlInMessage(){return n.warnHtmlMessage?\"warn\":\"off\"},set warnHtmlInMessage(s){n.warnHtmlMessage=s!==\"off\"},get escapeParameterHtml(){return n.escapeParameter},set escapeParameterHtml(s){n.escapeParameter=s},get preserveDirectiveContent(){return!0},set preserveDirectiveContent(s){},get pluralizationRules(){return n.pluralRules||{}},__composer:n,t(...s){const[i,l,a]=s,f={};let d=null,h=null;if(!H(i))throw Ie(Ae.INVALID_ARGUMENT);const m=i;return H(l)?f.locale=l:ge(l)?d=l:J(l)&&(h=l),ge(a)?d=a:J(a)&&(h=a),Reflect.apply(n.t,n,[m,d||h||{},f])},rt(...s){return Reflect.apply(n.rt,n,[...s])},tc(...s){const[i,l,a]=s,f={plural:1};let d=null,h=null;if(!H(i))throw Ie(Ae.INVALID_ARGUMENT);const m=i;return H(l)?f.locale=l:Re(l)?f.plural=l:ge(l)?d=l:J(l)&&(h=l),H(a)?f.locale=a:ge(a)?d=a:J(a)&&(h=a),Reflect.apply(n.t,n,[m,d||h||{},f])},te(s,i){return n.te(s,i)},tm(s){return n.tm(s)},getLocaleMessage(s){return n.getLocaleMessage(s)},setLocaleMessage(s,i){n.setLocaleMessage(s,i)},mergeLocaleMessage(s,i){n.mergeLocaleMessage(s,i)},d(...s){return Reflect.apply(n.d,n,[...s])},getDateTimeFormat(s){return n.getDateTimeFormat(s)},setDateTimeFormat(s,i){n.setDateTimeFormat(s,i)},mergeDateTimeFormat(s,i){n.mergeDateTimeFormat(s,i)},n(...s){return Reflect.apply(n.n,n,[...s])},getNumberFormat(s){return n.getNumberFormat(s)},setNumberFormat(s,i){n.setNumberFormat(s,i)},mergeNumberFormat(s,i){n.mergeNumberFormat(s,i)},getChoiceIndex(s,i){return-1}};return o.__extender=r,o}}const xo={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>e===\"parent\"||e===\"global\",default:\"parent\"},i18n:{type:Object}};function y_({slots:e},t){return t.length===1&&t[0]===\"default\"?(e.default?e.default():[]).reduce((r,o)=>[...r,...o.type===Qe?o.children:[o]],[]):t.reduce((n,r)=>{const o=e[r];return o&&(n[r]=o()),n},{})}function wc(e){return Qe}const O_=Qn({name:\"i18n-t\",props:we({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>Re(e)||!isNaN(e)}},xo),setup(e,t){const{slots:n,attrs:r}=t,o=e.i18n||Fo({useScope:e.scope,__useComponent:!0});return()=>{const s=Object.keys(n).filter(h=>h!==\"_\"),i={};e.locale&&(i.locale=e.locale),e.plural!==void 0&&(i.plural=H(e.plural)?+e.plural:e.plural);const l=y_(t,s),a=o[Vs](e.keypath,l,i),f=we({},r),d=H(e.tag)||ce(e.tag)?e.tag:wc();return Wr(d,f,a)}}}),yl=O_;function T_(e){return ge(e)&&!H(e[0])}function kc(e,t,n,r){const{slots:o,attrs:s}=t;return()=>{const i={part:!0};let l={};e.locale&&(i.locale=e.locale),H(e.format)?i.key=e.format:ce(e.format)&&(H(e.format.key)&&(i.key=e.format.key),l=Object.keys(e.format).reduce((m,b)=>n.includes(b)?we({},m,{[b]:e.format[b]}):m,{}));const a=r(e.value,i,l);let f=[i.key];ge(a)?f=a.map((m,b)=>{const y=o[m.type],S=y?y({[m.type]:m.value,index:b,parts:a}):[m.value];return T_(S)&&(S[0].key=`${m.type}-${b}`),S}):H(a)&&(f=[a]);const d=we({},s),h=H(e.tag)||ce(e.tag)?e.tag:wc();return Wr(h,d,f)}}const v_=Qn({name:\"i18n-n\",props:we({value:{type:Number,required:!0},format:{type:[String,Object]}},xo),setup(e,t){const n=e.i18n||Fo({useScope:\"parent\",__useComponent:!0});return kc(e,t,Nc,(...r)=>n[Ys](...r))}}),Ol=v_,S_=Qn({name:\"i18n-d\",props:we({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},xo),setup(e,t){const n=e.i18n||Fo({useScope:\"parent\",__useComponent:!0});return kc(e,t,Sc,(...r)=>n[Ks](...r))}}),Tl=S_;function N_(e,t){const n=e;if(e.mode===\"composition\")return n.__getInstance(t)||e.global;{const r=n.__getInstance(t);return r!=null?r.__composer:e.global.__composer}}function R_(e){const t=i=>{const{instance:l,modifiers:a,value:f}=i;if(!l||!l.$)throw Ie(Ae.UNEXPECTED_ERROR);const d=N_(e,l.$),h=vl(f);return[Reflect.apply(d.t,d,[...Sl(h)]),d]};return{created:(i,l)=>{const[a,f]=t(l);Us&&e.global===f&&(i.__i18nWatcher=Ft(f.locale,()=>{l.instance&&l.instance.$forceUpdate()})),i.__composer=f,i.textContent=a},unmounted:i=>{Us&&i.__i18nWatcher&&(i.__i18nWatcher(),i.__i18nWatcher=void 0,delete i.__i18nWatcher),i.__composer&&(i.__composer=void 0,delete i.__composer)},beforeUpdate:(i,{value:l})=>{if(i.__composer){const a=i.__composer,f=vl(l);i.textContent=Reflect.apply(a.t,a,[...Sl(f)])}},getSSRProps:i=>{const[l]=t(i);return{textContent:l}}}}function vl(e){if(H(e))return{path:e};if(J(e)){if(!(\"path\"in e))throw Ie(Ae.REQUIRED_VALUE,\"path\");return e}else throw Ie(Ae.INVALID_VALUE)}function Sl(e){const{path:t,locale:n,args:r,choice:o,plural:s}=e,i={},l=r||{};return H(n)&&(i.locale=n),Re(o)&&(i.plural=o),Re(s)&&(i.plural=s),[t,l,i]}function A_(e,t,...n){const r=J(n[0])?n[0]:{},o=!!r.useI18nComponentName;(ee(r.globalInstall)?r.globalInstall:!0)&&([o?\"i18n\":yl.name,\"I18nT\"].forEach(i=>e.component(i,yl)),[Ol.name,\"I18nN\"].forEach(i=>e.component(i,Ol)),[Tl.name,\"I18nD\"].forEach(i=>e.component(i,Tl))),e.directive(\"t\",R_(t))}function L_(e,t,n){return{beforeCreate(){const r=Bn();if(!r)throw Ie(Ae.UNEXPECTED_ERROR);const o=this.$options;if(o.i18n){const s=o.i18n;if(o.__i18n&&(s.__i18n=o.__i18n),s.__root=t,this===this.$root)this.$i18n=Nl(e,s);else{s.__injectWithOption=!0,s.__extender=n.__vueI18nExtend,this.$i18n=qs(s);const i=this.$i18n;i.__extender&&(i.__disposer=i.__extender(this.$i18n))}}else if(o.__i18n)if(this===this.$root)this.$i18n=Nl(e,o);else{this.$i18n=qs({__i18n:o.__i18n,__injectWithOption:!0,__extender:n.__vueI18nExtend,__root:t});const s=this.$i18n;s.__extender&&(s.__disposer=s.__extender(this.$i18n))}else this.$i18n=e;o.__i18nGlobal&&Ic(t,o,o),this.$t=(...s)=>this.$i18n.t(...s),this.$rt=(...s)=>this.$i18n.rt(...s),this.$tc=(...s)=>this.$i18n.tc(...s),this.$te=(s,i)=>this.$i18n.te(s,i),this.$d=(...s)=>this.$i18n.d(...s),this.$n=(...s)=>this.$i18n.n(...s),this.$tm=s=>this.$i18n.tm(s),n.__setInstance(r,this.$i18n)},mounted(){},unmounted(){const r=Bn();if(!r)throw Ie(Ae.UNEXPECTED_ERROR);const o=this.$i18n;delete this.$t,delete this.$rt,delete this.$tc,delete this.$te,delete this.$d,delete this.$n,delete this.$tm,o.__disposer&&(o.__disposer(),delete o.__disposer,delete o.__extender),n.__deleteInstance(r),delete this.$i18n}}}function Nl(e,t){e.locale=t.locale||e.locale,e.fallbackLocale=t.fallbackLocale||e.fallbackLocale,e.missing=t.missing||e.missing,e.silentTranslationWarn=t.silentTranslationWarn||e.silentFallbackWarn,e.silentFallbackWarn=t.silentFallbackWarn||e.silentFallbackWarn,e.formatFallbackMessages=t.formatFallbackMessages||e.formatFallbackMessages,e.postTranslation=t.postTranslation||e.postTranslation,e.warnHtmlInMessage=t.warnHtmlInMessage||e.warnHtmlInMessage,e.escapeParameterHtml=t.escapeParameterHtml||e.escapeParameterHtml,e.sync=t.sync||e.sync,e.__composer[Lc](t.pluralizationRules||e.pluralizationRules);const n=Zr(e.locale,{messages:t.messages,__i18n:t.__i18n});return Object.keys(n).forEach(r=>e.mergeLocaleMessage(r,n[r])),t.datetimeFormats&&Object.keys(t.datetimeFormats).forEach(r=>e.mergeDateTimeFormat(r,t.datetimeFormats[r])),t.numberFormats&&Object.keys(t.numberFormats).forEach(r=>e.mergeNumberFormat(r,t.numberFormats[r])),e}const C_=Ut(\"global-vue-i18n\");function og(e={},t){const n=__VUE_I18N_LEGACY_API__&&ee(e.legacy)?e.legacy:__VUE_I18N_LEGACY_API__,r=ee(e.globalInjection)?e.globalInjection:!0,o=__VUE_I18N_LEGACY_API__&&n?!!e.allowComposition:!0,s=new Map,[i,l]=P_(e,n),a=Ut(\"\");function f(m){return s.get(m)||null}function d(m,b){s.set(m,b)}function h(m){s.delete(m)}{const m={get mode(){return __VUE_I18N_LEGACY_API__&&n?\"legacy\":\"composition\"},get allowComposition(){return o},async install(b,...y){if(b.__VUE_I18N_SYMBOL__=a,b.provide(b.__VUE_I18N_SYMBOL__,m),J(y[0])){const g=y[0];m.__composerExtend=g.__composerExtend,m.__vueI18nExtend=g.__vueI18nExtend}let S=null;!n&&r&&(S=$_(b,m.global)),__VUE_I18N_FULL_INSTALL__&&A_(b,m,...y),__VUE_I18N_LEGACY_API__&&n&&b.mixin(L_(l,l.__composer,m));const A=b.unmount;b.unmount=()=>{S&&S(),m.dispose(),A()}},get global(){return l},dispose(){i.stop()},__instances:s,__getInstance:f,__setInstance:d,__deleteInstance:h};return m}}function Fo(e={}){const t=Bn();if(t==null)throw Ie(Ae.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&t.appContext.app!=null&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw Ie(Ae.NOT_INSTALLED);const n=I_(t),r=k_(n),o=Pc(t),s=w_(e,o);if(__VUE_I18N_LEGACY_API__&&n.mode===\"legacy\"&&!e.__useComponent){if(!n.allowComposition)throw Ie(Ae.NOT_AVAILABLE_IN_LEGACY_MODE);return D_(t,s,r,e)}if(s===\"global\")return Ic(r,e,o),r;if(s===\"parent\"){let a=x_(n,t,e.__useComponent);return a==null&&(a=r),a}const i=n;let l=i.__getInstance(t);if(l==null){const a=we({},e);\"__i18n\"in o&&(a.__i18n=o.__i18n),r&&(a.__root=r),l=ko(a),i.__composerExtend&&(l[Gs]=i.__composerExtend(l)),M_(i,t,l),i.__setInstance(t,l)}return l}function P_(e,t,n){const r=to();{const o=__VUE_I18N_LEGACY_API__&&t?r.run(()=>qs(e)):r.run(()=>ko(e));if(o==null)throw Ie(Ae.UNEXPECTED_ERROR);return[r,o]}}function I_(e){{const t=st(e.isCE?C_:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw Ie(e.isCE?Ae.NOT_INSTALLED_WITH_PROVIDE:Ae.UNEXPECTED_ERROR);return t}}function w_(e,t){return zr(e)?\"__i18n\"in t?\"local\":\"global\":e.useScope?e.useScope:\"local\"}function k_(e){return e.mode===\"composition\"?e.global:e.global.__composer}function x_(e,t,n=!1){let r=null;const o=t.root;let s=F_(t,n);for(;s!=null;){const i=e;if(e.mode===\"composition\")r=i.__getInstance(s);else if(__VUE_I18N_LEGACY_API__){const l=i.__getInstance(s);l!=null&&(r=l.__composer,n&&r&&!r[Cc]&&(r=null))}if(r!=null||o===s)break;s=s.parent}return r}function F_(e,t=!1){return e==null?null:t&&e.vnode.ctx||e.parent}function M_(e,t,n){ua(()=>{},t),fo(()=>{const r=n;e.__deleteInstance(t);const o=r[Gs];o&&(o(),delete r[Gs])},t)}function D_(e,t,n,r={}){const o=t===\"local\",s=Xl(null);if(o&&e.proxy&&!(e.proxy.$options.i18n||e.proxy.$options.__i18n))throw Ie(Ae.MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION);const i=ee(r.inheritLocale)?r.inheritLocale:!H(r.locale),l=qe(!o||i?n.locale.value:H(r.locale)?r.locale:_n),a=qe(!o||i?n.fallbackLocale.value:H(r.fallbackLocale)||ge(r.fallbackLocale)||J(r.fallbackLocale)||r.fallbackLocale===!1?r.fallbackLocale:l.value),f=qe(Zr(l.value,r)),d=qe(J(r.datetimeFormats)?r.datetimeFormats:{[l.value]:{}}),h=qe(J(r.numberFormats)?r.numberFormats:{[l.value]:{}}),m=o?n.missingWarn:ee(r.missingWarn)||Dt(r.missingWarn)?r.missingWarn:!0,b=o?n.fallbackWarn:ee(r.fallbackWarn)||Dt(r.fallbackWarn)?r.fallbackWarn:!0,y=o?n.fallbackRoot:ee(r.fallbackRoot)?r.fallbackRoot:!0,S=!!r.fallbackFormat,A=de(r.missing)?r.missing:null,g=de(r.postTranslation)?r.postTranslation:null,v=o?n.warnHtmlMessage:ee(r.warnHtmlMessage)?r.warnHtmlMessage:!0,L=!!r.escapeParameter,T=o?n.modifiers:J(r.modifiers)?r.modifiers:{},k=r.pluralRules||o&&n.pluralRules;function M(){return[l.value,a.value,f.value,d.value,h.value]}const I=Oe({get:()=>s.value?s.value.locale.value:l.value,set:u=>{s.value&&(s.value.locale.value=u),l.value=u}}),V=Oe({get:()=>s.value?s.value.fallbackLocale.value:a.value,set:u=>{s.value&&(s.value.fallbackLocale.value=u),a.value=u}}),K=Oe(()=>s.value?s.value.messages.value:f.value),te=Oe(()=>d.value),fe=Oe(()=>h.value);function ae(){return s.value?s.value.getPostTranslationHandler():g}function me(u){s.value&&s.value.setPostTranslationHandler(u)}function je(){return s.value?s.value.getMissingHandler():A}function Ce(u){s.value&&s.value.setMissingHandler(u)}function z(u){return M(),u()}function se(...u){return s.value?z(()=>Reflect.apply(s.value.t,null,[...u])):z(()=>\"\")}function ne(...u){return s.value?Reflect.apply(s.value.rt,null,[...u]):\"\"}function Ee(...u){return s.value?z(()=>Reflect.apply(s.value.d,null,[...u])):z(()=>\"\")}function Me(...u){return s.value?z(()=>Reflect.apply(s.value.n,null,[...u])):z(()=>\"\")}function xe(u){return s.value?s.value.tm(u):{}}function ve(u,p){return s.value?s.value.te(u,p):!1}function Xe(u){return s.value?s.value.getLocaleMessage(u):{}}function Ke(u,p){s.value&&(s.value.setLocaleMessage(u,p),f.value[u]=p)}function pt(u,p){s.value&&s.value.mergeLocaleMessage(u,p)}function ye(u){return s.value?s.value.getDateTimeFormat(u):{}}function C(u,p){s.value&&(s.value.setDateTimeFormat(u,p),d.value[u]=p)}function j(u,p){s.value&&s.value.mergeDateTimeFormat(u,p)}function U(u){return s.value?s.value.getNumberFormat(u):{}}function W(u,p){s.value&&(s.value.setNumberFormat(u,p),h.value[u]=p)}function Z(u,p){s.value&&s.value.mergeNumberFormat(u,p)}const _={get id(){return s.value?s.value.id:-1},locale:I,fallbackLocale:V,messages:K,datetimeFormats:te,numberFormats:fe,get inheritLocale(){return s.value?s.value.inheritLocale:i},set inheritLocale(u){s.value&&(s.value.inheritLocale=u)},get availableLocales(){return s.value?s.value.availableLocales:Object.keys(f.value)},get modifiers(){return s.value?s.value.modifiers:T},get pluralRules(){return s.value?s.value.pluralRules:k},get isGlobal(){return s.value?s.value.isGlobal:!1},get missingWarn(){return s.value?s.value.missingWarn:m},set missingWarn(u){s.value&&(s.value.missingWarn=u)},get fallbackWarn(){return s.value?s.value.fallbackWarn:b},set fallbackWarn(u){s.value&&(s.value.missingWarn=u)},get fallbackRoot(){return s.value?s.value.fallbackRoot:y},set fallbackRoot(u){s.value&&(s.value.fallbackRoot=u)},get fallbackFormat(){return s.value?s.value.fallbackFormat:S},set fallbackFormat(u){s.value&&(s.value.fallbackFormat=u)},get warnHtmlMessage(){return s.value?s.value.warnHtmlMessage:v},set warnHtmlMessage(u){s.value&&(s.value.warnHtmlMessage=u)},get escapeParameter(){return s.value?s.value.escapeParameter:L},set escapeParameter(u){s.value&&(s.value.escapeParameter=u)},t:se,getPostTranslationHandler:ae,setPostTranslationHandler:me,getMissingHandler:je,setMissingHandler:Ce,rt:ne,d:Ee,n:Me,tm:xe,te:ve,getLocaleMessage:Xe,setLocaleMessage:Ke,mergeLocaleMessage:pt,getDateTimeFormat:ye,setDateTimeFormat:C,mergeDateTimeFormat:j,getNumberFormat:U,setNumberFormat:W,mergeNumberFormat:Z};function c(u){u.locale.value=l.value,u.fallbackLocale.value=a.value,Object.keys(f.value).forEach(p=>{u.mergeLocaleMessage(p,f.value[p])}),Object.keys(d.value).forEach(p=>{u.mergeDateTimeFormat(p,d.value[p])}),Object.keys(h.value).forEach(p=>{u.mergeNumberFormat(p,h.value[p])}),u.escapeParameter=L,u.fallbackFormat=S,u.fallbackRoot=y,u.fallbackWarn=b,u.missingWarn=m,u.warnHtmlMessage=v}return ca(()=>{if(e.proxy==null||e.proxy.$i18n==null)throw Ie(Ae.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const u=s.value=e.proxy.$i18n.__composer;t===\"global\"?(l.value=u.locale.value,a.value=u.fallbackLocale.value,f.value=u.messages.value,d.value=u.datetimeFormats.value,h.value=u.numberFormats.value):o&&c(u)}),_}const U_=[\"locale\",\"fallbackLocale\",\"availableLocales\"],Rl=[\"t\",\"rt\",\"d\",\"n\",\"tm\",\"te\"];function $_(e,t){const n=Object.create(null);return U_.forEach(o=>{const s=Object.getOwnPropertyDescriptor(t,o);if(!s)throw Ie(Ae.UNEXPECTED_ERROR);const i=Te(s.value)?{get(){return s.value.value},set(l){s.value.value=l}}:{get(){return s.get&&s.get()}};Object.defineProperty(n,o,i)}),e.config.globalProperties.$i18n=n,Rl.forEach(o=>{const s=Object.getOwnPropertyDescriptor(t,o);if(!s||!s.value)throw Ie(Ae.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${o}`,s)}),()=>{delete e.config.globalProperties.$i18n,Rl.forEach(o=>{delete e.config.globalProperties[`$${o}`]})}}__();__INTLIFY_JIT_COMPILATION__?ol(u_):ol(c_);n_(Dp);r_(mc);if(__INTLIFY_PROD_DEVTOOLS__){const e=Et();e.__INTLIFY__=!0,Yp(e.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__)}export{ng as A,eg as E,Qe as F,fh as _,po as a,V_ as b,_f as c,Z_ as d,W_ as e,G_ as f,H_ as g,$e as h,Cu as i,gf as j,K_ as k,yf as l,z_ as m,J_ as n,Ea as o,eo as p,X_ as q,B_ as r,rg as s,j_ as t,sg as u,Y_ as v,q_ as w,Q_ as x,og as y};\n"
  },
  {
    "path": "public/vite-test/manifest-assets.json",
    "content": "{}"
  },
  {
    "path": "public/vite-test/manifest.json",
    "content": "{\n  \"_vue-i18n-6b73e0ca.js\": {\n    \"file\": \"assets/vue-i18n-6b73e0ca.js\"\n  },\n  \"entrypoints/admin.js\": {\n    \"file\": \"assets/admin-ebb17751.js\",\n    \"imports\": [\n      \"_vue-i18n-6b73e0ca.js\"\n    ],\n    \"isEntry\": true,\n    \"src\": \"entrypoints/admin.js\"\n  },\n  \"entrypoints/front.js\": {\n    \"file\": \"assets/front-f6acb49a.js\",\n    \"imports\": [\n      \"_vue-i18n-6b73e0ca.js\"\n    ],\n    \"isEntry\": true,\n    \"src\": \"entrypoints/front.js\"\n  }\n}"
  },
  {
    "path": "storage/.keep",
    "content": ""
  },
  {
    "path": "test/application_system_test_case.rb",
    "content": "require \"test_helper\"\n\nclass ApplicationSystemTestCase < ActionDispatch::SystemTestCase\n  driven_by :selenium, using: :chrome, screen_size: [1400, 1400]\nend\n"
  },
  {
    "path": "test/controllers/.keep",
    "content": ""
  },
  {
    "path": "test/fixtures/files/.keep",
    "content": ""
  },
  {
    "path": "test/helpers/.keep",
    "content": ""
  },
  {
    "path": "test/javascript/app.test.js",
    "content": "const chai = require('chai')\nconst expect = chai.expect\n\ndescribe('first test', () => {\n  it('is true', () => {\n    expect(true).to.equal(true)\n  })\n})\n"
  },
  {
    "path": "test/mailers/.keep",
    "content": ""
  },
  {
    "path": "test/models/.keep",
    "content": ""
  },
  {
    "path": "test/system/.keep",
    "content": ""
  },
  {
    "path": "test/test_helper.rb",
    "content": "require File.expand_path('../../config/environment', __FILE__)\nrequire 'rails/test_help'\n\nENV['RAILS_ENV'] ||= 'test'\n\nrequire 'rails/test_help'\nrequire 'rack/test'\nrequire 'capybara/rails'\nrequire 'minitest'\nrequire 'minitest/rails'\nrequire 'minitest-metadata'\nrequire 'capybara/email'\nrequire 'json-schema'\n\ninclude Rails.application.routes.url_helpers\ninclude ActionDispatch::TestProcess\ninclude Warden::Test::Helpers\n\nRails.logger.level = 5\nDir[Rails.root.join('test/support/**/*.rb')].each { |f| require f }\n\nclass ActiveSupport::TestCase\n  parallelize(workers: 1)\n  ActiveJob::Base.queue_adapter = :test\n\n  fixtures :all\n  self.use_transactional_tests = true\n\n  def json_response\n    JSON.parse(response.body)\n  end\nend\n\nclass ActionController::TestCase\n  include Rails.application.routes.url_helpers\n  include Devise::Test::ControllerHelpers\n  include ActionCable::TestHelper\n \n  self.use_transactional_tests = true\n  \n  Capybara.default_driver = :headless_chrome\n  Capybara.javascript_driver = :headless_chrome\n  Capybara.default_max_wait_time = 5 # seconds\nend\n\nclass ActionDispatch::IntegrationTest\n  include ResponseAssertions\n  include Devise::Test::IntegrationHelpers\n  include Rails.application.routes.url_helpers\n\n  Capybara.register_driver :headless_chrome do |app|\n    Capybara::Selenium::Driver.new(app, browser: :chrome)\n  end\n\n  Capybara.configure do |config|\n    config.default_max_wait_time = 5 # seconds\n    config.default_driver = :headless_chrome\n    config.javascript_driver = :headless_chrome\n  end\nend"
  },
  {
    "path": "tmp/.keep",
    "content": ""
  },
  {
    "path": "vendor/.keep",
    "content": ""
  },
  {
    "path": "vendor/javascript/.keep",
    "content": ""
  },
  {
    "path": "vite.config.ts",
    "content": "import { defineConfig } from 'vite'\n\nimport RubyPlugin from 'vite-plugin-ruby'\nimport Vue from '@vitejs/plugin-vue'\nimport AutoImport from 'unplugin-auto-import/vite'\n\nexport default defineConfig({\n  plugins: [\n    AutoImport({\n      // targets to transform\n      include: [\n        /\\.[tj]sx?$/, // .ts, .tsx, .js, .jsx\n        /\\.vue$/,\n        /\\.vue\\?vue/, // .vue\n        /\\.md$/, // .md\n      ],\n      imports: [\n        'vue',\n        'vue-router',\n        'vue-i18n'\n      ]\n    }),\n    RubyPlugin(),    \n    Vue()\n  ],\n  server: {\n    hmr: {\n      port: 3036\n    },\n  }\n})\n"
  }
]