summaryrefslogtreecommitdiffstats
path: root/apps/settings/js/vue-3.js.map
blob: fb6e1e7d149d062c297a92544e3a7426004a1ba1 (plain)
1
{"version":3,"file":"vue-3.js?v=e015ba955ee2bc1cd2ca","sources":["webpack:///./apps/settings/src/components/UserList.vue","webpack:///./apps/settings/src/components/UserList.vue?69dd","webpack:///./apps/settings/src/components/UserList.vue?bf93","webpack:///./apps/settings/src/components/UserList/UserRow.vue","webpack:///./apps/settings/src/components/UserList/UserRow.vue?4147","webpack:///./apps/settings/src/components/UserList/UserRow.vue?61ef","webpack:///./apps/settings/src/components/UserList/UserRow.vue?34cc","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue?6483","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue?09fb","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue?2ff0","webpack:///./apps/settings/src/mixins/UserRowMixin.js","webpack:///./apps/settings/src/views/Users.vue","webpack:///./apps/settings/src/views/Users.vue?83c0","webpack:///./apps/settings/src/views/Users.vue?cc08","webpack:///./apps/settings/src/components/UserList.vue?1138","webpack:///./apps/settings/src/components/UserList/UserRow.vue?68e3","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue?4ab0","webpack:///./apps/settings/src/views/Users.vue?0f11","webpack:///./apps/settings/src/components/UserList/UserRow.vue?c164","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue?bad0","webpack:///./apps/settings/src/components/UserList.vue?6b70","webpack:///./apps/settings/src/components/UserList/UserRow.vue?2c01","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue?d051","webpack:///./apps/settings/src/views/Users.vue?d4fd","webpack:///./apps/settings/src/components/UserList/UserRow.vue?e26c","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue?49be"],"sourcesContent":["import { render, staticRenderFns } from \"./UserList.vue?vue&type=template&id=6cba3aca&\"\nimport script from \"./UserList.vue?vue&type=script&lang=js&\"\nexport * from \"./UserList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (module.hot) {\n  var api = require(\"/home/roeland/nc/server/node_modules/vue-hot-reload-api/dist/index.js\")\n  api.install(require('vue'))\n  if (api.compatible) {\n    module.hot.accept()\n    if (!api.isRecorded('6cba3aca')) {\n      api.createRecord('6cba3aca', component.options)\n    } else {\n      api.reload('6cba3aca', component.options)\n    }\n    module.hot.accept(\"./UserList.vue?vue&type=template&id=6cba3aca&\", function () {\n      api.rerender('6cba3aca', {\n        render: render,\n        staticRenderFns: staticRenderFns\n      })\n    })\n  }\n}\ncomponent.options.__file = \"apps/settings/src/components/UserList.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=script&lang=js&\"","export * from \"-!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=template&id=6cba3aca&\"","import { render, staticRenderFns } from \"./UserRow.vue?vue&type=template&id=77960baa&scoped=true&\"\nimport script from \"./UserRow.vue?vue&type=script&lang=js&\"\nexport * from \"./UserRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"77960baa\",\n  null\n  \n)\n\n/* hot reload */\nif (module.hot) {\n  var api = require(\"/home/roeland/nc/server/node_modules/vue-hot-reload-api/dist/index.js\")\n  api.install(require('vue'))\n  if (api.compatible) {\n    module.hot.accept()\n    if (!api.isRecorded('77960baa')) {\n      api.createRecord('77960baa', component.options)\n    } else {\n      api.reload('77960baa', component.options)\n    }\n    module.hot.accept(\"./UserRow.vue?vue&type=template&id=77960baa&scoped=true&\", function () {\n      api.rerender('77960baa', {\n        render: render,\n        staticRenderFns: staticRenderFns\n      })\n    })\n  }\n}\ncomponent.options.__file = \"apps/settings/src/components/UserList/UserRow.vue\"\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/vue-style-loader/index.js!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&\"; export default mod; export * from \"-!../../../../../node_modules/vue-style-loader/index.js!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&\"","export * from \"-!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=template&id=77960baa&scoped=true&\"","import { render, staticRenderFns } from \"./UserRowSimple.vue?vue&type=template&id=ff154a08&scoped=true&\"\nimport script from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\nexport * from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"ff154a08\",\n  null\n  \n)\n\n/* hot reload */\nif (module.hot) {\n  var api = require(\"/home/roeland/nc/server/node_modules/vue-hot-reload-api/dist/index.js\")\n  api.install(require('vue'))\n  if (api.compatible) {\n    module.hot.accept()\n    if (!api.isRecorded('ff154a08')) {\n      api.createRecord('ff154a08', component.options)\n    } else {\n      api.reload('ff154a08', component.options)\n    }\n    module.hot.accept(\"./UserRowSimple.vue?vue&type=template&id=ff154a08&scoped=true&\", function () {\n      api.rerender('ff154a08', {\n        render: render,\n        staticRenderFns: staticRenderFns\n      })\n    })\n  }\n}\ncomponent.options.__file = \"apps/settings/src/components/UserList/UserRowSimple.vue\"\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/vue-style-loader/index.js!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../../node_modules/vue-style-loader/index.js!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&scoped=true&lang=css&\"","export * from \"-!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=template&id=ff154a08&scoped=true&\"","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nexport default {\n  props: {\n    user: {\n      type: Object,\n      required: true\n    },\n    settings: {\n      type: Object,\n      default: function _default() {\n        return {};\n      }\n    },\n    groups: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    subAdminsGroups: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    quotaOptions: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    showConfig: {\n      type: Object,\n      default: function _default() {\n        return {};\n      }\n    },\n    languages: {\n      type: Array,\n      required: true\n    },\n    externalActions: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    }\n  },\n  computed: {\n    /* GROUPS MANAGEMENT */\n    userGroups: function userGroups() {\n      var _this = this;\n\n      var userGroups = this.groups.filter(function (group) {\n        return _this.user.groups.includes(group.id);\n      });\n      return userGroups;\n    },\n    userSubAdminsGroups: function userSubAdminsGroups() {\n      var _this2 = this;\n\n      var userSubAdminsGroups = this.subAdminsGroups.filter(function (group) {\n        return _this2.user.subadmin.includes(group.id);\n      });\n      return userSubAdminsGroups;\n    },\n    availableGroups: function availableGroups() {\n      var _this3 = this;\n\n      return this.groups.map(function (group) {\n        // clone object because we don't want\n        // to edit the original groups\n        var groupClone = Object.assign({}, group); // two settings here:\n        // 1. user NOT in group but no permission to add\n        // 2. user is in group but no permission to remove\n\n        groupClone.$isDisabled = group.canAdd === false && !_this3.user.groups.includes(group.id) || group.canRemove === false && _this3.user.groups.includes(group.id);\n        return groupClone;\n      });\n    },\n\n    /* QUOTA MANAGEMENT */\n    usedSpace: function usedSpace() {\n      if (this.user.quota.used) {\n        return t('settings', '{size} used', {\n          size: OC.Util.humanFileSize(this.user.quota.used)\n        });\n      }\n\n      return t('settings', '{size} used', {\n        size: OC.Util.humanFileSize(0)\n      });\n    },\n    usedQuota: function usedQuota() {\n      var quota = this.user.quota.quota;\n\n      if (quota > 0) {\n        quota = Math.min(100, Math.round(this.user.quota.used / quota * 100));\n      } else {\n        var usedInGB = this.user.quota.used / (10 * Math.pow(2, 30)); // asymptotic curve approaching 50% at 10GB to visualize used stace with infinite quota\n\n        quota = 95 * (1 - 1 / (usedInGB + 1));\n      }\n\n      return isNaN(quota) ? 0 : quota;\n    },\n    // Mapping saved values to objects\n    userQuota: function userQuota() {\n      if (this.user.quota.quota >= 0) {\n        // if value is valid, let's map the quotaOptions or return custom quota\n        var humanQuota = OC.Util.humanFileSize(this.user.quota.quota);\n        var userQuota = this.quotaOptions.find(function (quota) {\n          return quota.id === humanQuota;\n        });\n        return userQuota || {\n          id: humanQuota,\n          label: humanQuota\n        };\n      } else if (this.user.quota.quota === 'default') {\n        // default quota is replaced by the proper value on load\n        return this.quotaOptions[0];\n      }\n\n      return this.quotaOptions[1]; // unlimited\n    },\n\n    /* PASSWORD POLICY? */\n    minPasswordLength: function minPasswordLength() {\n      return this.$store.getters.getPasswordPolicyMinLength;\n    },\n\n    /* LANGUAGE */\n    userLanguage: function userLanguage() {\n      var _this4 = this;\n\n      var availableLanguages = this.languages[0].languages.concat(this.languages[1].languages);\n      var userLang = availableLanguages.find(function (lang) {\n        return lang.code === _this4.user.language;\n      });\n\n      if (_typeof(userLang) !== 'object' && this.user.language !== '') {\n        return {\n          code: this.user.language,\n          name: this.user.language\n        };\n      } else if (this.user.language === '') {\n        return false;\n      }\n\n      return userLang;\n    },\n\n    /* LAST LOGIN */\n    userLastLoginTooltip: function userLastLoginTooltip() {\n      if (this.user.lastLogin > 0) {\n        return OC.Util.formatDate(this.user.lastLogin);\n      }\n\n      return '';\n    },\n    userLastLogin: function userLastLogin() {\n      if (this.user.lastLogin > 0) {\n        return OC.Util.relativeModifiedDate(this.user.lastLogin);\n      }\n\n      return t('settings', 'Never');\n    }\n  },\n  methods: {\n    /**\n     * Generate avatar url\n     *\n     * @param {string} user The user name\n     * @param {int} size Size integer, default 32\n     * @returns {string}\n     */\n    generateAvatar: function generateAvatar(user) {\n      var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 32;\n      return OC.generateUrl('/avatar/{user}/{size}?v={version}', {\n        user: user,\n        size: size,\n        version: oc_userconfig.avatar.version\n      });\n    }\n  }\n};","import { render, staticRenderFns } from \"./Users.vue?vue&type=template&id=889b7562&\"\nimport script from \"./Users.vue?vue&type=script&lang=js&\"\nexport * from \"./Users.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (module.hot) {\n  var api = require(\"/home/roeland/nc/server/node_modules/vue-hot-reload-api/dist/index.js\")\n  api.install(require('vue'))\n  if (api.compatible) {\n    module.hot.accept()\n    if (!api.isRecorded('889b7562')) {\n      api.createRecord('889b7562', component.options)\n    } else {\n      api.reload('889b7562', component.options)\n    }\n    module.hot.accept(\"./Users.vue?vue&type=template&id=889b7562&\", function () {\n      api.rerender('889b7562', {\n        render: render,\n        staticRenderFns: staticRenderFns\n      })\n    })\n  }\n}\ncomponent.options.__file = \"apps/settings/src/views/Users.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=script&lang=js&\"","export * from \"-!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=template&id=889b7562&\"","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport userRow from './UserList/UserRow';\nimport { Multiselect, Actions, ActionButton } from 'nextcloud-vue';\nimport InfiniteLoading from 'vue-infinite-loading';\nimport Vue from 'vue';\nvar unlimitedQuota = {\n  id: 'none',\n  label: t('settings', 'Unlimited')\n};\nvar defaultQuota = {\n  id: 'default',\n  label: t('settings', 'Default quota')\n};\nvar newUser = {\n  id: '',\n  displayName: '',\n  password: '',\n  mailAddress: '',\n  groups: [],\n  subAdminsGroups: [],\n  quota: defaultQuota,\n  language: {\n    code: 'en',\n    name: t('settings', 'Default language')\n  }\n};\nexport default {\n  name: 'UserList',\n  components: {\n    userRow: userRow,\n    Multiselect: Multiselect,\n    InfiniteLoading: InfiniteLoading,\n    Actions: Actions,\n    ActionButton: ActionButton\n  },\n  props: {\n    users: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    showConfig: {\n      type: Object,\n      required: true\n    },\n    selectedGroup: {\n      type: String,\n      default: null\n    },\n    externalActions: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    }\n  },\n  data: function data() {\n    return {\n      unlimitedQuota: unlimitedQuota,\n      defaultQuota: defaultQuota,\n      loading: {\n        all: false,\n        groups: false\n      },\n      scrolled: false,\n      searchQuery: '',\n      newUser: Object.assign({}, newUser)\n    };\n  },\n  computed: {\n    settings: function settings() {\n      return this.$store.getters.getServerData;\n    },\n    filteredUsers: function filteredUsers() {\n      if (this.selectedGroup === 'disabled') {\n        return this.users.filter(function (user) {\n          return user.enabled === false;\n        });\n      }\n\n      if (!this.settings.isAdmin) {\n        // we don't want subadmins to edit themselves\n        return this.users.filter(function (user) {\n          return user.enabled !== false && user.id !== OC.getCurrentUser().uid;\n        });\n      }\n\n      return this.users.filter(function (user) {\n        return user.enabled !== false;\n      });\n    },\n    groups: function groups() {\n      // data provided php side + remove the disabled group\n      return this.$store.getters.getGroups.filter(function (group) {\n        return group.id !== 'disabled';\n      }).sort(function (a, b) {\n        return a.name.localeCompare(b.name);\n      });\n    },\n    canAddGroups: function canAddGroups() {\n      // disabled if no permission to add new users to group\n      return this.groups.map(function (group) {\n        // clone object because we don't want\n        // to edit the original groups\n        group = Object.assign({}, group);\n        group.$isDisabled = group.canAdd === false;\n        return group;\n      });\n    },\n    subAdminsGroups: function subAdminsGroups() {\n      // data provided php side\n      return this.$store.getters.getSubadminGroups;\n    },\n    quotaOptions: function quotaOptions() {\n      // convert the preset array into objects\n      var quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {\n        return acc.concat({\n          id: cur,\n          label: cur\n        });\n      }, []); // add default presets\n\n      quotaPreset.unshift(this.unlimitedQuota);\n      quotaPreset.unshift(this.defaultQuota);\n      return quotaPreset;\n    },\n    minPasswordLength: function minPasswordLength() {\n      return this.$store.getters.getPasswordPolicyMinLength;\n    },\n    usersOffset: function usersOffset() {\n      return this.$store.getters.getUsersOffset;\n    },\n    usersLimit: function usersLimit() {\n      return this.$store.getters.getUsersLimit;\n    },\n    usersCount: function usersCount() {\n      return this.users.length;\n    },\n\n    /* LANGUAGES */\n    languages: function languages() {\n      return [{\n        label: t('settings', 'Common languages'),\n        languages: this.settings.languages.commonlanguages\n      }, {\n        label: t('settings', 'All languages'),\n        languages: this.settings.languages.languages\n      }];\n    }\n  },\n  watch: {\n    // watch url change and group select\n    selectedGroup: function selectedGroup(val, old) {\n      // if selected is the disabled group but it's empty\n      this.redirectIfDisabled();\n      this.$store.commit('resetUsers');\n      this.$refs.infiniteLoading.stateChanger.reset();\n      this.setNewUserDefaultGroup(val);\n    },\n    // make sure the infiniteLoading state is changed if we manually\n    // add/remove data from the store\n    usersCount: function usersCount(val, old) {\n      // deleting the last user, reset the list\n      if (val === 0 && old === 1) {\n        this.$refs.infiniteLoading.stateChanger.reset(); // adding the first user, warn the infiniteLoader that\n        // the list is not empty anymore (we don't fetch the newly\n        // added user as we already have all the info we need)\n      } else if (val === 1 && old === 0) {\n        this.$refs.infiniteLoading.stateChanger.loaded();\n      }\n    }\n  },\n  mounted: function mounted() {\n    if (!this.settings.canChangePassword) {\n      OC.Notification.showTemporary(t('settings', 'Password change is disabled because the master key is disabled'));\n    }\n    /**\n     * Reset and init new user form\n     */\n\n\n    this.resetForm();\n    /**\n     * Register search\n     */\n\n    this.userSearch = new OCA.Search(this.search, this.resetSearch);\n    /**\n     * If disabled group but empty, redirect\n     */\n\n    this.redirectIfDisabled();\n  },\n  methods: {\n    onScroll: function onScroll(event) {\n      this.scrolled = event.target.scrollTo > 0;\n    },\n\n    /**\n     * Validate quota string to make sure it's a valid human file size\n     *\n     * @param {string} quota Quota in readable format '5 GB'\n     * @returns {Object}\n     */\n    validateQuota: function validateQuota(quota) {\n      // only used for new presets sent through @Tag\n      var validQuota = OC.Util.computerFileSize(quota);\n\n      if (validQuota !== null && validQuota >= 0) {\n        // unify format output\n        quota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota));\n        this.newUser.quota = {\n          id: quota,\n          label: quota\n        };\n        return this.newUser.quota;\n      } // Default is unlimited\n\n\n      this.newUser.quota = this.quotaOptions[0];\n      return this.quotaOptions[0];\n    },\n    infiniteHandler: function infiniteHandler($state) {\n      this.$store.dispatch('getUsers', {\n        offset: this.usersOffset,\n        limit: this.usersLimit,\n        group: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',\n        search: this.searchQuery\n      }).then(function (response) {\n        response ? $state.loaded() : $state.complete();\n      });\n    },\n\n    /* SEARCH */\n    search: function search(query) {\n      this.searchQuery = query;\n      this.$store.commit('resetUsers');\n      this.$refs.infiniteLoading.stateChanger.reset();\n    },\n    resetSearch: function resetSearch() {\n      this.search('');\n    },\n    resetForm: function resetForm() {\n      // revert form to original state\n      this.newUser = Object.assign({}, newUser);\n      /**\n       * Init default language from server data. The use of this.settings\n       * requires a computed variable, which break the v-model binding of the form,\n       * this is a much easier solution than getter and setter on a computed var\n       */\n\n      if (this.settings.defaultLanguage) {\n        Vue.set(this.newUser.language, 'code', this.settings.defaultLanguage);\n      }\n      /**\n       * In case the user directly loaded the user list within a group\n       * the watch won't be triggered. We need to initialize it.\n       */\n\n\n      this.setNewUserDefaultGroup(this.selectedGroup);\n      this.loading.all = false;\n    },\n    createUser: function createUser() {\n      var _this = this;\n\n      this.loading.all = true;\n      this.$store.dispatch('addUser', {\n        userid: this.newUser.id,\n        password: this.newUser.password,\n        displayName: this.newUser.displayName,\n        email: this.newUser.mailAddress,\n        groups: this.newUser.groups.map(function (group) {\n          return group.id;\n        }),\n        subadmin: this.newUser.subAdminsGroups.map(function (group) {\n          return group.id;\n        }),\n        quota: this.newUser.quota.id,\n        language: this.newUser.language.code\n      }).then(function () {\n        _this.resetForm();\n\n        _this.$refs.newusername.focus();\n      }).catch(function (error) {\n        _this.loading.all = false;\n\n        if (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n          var statuscode = error.response.data.ocs.meta.statuscode;\n\n          if (statuscode === 102) {\n            // wrong username\n            _this.$refs.newusername.focus();\n          } else if (statuscode === 107) {\n            // wrong password\n            _this.$refs.newuserpassword.focus();\n          }\n        }\n      });\n    },\n    setNewUserDefaultGroup: function setNewUserDefaultGroup(value) {\n      if (value && value.length > 0) {\n        // setting new user default group to the current selected one\n        var currentGroup = this.groups.find(function (group) {\n          return group.id === value;\n        });\n\n        if (currentGroup) {\n          this.newUser.groups = [currentGroup];\n          return;\n        }\n      } // fallback, empty selected group\n\n\n      this.newUser.groups = [];\n    },\n\n    /**\n     * Create a new group\n     *\n     * @param {string} gid Group id\n     * @returns {Promise}\n     */\n    createGroup: function createGroup(gid) {\n      var _this2 = this;\n\n      this.loading.groups = true;\n      this.$store.dispatch('addGroup', gid).then(function (group) {\n        _this2.newUser.groups.push(_this2.groups.find(function (group) {\n          return group.id === gid;\n        }));\n\n        _this2.loading.groups = false;\n      }).catch(function () {\n        _this2.loading.groups = false;\n      });\n      return this.$store.getters.getGroups[this.groups.length];\n    },\n\n    /**\n     * If the selected group is the disabled group but the count is 0\n     * redirect to the all users page.\n     * * we only check for 0 because we don't have the count on ldap\n     * * and we therefore set the usercount to -1 in this specific case\n     */\n    redirectIfDisabled: function redirectIfDisabled() {\n      var allGroups = this.$store.getters.getGroups;\n\n      if (this.selectedGroup === 'disabled' && allGroups.findIndex(function (group) {\n        return group.id === 'disabled' && group.usercount === 0;\n      }) > -1) {\n        // disabled group is empty, redirection to all users\n        this.$router.push({\n          name: 'users'\n        });\n        this.$refs.infiniteLoading.stateChanger.reset();\n      }\n    },\n    onClose: function onClose() {\n      this.showConfig.showNewUserForm = false;\n    }\n  }\n};","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport ClickOutside from 'vue-click-outside';\nimport Vue from 'vue';\nimport VTooltip from 'v-tooltip';\nimport { PopoverMenu, Multiselect, Actions, ActionButton } from 'nextcloud-vue';\nimport UserRowSimple from './UserRowSimple';\nimport UserRowMixin from '../../mixins/UserRowMixin';\nVue.use(VTooltip);\nexport default {\n  name: 'UserRow',\n  components: {\n    UserRowSimple: UserRowSimple,\n    PopoverMenu: PopoverMenu,\n    Actions: Actions,\n    ActionButton: ActionButton,\n    Multiselect: Multiselect\n  },\n  directives: {\n    ClickOutside: ClickOutside\n  },\n  mixins: [UserRowMixin],\n  props: {\n    user: {\n      type: Object,\n      required: true\n    },\n    settings: {\n      type: Object,\n      default: function _default() {\n        return {};\n      }\n    },\n    groups: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    subAdminsGroups: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    quotaOptions: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    showConfig: {\n      type: Object,\n      default: function _default() {\n        return {};\n      }\n    },\n    languages: {\n      type: Array,\n      required: true\n    },\n    externalActions: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    }\n  },\n  data: function data() {\n    return {\n      rand: parseInt(Math.random() * 1000),\n      openedMenu: false,\n      feedbackMessage: '',\n      editing: false,\n      loading: {\n        all: false,\n        displayName: false,\n        password: false,\n        mailAddress: false,\n        groups: false,\n        subadmins: false,\n        quota: false,\n        delete: false,\n        disable: false,\n        languages: false,\n        wipe: false\n      }\n    };\n  },\n  computed: {\n    /* USER POPOVERMENU ACTIONS */\n    userActions: function userActions() {\n      var actions = [{\n        icon: 'icon-delete',\n        text: t('settings', 'Delete user'),\n        action: this.deleteUser\n      }, {\n        icon: 'icon-delete',\n        text: t('settings', 'Wipe all devices'),\n        action: this.wipeUserDevices\n      }, {\n        icon: this.user.enabled ? 'icon-close' : 'icon-add',\n        text: this.user.enabled ? t('settings', 'Disable user') : t('settings', 'Enable user'),\n        action: this.enableDisableUser\n      }];\n\n      if (this.user.email !== null && this.user.email !== '') {\n        actions.push({\n          icon: 'icon-mail',\n          text: t('settings', 'Resend welcome email'),\n          action: this.sendWelcomeMail\n        });\n      }\n\n      return actions.concat(this.externalActions);\n    }\n  },\n  methods: {\n    /* MENU HANDLING */\n    toggleMenu: function toggleMenu() {\n      this.openedMenu = !this.openedMenu;\n    },\n    hideMenu: function hideMenu() {\n      this.openedMenu = false;\n    },\n    wipeUserDevices: function wipeUserDevices() {\n      var _this = this;\n\n      var userid = this.user.id;\n      OC.dialogs.confirmDestructive(t('settings', 'In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet.', {\n        userid: userid\n      }), t('settings', 'Remote wipe of devices'), {\n        type: OC.dialogs.YES_NO_BUTTONS,\n        confirm: t('settings', 'Wipe {userid}\\'s devices', {\n          userid: userid\n        }),\n        confirmClasses: 'error',\n        cancel: t('settings', 'Cancel')\n      }, function (result) {\n        if (result) {\n          _this.loading.wipe = true;\n          _this.loading.all = true;\n\n          _this.$store.dispatch('wipeUserDevices', userid).then(function () {\n            _this.loading.wipe = false;\n            _this.loading.all = false;\n          });\n        }\n      }, true);\n    },\n    deleteUser: function deleteUser() {\n      var _this2 = this;\n\n      var userid = this.user.id;\n      OC.dialogs.confirmDestructive(t('settings', 'Fully delete {userid}\\'s account including all their personal files, app data, etc.', {\n        userid: userid\n      }), t('settings', 'Account deletion'), {\n        type: OC.dialogs.YES_NO_BUTTONS,\n        confirm: t('settings', 'Delete {userid}\\'s account', {\n          userid: userid\n        }),\n        confirmClasses: 'error',\n        cancel: t('settings', 'Cancel')\n      }, function (result) {\n        if (result) {\n          _this2.loading.delete = true;\n          _this2.loading.all = true;\n          return _this2.$store.dispatch('deleteUser', userid).then(function () {\n            _this2.loading.delete = false;\n            _this2.loading.all = false;\n          });\n        }\n      }, true);\n    },\n    enableDisableUser: function enableDisableUser() {\n      var _this3 = this;\n\n      this.loading.delete = true;\n      this.loading.all = true;\n      var userid = this.user.id;\n      var enabled = !this.user.enabled;\n      return this.$store.dispatch('enableDisableUser', {\n        userid: userid,\n        enabled: enabled\n      }).then(function () {\n        _this3.loading.delete = false;\n        _this3.loading.all = false;\n      });\n    },\n\n    /**\n    \t * Set user displayName\n    \t *\n    \t * @param {string} displayName The display name\n    \t */\n    updateDisplayName: function updateDisplayName() {\n      var _this4 = this;\n\n      var displayName = this.$refs.displayName.value;\n      this.loading.displayName = true;\n      this.$store.dispatch('setUserData', {\n        userid: this.user.id,\n        key: 'displayname',\n        value: displayName\n      }).then(function () {\n        _this4.loading.displayName = false;\n        _this4.$refs.displayName.value = displayName;\n      });\n    },\n\n    /**\n    \t * Set user password\n    \t *\n    \t * @param {string} password The email adress\n    \t */\n    updatePassword: function updatePassword() {\n      var _this5 = this;\n\n      var password = this.$refs.password.value;\n      this.loading.password = true;\n      this.$store.dispatch('setUserData', {\n        userid: this.user.id,\n        key: 'password',\n        value: password\n      }).then(function () {\n        _this5.loading.password = false;\n        _this5.$refs.password.value = ''; // empty & show placeholder\n      });\n    },\n\n    /**\n    \t * Set user mailAddress\n    \t *\n    \t * @param {string} mailAddress The email adress\n    \t */\n    updateEmail: function updateEmail() {\n      var _this6 = this;\n\n      var mailAddress = this.$refs.mailAddress.value;\n      this.loading.mailAddress = true;\n      this.$store.dispatch('setUserData', {\n        userid: this.user.id,\n        key: 'email',\n        value: mailAddress\n      }).then(function () {\n        _this6.loading.mailAddress = false;\n        _this6.$refs.mailAddress.value = mailAddress;\n      });\n    },\n\n    /**\n    \t * Create a new group and add user to it\n    \t *\n    \t * @param {string} gid Group id\n    \t */\n    createGroup: function () {\n      var _createGroup = _asyncToGenerator(\n      /*#__PURE__*/\n      regeneratorRuntime.mark(function _callee(gid) {\n        var userid;\n        return regeneratorRuntime.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                this.loading = {\n                  groups: true,\n                  subadmins: true\n                };\n                _context.prev = 1;\n                _context.next = 4;\n                return this.$store.dispatch('addGroup', gid);\n\n              case 4:\n                userid = this.user.id;\n                _context.next = 7;\n                return this.$store.dispatch('addUserGroup', {\n                  userid: userid,\n                  gid: gid\n                });\n\n              case 7:\n                _context.next = 12;\n                break;\n\n              case 9:\n                _context.prev = 9;\n                _context.t0 = _context[\"catch\"](1);\n                console.error(_context.t0);\n\n              case 12:\n                _context.prev = 12;\n                this.loading = {\n                  groups: false,\n                  subadmins: false\n                };\n                return _context.finish(12);\n\n              case 15:\n                return _context.abrupt(\"return\", this.$store.getters.getGroups[this.groups.length]);\n\n              case 16:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee, this, [[1, 9, 12, 15]]);\n      }));\n\n      function createGroup(_x) {\n        return _createGroup.apply(this, arguments);\n      }\n\n      return createGroup;\n    }(),\n\n    /**\n    \t * Add user to group\n    \t *\n    \t * @param {object} group Group object\n    \t */\n    addUserGroup: function () {\n      var _addUserGroup = _asyncToGenerator(\n      /*#__PURE__*/\n      regeneratorRuntime.mark(function _callee2(group) {\n        var userid, gid;\n        return regeneratorRuntime.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                if (!(group.canAdd === false)) {\n                  _context2.next = 2;\n                  break;\n                }\n\n                return _context2.abrupt(\"return\", false);\n\n              case 2:\n                this.loading.groups = true;\n                userid = this.user.id;\n                gid = group.id;\n                _context2.prev = 5;\n                _context2.next = 8;\n                return this.$store.dispatch('addUserGroup', {\n                  userid: userid,\n                  gid: gid\n                });\n\n              case 8:\n                _context2.next = 13;\n                break;\n\n              case 10:\n                _context2.prev = 10;\n                _context2.t0 = _context2[\"catch\"](5);\n                console.error(_context2.t0);\n\n              case 13:\n                _context2.prev = 13;\n                this.loading.groups = false;\n                return _context2.finish(13);\n\n              case 16:\n              case \"end\":\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this, [[5, 10, 13, 16]]);\n      }));\n\n      function addUserGroup(_x2) {\n        return _addUserGroup.apply(this, arguments);\n      }\n\n      return addUserGroup;\n    }(),\n\n    /**\n    \t * Remove user from group\n    \t *\n    \t * @param {object} group Group object\n    \t */\n    removeUserGroup: function () {\n      var _removeUserGroup = _asyncToGenerator(\n      /*#__PURE__*/\n      regeneratorRuntime.mark(function _callee3(group) {\n        var userid, gid;\n        return regeneratorRuntime.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                if (!(group.canRemove === false)) {\n                  _context3.next = 2;\n                  break;\n                }\n\n                return _context3.abrupt(\"return\", false);\n\n              case 2:\n                this.loading.groups = true;\n                userid = this.user.id;\n                gid = group.id;\n                _context3.prev = 5;\n                _context3.next = 8;\n                return this.$store.dispatch('removeUserGroup', {\n                  userid: userid,\n                  gid: gid\n                });\n\n              case 8:\n                this.loading.groups = false; // remove user from current list if current list is the removed group\n\n                if (this.$route.params.selectedGroup === gid) {\n                  this.$store.commit('deleteUser', userid);\n                }\n\n                _context3.next = 15;\n                break;\n\n              case 12:\n                _context3.prev = 12;\n                _context3.t0 = _context3[\"catch\"](5);\n                this.loading.groups = false;\n\n              case 15:\n              case \"end\":\n                return _context3.stop();\n            }\n          }\n        }, _callee3, this, [[5, 12]]);\n      }));\n\n      function removeUserGroup(_x3) {\n        return _removeUserGroup.apply(this, arguments);\n      }\n\n      return removeUserGroup;\n    }(),\n\n    /**\n    \t * Add user to group\n    \t *\n    \t * @param {object} group Group object\n    \t */\n    addUserSubAdmin: function () {\n      var _addUserSubAdmin = _asyncToGenerator(\n      /*#__PURE__*/\n      regeneratorRuntime.mark(function _callee4(group) {\n        var userid, gid;\n        return regeneratorRuntime.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                this.loading.subadmins = true;\n                userid = this.user.id;\n                gid = group.id;\n                _context4.prev = 3;\n                _context4.next = 6;\n                return this.$store.dispatch('addUserSubAdmin', {\n                  userid: userid,\n                  gid: gid\n                });\n\n              case 6:\n                this.loading.subadmins = false;\n                _context4.next = 12;\n                break;\n\n              case 9:\n                _context4.prev = 9;\n                _context4.t0 = _context4[\"catch\"](3);\n                console.error(_context4.t0);\n\n              case 12:\n              case \"end\":\n                return _context4.stop();\n            }\n          }\n        }, _callee4, this, [[3, 9]]);\n      }));\n\n      function addUserSubAdmin(_x4) {\n        return _addUserSubAdmin.apply(this, arguments);\n      }\n\n      return addUserSubAdmin;\n    }(),\n\n    /**\n    \t * Remove user from group\n    \t *\n    \t * @param {object} group Group object\n    \t */\n    removeUserSubAdmin: function () {\n      var _removeUserSubAdmin = _asyncToGenerator(\n      /*#__PURE__*/\n      regeneratorRuntime.mark(function _callee5(group) {\n        var userid, gid;\n        return regeneratorRuntime.wrap(function _callee5$(_context5) {\n          while (1) {\n            switch (_context5.prev = _context5.next) {\n              case 0:\n                this.loading.subadmins = true;\n                userid = this.user.id;\n                gid = group.id;\n                _context5.prev = 3;\n                _context5.next = 6;\n                return this.$store.dispatch('removeUserSubAdmin', {\n                  userid: userid,\n                  gid: gid\n                });\n\n              case 6:\n                _context5.next = 11;\n                break;\n\n              case 8:\n                _context5.prev = 8;\n                _context5.t0 = _context5[\"catch\"](3);\n                console.error(_context5.t0);\n\n              case 11:\n                _context5.prev = 11;\n                this.loading.subadmins = false;\n                return _context5.finish(11);\n\n              case 14:\n              case \"end\":\n                return _context5.stop();\n            }\n          }\n        }, _callee5, this, [[3, 8, 11, 14]]);\n      }));\n\n      function removeUserSubAdmin(_x5) {\n        return _removeUserSubAdmin.apply(this, arguments);\n      }\n\n      return removeUserSubAdmin;\n    }(),\n\n    /**\n    \t * Dispatch quota set request\n    \t *\n    \t * @param {string|Object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n    \t * @returns {string}\n    \t */\n    setUserQuota: function () {\n      var _setUserQuota = _asyncToGenerator(\n      /*#__PURE__*/\n      regeneratorRuntime.mark(function _callee6() {\n        var quota,\n            _args6 = arguments;\n        return regeneratorRuntime.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                quota = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : 'none';\n                this.loading.quota = true; // ensure we only send the preset id\n\n                quota = quota.id ? quota.id : quota;\n                _context6.prev = 3;\n                _context6.next = 6;\n                return this.$store.dispatch('setUserData', {\n                  userid: this.user.id,\n                  key: 'quota',\n                  value: quota\n                });\n\n              case 6:\n                _context6.next = 11;\n                break;\n\n              case 8:\n                _context6.prev = 8;\n                _context6.t0 = _context6[\"catch\"](3);\n                console.error(_context6.t0);\n\n              case 11:\n                _context6.prev = 11;\n                this.loading.quota = false;\n                return _context6.finish(11);\n\n              case 14:\n                return _context6.abrupt(\"return\", quota);\n\n              case 15:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6, this, [[3, 8, 11, 14]]);\n      }));\n\n      function setUserQuota() {\n        return _setUserQuota.apply(this, arguments);\n      }\n\n      return setUserQuota;\n    }(),\n\n    /**\n    \t * Validate quota string to make sure it's a valid human file size\n    \t *\n    \t * @param {string} quota Quota in readable format '5 GB'\n    \t * @returns {Promise|boolean}\n    \t */\n    validateQuota: function validateQuota(quota) {\n      // only used for new presets sent through @Tag\n      var validQuota = OC.Util.computerFileSize(quota);\n\n      if (validQuota !== null && validQuota >= 0) {\n        // unify format output\n        return this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));\n      } // if no valid do not change\n\n\n      return false;\n    },\n\n    /**\n    \t * Dispatch language set request\n    \t *\n    \t * @param {Object} lang language object {code:'en', name:'English'}\n    \t * @returns {Object}\n    \t */\n    setUserLanguage: function () {\n      var _setUserLanguage = _asyncToGenerator(\n      /*#__PURE__*/\n      regeneratorRuntime.mark(function _callee7(lang) {\n        return regeneratorRuntime.wrap(function _callee7$(_context7) {\n          while (1) {\n            switch (_context7.prev = _context7.next) {\n              case 0:\n                this.loading.languages = true; // ensure we only send the preset id\n\n                _context7.prev = 1;\n                _context7.next = 4;\n                return this.$store.dispatch('setUserData', {\n                  userid: this.user.id,\n                  key: 'language',\n                  value: lang.code\n                });\n\n              case 4:\n                _context7.next = 9;\n                break;\n\n              case 6:\n                _context7.prev = 6;\n                _context7.t0 = _context7[\"catch\"](1);\n                console.error(_context7.t0);\n\n              case 9:\n                _context7.prev = 9;\n                this.loading.languages = false;\n                return _context7.finish(9);\n\n              case 12:\n                return _context7.abrupt(\"return\", lang);\n\n              case 13:\n              case \"end\":\n                return _context7.stop();\n            }\n          }\n        }, _callee7, this, [[1, 6, 9, 12]]);\n      }));\n\n      function setUserLanguage(_x6) {\n        return _setUserLanguage.apply(this, arguments);\n      }\n\n      return setUserLanguage;\n    }(),\n\n    /**\n    \t * Dispatch new welcome mail request\n    \t */\n    sendWelcomeMail: function sendWelcomeMail() {\n      var _this7 = this;\n\n      this.loading.all = true;\n      this.$store.dispatch('sendWelcomeMail', this.user.id).then(function (success) {\n        if (success) {\n          // Show feedback to indicate the success\n          _this7.feedbackMessage = t('setting', 'Welcome mail sent!');\n          setTimeout(function () {\n            _this7.feedbackMessage = '';\n          }, 2000);\n        }\n\n        _this7.loading.all = false;\n      });\n    }\n  }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport { PopoverMenu, Actions, ActionButton } from 'nextcloud-vue';\nimport ClickOutside from 'vue-click-outside';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport UserRowMixin from '../../mixins/UserRowMixin';\nexport default {\n  name: 'UserRowSimple',\n  components: {\n    PopoverMenu: PopoverMenu,\n    ActionButton: ActionButton,\n    Actions: Actions\n  },\n  directives: {\n    ClickOutside: ClickOutside\n  },\n  mixins: [UserRowMixin],\n  props: {\n    user: {\n      type: Object,\n      required: true\n    },\n    loading: {\n      type: Object,\n      required: true\n    },\n    showConfig: {\n      type: Object,\n      required: true\n    },\n    userActions: {\n      type: Array,\n      required: true\n    },\n    openedMenu: {\n      type: Boolean,\n      required: true\n    },\n    feedbackMessage: {\n      type: String,\n      required: true\n    },\n    subAdminsGroups: {\n      type: Array,\n      required: true\n    },\n    settings: {\n      type: Object,\n      required: true\n    }\n  },\n  computed: {\n    userGroupsLabels: function userGroupsLabels() {\n      return this.userGroups.map(function (group) {\n        return group.name;\n      }).join(', ');\n    },\n    userSubAdminsGroupsLabels: function userSubAdminsGroupsLabels() {\n      return this.userSubAdminsGroups.map(function (group) {\n        return group.name;\n      }).join(', ');\n    },\n    usedSpace: function usedSpace() {\n      if (this.user.quota.used) {\n        return t('settings', '{size} used', {\n          size: OC.Util.humanFileSize(this.user.quota.used)\n        });\n      }\n\n      return t('settings', '{size} used', {\n        size: OC.Util.humanFileSize(0)\n      });\n    },\n    canEdit: function canEdit() {\n      return getCurrentUser().uid !== this.user.id && this.user.id !== 'admin';\n    }\n  },\n  methods: {\n    hideMenu: function hideMenu() {\n      this.$emit('hideMenu');\n    },\n    toggleEdit: function toggleEdit() {\n      this.$emit('update:editing', true);\n    }\n  }\n};","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport Vue from 'vue';\nimport VueLocalStorage from 'vue-localstorage';\nimport { AppContent, AppNavigation, AppNavigationItem, AppNavigationNew, AppNavigationSettings, Content, Multiselect } from 'nextcloud-vue';\nimport UserList from '../components/UserList';\nVue.use(VueLocalStorage);\nexport default {\n  name: 'Users',\n  components: {\n    AppContent: AppContent,\n    AppNavigation: AppNavigation,\n    AppNavigationItem: AppNavigationItem,\n    AppNavigationNew: AppNavigationNew,\n    AppNavigationSettings: AppNavigationSettings,\n    Content: Content,\n    UserList: UserList,\n    Multiselect: Multiselect\n  },\n  props: {\n    selectedGroup: {\n      type: String,\n      default: null\n    }\n  },\n  data: function data() {\n    return {\n      // default quota is set to unlimited\n      unlimitedQuota: {\n        id: 'none',\n        label: t('settings', 'Unlimited')\n      },\n      // temporary value used for multiselect change\n      selectedQuota: false,\n      externalActions: [],\n      showAddGroupEntry: false,\n      loadingAddGroup: false,\n      showConfig: {\n        showStoragePath: false,\n        showUserBackend: false,\n        showLastLogin: false,\n        showNewUserForm: false,\n        showLanguages: false\n      }\n    };\n  },\n  computed: {\n    users: function users() {\n      return this.$store.getters.getUsers;\n    },\n    usersOffset: function usersOffset() {\n      return this.$store.getters.getUsersOffset;\n    },\n    usersLimit: function usersLimit() {\n      return this.$store.getters.getUsersLimit;\n    },\n    // Local settings\n    showLanguages: {\n      get: function get() {\n        return this.getLocalstorage('showLanguages');\n      },\n      set: function set(status) {\n        this.setLocalStorage('showLanguages', status);\n      }\n    },\n    showLastLogin: {\n      get: function get() {\n        return this.getLocalstorage('showLastLogin');\n      },\n      set: function set(status) {\n        this.setLocalStorage('showLastLogin', status);\n      }\n    },\n    showUserBackend: {\n      get: function get() {\n        return this.getLocalstorage('showUserBackend');\n      },\n      set: function set(status) {\n        this.setLocalStorage('showUserBackend', status);\n      }\n    },\n    showStoragePath: {\n      get: function get() {\n        return this.getLocalstorage('showStoragePath');\n      },\n      set: function set(status) {\n        this.setLocalStorage('showStoragePath', status);\n      }\n    },\n    userCount: function userCount() {\n      return this.$store.getters.getUserCount;\n    },\n    settings: function settings() {\n      return this.$store.getters.getServerData;\n    },\n    // default quota\n    quotaOptions: function quotaOptions() {\n      // convert the preset array into objects\n      var quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {\n        return acc.concat({\n          id: cur,\n          label: cur\n        });\n      }, []); // add default presets\n\n      quotaPreset.unshift(this.unlimitedQuota);\n      return quotaPreset;\n    },\n    // mapping saved values to objects\n    defaultQuota: {\n      get: function get() {\n        if (this.selectedQuota !== false) {\n          return this.selectedQuota;\n        }\n\n        if (this.settings.defaultQuota !== this.unlimitedQuota.id && OC.Util.computerFileSize(this.settings.defaultQuota) >= 0) {\n          // if value is valid, let's map the quotaOptions or return custom quota\n          return {\n            id: this.settings.defaultQuota,\n            label: this.settings.defaultQuota\n          };\n        }\n\n        return this.unlimitedQuota; // unlimited\n      },\n      set: function set(quota) {\n        this.selectedQuota = quota;\n      }\n    },\n    // BUILD APP NAVIGATION MENU OBJECT\n    menu: function menu() {\n      var _this = this;\n\n      // Data provided php side\n      var self = this;\n      var groups = this.$store.getters.getGroups;\n      groups = Array.isArray(groups) ? groups : []; // Map groups\n\n      groups = groups.map(function (group) {\n        var item = {};\n        item.id = group.id.replace(' ', '_');\n        item.key = item.id;\n        item.utils = {}; // router link to\n\n        item.router = {\n          name: 'group',\n          params: {\n            selectedGroup: group.id\n          }\n        }; // group name\n\n        item.text = group.name;\n        item.title = group.name; // users count for all groups\n\n        if (group.usercount - group.disabled > 0 || group.usercount === -1) {\n          item.utils.counter = group.usercount - group.disabled;\n        }\n\n        if (item.id !== 'admin' && item.id !== 'disabled' && _this.settings.isAdmin) {\n          // add delete button on real groups\n          item.utils.actions = [{\n            icon: 'icon-delete',\n            text: t('settings', 'Remove group'),\n            action: function action() {\n              self.removeGroup(group.id);\n            }\n          }];\n        }\n\n        return item;\n      }); // Every item is added on top of the array, so we're going backward\n      // Groups, separator, disabled, admin, everyone\n      // Add separator\n\n      var realGroups = groups.find(function (group) {\n        return group.id !== 'disabled' && group.id !== 'admin';\n      });\n      realGroups = typeof realGroups === 'undefined' ? [] : realGroups;\n      realGroups = Array.isArray(realGroups) ? realGroups : [realGroups];\n\n      if (realGroups.length > 0) {\n        var separator = {\n          caption: true,\n          text: t('settings', 'Groups')\n        };\n        groups.unshift(separator);\n      } // Adjust admin and disabled groups\n\n\n      var adminGroup = groups.find(function (group) {\n        return group.id === 'admin';\n      });\n      var disabledGroup = groups.find(function (group) {\n        return group.id === 'disabled';\n      }); // filter out admin and disabled\n\n      groups = groups.filter(function (group) {\n        return ['admin', 'disabled'].indexOf(group.id) === -1;\n      });\n\n      if (adminGroup && adminGroup.text) {\n        adminGroup.text = t('settings', 'Admins'); // rename admin group\n\n        adminGroup.icon = 'icon-user-admin'; // set icon\n\n        groups.unshift(adminGroup); // add admin group if present\n      }\n\n      if (disabledGroup && disabledGroup.text) {\n        disabledGroup.text = t('settings', 'Disabled users'); // rename disabled group\n\n        disabledGroup.icon = 'icon-disabled-users'; // set icon\n\n        if (disabledGroup.utils && (disabledGroup.utils.counter > 0 // add disabled if not empty\n        || disabledGroup.utils.counter === -1) // add disabled if ldap enabled\n        ) {\n            groups.unshift(disabledGroup);\n\n            if (disabledGroup.utils.counter === -1) {\n              // hides the counter instead of showing -1\n              delete disabledGroup.utils.counter;\n            }\n          }\n      } // Add everyone group\n\n\n      var everyoneGroup = {\n        id: 'everyone',\n        key: 'everyone',\n        icon: 'icon-contacts-dark',\n        router: {\n          name: 'users'\n        },\n        text: t('settings', 'Everyone')\n      }; // users count\n\n      if (this.userCount > 0) {\n        Vue.set(everyoneGroup, 'utils', {\n          counter: this.userCount\n        });\n      }\n\n      groups.unshift(everyoneGroup);\n      var addGroup = {\n        id: 'addgroup',\n        key: 'addgroup',\n        icon: 'icon-add',\n        text: t('settings', 'Add group'),\n        classes: this.loadingAddGroup ? 'icon-loading-small' : ''\n      };\n\n      if (this.showAddGroupEntry) {\n        Vue.set(addGroup, 'edit', {\n          text: t('settings', 'Add group'),\n          action: this.createGroup,\n          reset: function reset() {\n            self.showAddGroupEntry = false;\n          }\n        });\n        addGroup.classes = 'editing';\n      } else {\n        Vue.set(addGroup, 'action', function () {\n          self.showAddGroupEntry = true; // focus input\n\n          Vue.nextTick(function () {\n            window.addgroup.querySelector('form > input[type=\"text\"]').focus();\n          });\n        });\n      }\n\n      groups.unshift(addGroup);\n      return groups;\n    }\n  },\n  beforeMount: function beforeMount() {\n    this.$store.commit('initGroups', {\n      groups: this.$store.getters.getServerData.groups,\n      orderBy: this.$store.getters.getServerData.sortGroups,\n      userCount: this.$store.getters.getServerData.userCount\n    });\n    this.$store.dispatch('getPasswordPolicyMinLength');\n  },\n  created: function created() {\n    // init the OCA.Settings.UserList object\n    // and add the registerAction method\n    Object.assign(OCA, {\n      Settings: {\n        UserList: {\n          registerAction: this.registerAction\n        }\n      }\n    });\n  },\n  methods: {\n    toggleNewUserMenu: function toggleNewUserMenu() {\n      this.showConfig.showNewUserForm = !this.showConfig.showNewUserForm;\n\n      if (this.showConfig.showNewUserForm) {\n        Vue.nextTick(function () {\n          window.newusername.focus();\n        });\n      }\n    },\n    getLocalstorage: function getLocalstorage(key) {\n      // force initialization\n      var localConfig = this.$localStorage.get(key); // if localstorage is null, fallback to original values\n\n      this.showConfig[key] = localConfig !== null ? localConfig === 'true' : this.showConfig[key];\n      return this.showConfig[key];\n    },\n    setLocalStorage: function setLocalStorage(key, status) {\n      this.showConfig[key] = status;\n      this.$localStorage.set(key, status);\n      return status;\n    },\n    removeGroup: function removeGroup(groupid) {\n      var self = this; // TODO migrate to a vue js confirm dialog component\n\n      OC.dialogs.confirm(t('settings', 'You are about to remove the group {group}. The users will NOT be deleted.', {\n        group: groupid\n      }), t('settings', 'Please confirm the group removal '), function (success) {\n        if (success) {\n          self.$store.dispatch('removeGroup', groupid);\n        }\n      });\n    },\n\n    /**\n     * Dispatch default quota set request\n     *\n     * @param {string|Object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n     */\n    setDefaultQuota: function setDefaultQuota() {\n      var _this2 = this;\n\n      var quota = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'none';\n      this.$store.dispatch('setAppConfig', {\n        app: 'files',\n        key: 'default_quota',\n        // ensure we only send the preset id\n        value: quota.id ? quota.id : quota\n      }).then(function () {\n        if (_typeof(quota) !== 'object') {\n          quota = {\n            id: quota,\n            label: quota\n          };\n        }\n\n        _this2.defaultQuota = quota;\n      });\n    },\n\n    /**\n     * Validate quota string to make sure it's a valid human file size\n     *\n     * @param {string} quota Quota in readable format '5 GB'\n     * @returns {Promise|boolean}\n     */\n    validateQuota: function validateQuota(quota) {\n      // only used for new presets sent through @Tag\n      var validQuota = OC.Util.computerFileSize(quota);\n\n      if (validQuota === null) {\n        return this.setDefaultQuota('none');\n      } else {\n        // unify format output\n        return this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));\n      }\n    },\n\n    /**\n     * Register a new action for the user menu\n     *\n     * @param {string} icon the icon class\n     * @param {string} text the text to display\n     * @param {Function} action the function to run\n     * @returns {Array}\n     */\n    registerAction: function registerAction(icon, text, action) {\n      this.externalActions.push({\n        icon: icon,\n        text: text,\n        action: action\n      });\n      return this.externalActions;\n    },\n\n    /**\n     * Create a new group\n     *\n     * @param {Object} event The form submit event\n     */\n    createGroup: function createGroup(event) {\n      var _this3 = this;\n\n      var gid = event.target[0].value;\n      this.loadingAddGroup = true;\n      this.$store.dispatch('addGroup', gid).then(function () {\n        _this3.showAddGroupEntry = false;\n        _this3.loadingAddGroup = false;\n\n        _this3.$router.push({\n          name: 'group',\n          params: {\n            selectedGroup: gid\n          }\n        });\n      }).catch(function () {\n        _this3.loadingAddGroup = false;\n      });\n    }\n  }\n};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".row--menu-opened[data-v-77960baa] {\\n  z-index: 1 !important;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.cellText[data-v-ff154a08] {\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n\\twhite-space: nowrap;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"user-list-grid\",\n      attrs: { id: \"app-content\" },\n      on: {\n        \"&scroll\": function($event) {\n          return _vm.onScroll($event)\n        }\n      }\n    },\n    [\n      _c(\n        \"form\",\n        {\n          directives: [\n            {\n              name: \"show\",\n              rawName: \"v-show\",\n              value: _vm.showConfig.showNewUserForm,\n              expression: \"showConfig.showNewUserForm\"\n            }\n          ],\n          staticClass: \"row\",\n          class: { sticky: _vm.scrolled && _vm.showConfig.showNewUserForm },\n          attrs: { id: \"new-user\", disabled: _vm.loading.all },\n          on: {\n            submit: function($event) {\n              $event.preventDefault()\n              return _vm.createUser($event)\n            }\n          }\n        },\n        [\n          _c(\"div\", {\n            class: _vm.loading.all ? \"icon-loading-small\" : \"icon-add\"\n          }),\n          _vm._v(\" \"),\n          _c(\"div\", { staticClass: \"name\" }, [\n            _c(\"input\", {\n              directives: [\n                {\n                  name: \"model\",\n                  rawName: \"v-model\",\n                  value: _vm.newUser.id,\n                  expression: \"newUser.id\"\n                }\n              ],\n              ref: \"newusername\",\n              attrs: {\n                id: \"newusername\",\n                disabled: _vm.settings.newUserGenerateUserID,\n                placeholder: _vm.settings.newUserGenerateUserID\n                  ? _vm.t(\"settings\", \"Will be autogenerated\")\n                  : _vm.t(\"settings\", \"Username\"),\n                autocapitalize: \"none\",\n                autocomplete: \"off\",\n                autocorrect: \"off\",\n                name: \"username\",\n                pattern: \"[a-zA-Z0-9 _\\\\.@\\\\-']+\",\n                required: \"\",\n                type: \"text\"\n              },\n              domProps: { value: _vm.newUser.id },\n              on: {\n                input: function($event) {\n                  if ($event.target.composing) {\n                    return\n                  }\n                  _vm.$set(_vm.newUser, \"id\", $event.target.value)\n                }\n              }\n            }),\n            _vm._v(\" \"),\n            _c(\"div\", { staticClass: \"displayName\" }, [\n              _c(\"input\", {\n                directives: [\n                  {\n                    name: \"model\",\n                    rawName: \"v-model\",\n                    value: _vm.newUser.displayName,\n                    expression: \"newUser.displayName\"\n                  }\n                ],\n                attrs: {\n                  id: \"newdisplayname\",\n                  placeholder: _vm.t(\"settings\", \"Display name\"),\n                  autocapitalize: \"none\",\n                  autocomplete: \"off\",\n                  autocorrect: \"off\",\n                  name: \"displayname\",\n                  type: \"text\"\n                },\n                domProps: { value: _vm.newUser.displayName },\n                on: {\n                  input: function($event) {\n                    if ($event.target.composing) {\n                      return\n                    }\n                    _vm.$set(_vm.newUser, \"displayName\", $event.target.value)\n                  }\n                }\n              })\n            ])\n          ]),\n          _vm._v(\" \"),\n          _c(\"div\", { staticClass: \"password\" }, [\n            _c(\"input\", {\n              directives: [\n                {\n                  name: \"model\",\n                  rawName: \"v-model\",\n                  value: _vm.newUser.password,\n                  expression: \"newUser.password\"\n                }\n              ],\n              ref: \"newuserpassword\",\n              attrs: {\n                id: \"newuserpassword\",\n                minlength: _vm.minPasswordLength,\n                placeholder: _vm.t(\"settings\", \"Password\"),\n                required: _vm.newUser.mailAddress === \"\",\n                autocapitalize: \"none\",\n                autocomplete: \"new-password\",\n                autocorrect: \"off\",\n                name: \"password\",\n                type: \"password\"\n              },\n              domProps: { value: _vm.newUser.password },\n              on: {\n                input: function($event) {\n                  if ($event.target.composing) {\n                    return\n                  }\n                  _vm.$set(_vm.newUser, \"password\", $event.target.value)\n                }\n              }\n            })\n          ]),\n          _vm._v(\" \"),\n          _c(\"div\", { staticClass: \"mailAddress\" }, [\n            _c(\"input\", {\n              directives: [\n                {\n                  name: \"model\",\n                  rawName: \"v-model\",\n                  value: _vm.newUser.mailAddress,\n                  expression: \"newUser.mailAddress\"\n                }\n              ],\n              attrs: {\n                id: \"newemail\",\n                placeholder: _vm.t(\"settings\", \"Email\"),\n                required:\n                  _vm.newUser.password === \"\" ||\n                  _vm.settings.newUserRequireEmail,\n                autocapitalize: \"none\",\n                autocomplete: \"off\",\n                autocorrect: \"off\",\n                name: \"email\",\n                type: \"email\"\n              },\n              domProps: { value: _vm.newUser.mailAddress },\n              on: {\n                input: function($event) {\n                  if ($event.target.composing) {\n                    return\n                  }\n                  _vm.$set(_vm.newUser, \"mailAddress\", $event.target.value)\n                }\n              }\n            })\n          ]),\n          _vm._v(\" \"),\n          _c(\n            \"div\",\n            { staticClass: \"groups\" },\n            [\n              !_vm.settings.isAdmin\n                ? _c(\"input\", {\n                    class: { \"icon-loading-small\": _vm.loading.groups },\n                    attrs: {\n                      id: \"newgroups\",\n                      required: !_vm.settings.isAdmin,\n                      tabindex: \"-1\",\n                      type: \"text\"\n                    },\n                    domProps: { value: _vm.newUser.groups }\n                  })\n                : _vm._e(),\n              _vm._v(\" \"),\n              _c(\n                \"Multiselect\",\n                {\n                  staticClass: \"multiselect-vue\",\n                  attrs: {\n                    \"close-on-select\": false,\n                    disabled: _vm.loading.groups || _vm.loading.all,\n                    multiple: true,\n                    options: _vm.canAddGroups,\n                    placeholder: _vm.t(\"settings\", \"Add user in group\"),\n                    \"tag-width\": 60,\n                    taggable: true,\n                    label: \"name\",\n                    \"tag-placeholder\": \"create\",\n                    \"track-by\": \"id\"\n                  },\n                  on: { tag: _vm.createGroup },\n                  model: {\n                    value: _vm.newUser.groups,\n                    callback: function($$v) {\n                      _vm.$set(_vm.newUser, \"groups\", $$v)\n                    },\n                    expression: \"newUser.groups\"\n                  }\n                },\n                [\n                  _c(\n                    \"span\",\n                    { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n                    [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n                  )\n                ]\n              )\n            ],\n            1\n          ),\n          _vm._v(\" \"),\n          _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n            ? _c(\n                \"div\",\n                { staticClass: \"subadmins\" },\n                [\n                  _c(\n                    \"Multiselect\",\n                    {\n                      staticClass: \"multiselect-vue\",\n                      attrs: {\n                        \"close-on-select\": false,\n                        multiple: true,\n                        options: _vm.subAdminsGroups,\n                        placeholder: _vm.t(\"settings\", \"Set user as admin for\"),\n                        \"tag-width\": 60,\n                        label: \"name\",\n                        \"track-by\": \"id\"\n                      },\n                      model: {\n                        value: _vm.newUser.subAdminsGroups,\n                        callback: function($$v) {\n                          _vm.$set(_vm.newUser, \"subAdminsGroups\", $$v)\n                        },\n                        expression: \"newUser.subAdminsGroups\"\n                      }\n                    },\n                    [\n                      _c(\n                        \"span\",\n                        { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n                        [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n                      )\n                    ]\n                  )\n                ],\n                1\n              )\n            : _vm._e(),\n          _vm._v(\" \"),\n          _c(\n            \"div\",\n            { staticClass: \"quota\" },\n            [\n              _c(\"Multiselect\", {\n                staticClass: \"multiselect-vue\",\n                attrs: {\n                  \"allow-empty\": false,\n                  options: _vm.quotaOptions,\n                  placeholder: _vm.t(\"settings\", \"Select user quota\"),\n                  taggable: true,\n                  label: \"label\",\n                  \"track-by\": \"id\"\n                },\n                on: { tag: _vm.validateQuota },\n                model: {\n                  value: _vm.newUser.quota,\n                  callback: function($$v) {\n                    _vm.$set(_vm.newUser, \"quota\", $$v)\n                  },\n                  expression: \"newUser.quota\"\n                }\n              })\n            ],\n            1\n          ),\n          _vm._v(\" \"),\n          _vm.showConfig.showLanguages\n            ? _c(\n                \"div\",\n                { staticClass: \"languages\" },\n                [\n                  _c(\"Multiselect\", {\n                    staticClass: \"multiselect-vue\",\n                    attrs: {\n                      \"allow-empty\": false,\n                      options: _vm.languages,\n                      placeholder: _vm.t(\"settings\", \"Default language\"),\n                      \"group-label\": \"label\",\n                      \"group-values\": \"languages\",\n                      label: \"name\",\n                      \"track-by\": \"code\"\n                    },\n                    model: {\n                      value: _vm.newUser.language,\n                      callback: function($$v) {\n                        _vm.$set(_vm.newUser, \"language\", $$v)\n                      },\n                      expression: \"newUser.language\"\n                    }\n                  })\n                ],\n                1\n              )\n            : _vm._e(),\n          _vm._v(\" \"),\n          _vm.showConfig.showStoragePath\n            ? _c(\"div\", { staticClass: \"storageLocation\" })\n            : _vm._e(),\n          _vm._v(\" \"),\n          _vm.showConfig.showUserBackend\n            ? _c(\"div\", { staticClass: \"userBackend\" })\n            : _vm._e(),\n          _vm._v(\" \"),\n          _vm.showConfig.showLastLogin\n            ? _c(\"div\", { staticClass: \"lastLogin\" })\n            : _vm._e(),\n          _vm._v(\" \"),\n          _c(\"div\", { staticClass: \"userActions\" }, [\n            _c(\"input\", {\n              staticClass: \"button primary icon-checkmark-white has-tooltip\",\n              attrs: {\n                id: \"newsubmit\",\n                title: _vm.t(\"settings\", \"Add a new user\"),\n                type: \"submit\",\n                value: \"\"\n              }\n            }),\n            _vm._v(\" \"),\n            _c(\n              \"div\",\n              { staticClass: \"closeButton\" },\n              [\n                _c(\n                  \"Actions\",\n                  [\n                    _c(\n                      \"ActionButton\",\n                      {\n                        attrs: { icon: \"icon-close\" },\n                        on: { click: _vm.onClose }\n                      },\n                      [\n                        _vm._v(\n                          \"\\n\\t\\t\\t\\t\\t\\t\" +\n                            _vm._s(_vm.t(\"settings\", \"Close\")) +\n                            \"\\n\\t\\t\\t\\t\\t\"\n                        )\n                      ]\n                    )\n                  ],\n                  1\n                )\n              ],\n              1\n            )\n          ])\n        ]\n      ),\n      _vm._v(\" \"),\n      _c(\n        \"div\",\n        {\n          staticClass: \"row\",\n          class: { sticky: _vm.scrolled && !_vm.showConfig.showNewUserForm },\n          attrs: { id: \"grid-header\" }\n        },\n        [\n          _c(\"div\", { staticClass: \"avatar\", attrs: { id: \"headerAvatar\" } }),\n          _vm._v(\" \"),\n          _c(\"div\", { staticClass: \"name\", attrs: { id: \"headerName\" } }, [\n            _vm._v(\n              \"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Username\")) + \"\\n\\n\\t\\t\\t\"\n            ),\n            _c(\"div\", { staticClass: \"subtitle\" }, [\n              _vm._v(\n                \"\\n\\t\\t\\t\\t\" +\n                  _vm._s(_vm.t(\"settings\", \"Display name\")) +\n                  \"\\n\\t\\t\\t\"\n              )\n            ])\n          ]),\n          _vm._v(\" \"),\n          _c(\n            \"div\",\n            { staticClass: \"password\", attrs: { id: \"headerPassword\" } },\n            [\n              _vm._v(\n                \"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Password\")) + \"\\n\\t\\t\"\n              )\n            ]\n          ),\n          _vm._v(\" \"),\n          _c(\n            \"div\",\n            { staticClass: \"mailAddress\", attrs: { id: \"headerAddress\" } },\n            [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Email\")) + \"\\n\\t\\t\")]\n          ),\n          _vm._v(\" \"),\n          _c(\"div\", { staticClass: \"groups\", attrs: { id: \"headerGroups\" } }, [\n            _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Groups\")) + \"\\n\\t\\t\")\n          ]),\n          _vm._v(\" \"),\n          _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n            ? _c(\n                \"div\",\n                { staticClass: \"subadmins\", attrs: { id: \"headerSubAdmins\" } },\n                [\n                  _vm._v(\n                    \"\\n\\t\\t\\t\" +\n                      _vm._s(_vm.t(\"settings\", \"Group admin for\")) +\n                      \"\\n\\t\\t\"\n                  )\n                ]\n              )\n            : _vm._e(),\n          _vm._v(\" \"),\n          _c(\"div\", { staticClass: \"quota\", attrs: { id: \"headerQuota\" } }, [\n            _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Quota\")) + \"\\n\\t\\t\")\n          ]),\n          _vm._v(\" \"),\n          _vm.showConfig.showLanguages\n            ? _c(\n                \"div\",\n                { staticClass: \"languages\", attrs: { id: \"headerLanguages\" } },\n                [\n                  _vm._v(\n                    \"\\n\\t\\t\\t\" +\n                      _vm._s(_vm.t(\"settings\", \"Language\")) +\n                      \"\\n\\t\\t\"\n                  )\n                ]\n              )\n            : _vm._e(),\n          _vm._v(\" \"),\n          _vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath\n            ? _c(\"div\", { staticClass: \"headerUserBackend userBackend\" }, [\n                _vm.showConfig.showUserBackend\n                  ? _c(\"div\", { staticClass: \"userBackend\" }, [\n                      _vm._v(\n                        \"\\n\\t\\t\\t\\t\" +\n                          _vm._s(_vm.t(\"settings\", \"User backend\")) +\n                          \"\\n\\t\\t\\t\"\n                      )\n                    ])\n                  : _vm._e(),\n                _vm._v(\" \"),\n                _vm.showConfig.showStoragePath\n                  ? _c(\"div\", { staticClass: \"subtitle storageLocation\" }, [\n                      _vm._v(\n                        \"\\n\\t\\t\\t\\t\" +\n                          _vm._s(_vm.t(\"settings\", \"Storage location\")) +\n                          \"\\n\\t\\t\\t\"\n                      )\n                    ])\n                  : _vm._e()\n              ])\n            : _vm._e(),\n          _vm._v(\" \"),\n          _vm.showConfig.showLastLogin\n            ? _c(\"div\", { staticClass: \"headerLastLogin lastLogin\" }, [\n                _vm._v(\n                  \"\\n\\t\\t\\t\" +\n                    _vm._s(_vm.t(\"settings\", \"Last login\")) +\n                    \"\\n\\t\\t\"\n                )\n              ])\n            : _vm._e(),\n          _vm._v(\" \"),\n          _c(\"div\", { staticClass: \"userActions\" })\n        ]\n      ),\n      _vm._v(\" \"),\n      _vm._l(_vm.filteredUsers, function(user, key) {\n        return _c(\"user-row\", {\n          key: key,\n          attrs: {\n            \"external-actions\": _vm.externalActions,\n            groups: _vm.groups,\n            languages: _vm.languages,\n            \"quota-options\": _vm.quotaOptions,\n            settings: _vm.settings,\n            \"show-config\": _vm.showConfig,\n            \"sub-admins-groups\": _vm.subAdminsGroups,\n            user: user\n          }\n        })\n      }),\n      _vm._v(\" \"),\n      _c(\n        \"InfiniteLoading\",\n        { ref: \"infiniteLoading\", on: { infinite: _vm.infiniteHandler } },\n        [\n          _c(\"div\", { attrs: { slot: \"spinner\" }, slot: \"spinner\" }, [\n            _c(\"div\", { staticClass: \"users-icon-loading icon-loading\" })\n          ]),\n          _vm._v(\" \"),\n          _c(\"div\", { attrs: { slot: \"no-more\" }, slot: \"no-more\" }, [\n            _c(\"div\", { staticClass: \"users-list-end\" })\n          ]),\n          _vm._v(\" \"),\n          _c(\"div\", { attrs: { slot: \"no-results\" }, slot: \"no-results\" }, [\n            _c(\"div\", { attrs: { id: \"emptycontent\" } }, [\n              _c(\"div\", { staticClass: \"icon-contacts-dark\" }),\n              _vm._v(\" \"),\n              _c(\"h2\", [_vm._v(_vm._s(_vm.t(\"settings\", \"No users in here\")))])\n            ])\n          ])\n        ]\n      )\n    ],\n    2\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return Object.keys(_vm.user).length === 1\n    ? _c(\"div\", { staticClass: \"row\", attrs: { \"data-id\": _vm.user.id } }, [\n        _c(\n          \"div\",\n          {\n            staticClass: \"avatar\",\n            class: {\n              \"icon-loading-small\":\n                _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe\n            }\n          },\n          [\n            !_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe\n              ? _c(\"img\", {\n                  attrs: {\n                    src: _vm.generateAvatar(_vm.user.id, 32),\n                    srcset:\n                      _vm.generateAvatar(_vm.user.id, 64) +\n                      \" 2x, \" +\n                      _vm.generateAvatar(_vm.user.id, 128) +\n                      \" 4x\",\n                    alt: \"\",\n                    height: \"32\",\n                    width: \"32\"\n                  }\n                })\n              : _vm._e()\n          ]\n        ),\n        _vm._v(\" \"),\n        _c(\"div\", { staticClass: \"name\" }, [\n          _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.user.id) + \"\\n\\t\")\n        ]),\n        _vm._v(\" \"),\n        _c(\"div\", { staticClass: \"obfuscated\" }, [\n          _vm._v(\n            \"\\n\\t\\t\" +\n              _vm._s(\n                _vm.t(\n                  \"settings\",\n                  \"You do not have permissions to see the details of this user\"\n                )\n              ) +\n              \"\\n\\t\"\n          )\n        ])\n      ])\n    : !_vm.editing\n    ? _c(\"UserRowSimple\", {\n        class: { \"row--menu-opened\": _vm.openedMenu },\n        attrs: {\n          editing: _vm.editing,\n          \"feedback-message\": _vm.feedbackMessage,\n          groups: _vm.groups,\n          languages: _vm.languages,\n          loading: _vm.loading,\n          \"opened-menu\": _vm.openedMenu,\n          settings: _vm.settings,\n          \"show-config\": _vm.showConfig,\n          \"sub-admins-groups\": _vm.subAdminsGroups,\n          \"user-actions\": _vm.userActions,\n          user: _vm.user\n        },\n        on: {\n          \"update:editing\": function($event) {\n            _vm.editing = $event\n          },\n          hideMenu: _vm.hideMenu,\n          toggleMenu: _vm.toggleMenu\n        }\n      })\n    : _c(\n        \"div\",\n        {\n          staticClass: \"row row--editable\",\n          class: {\n            disabled: _vm.loading.delete || _vm.loading.disable,\n            \"row--menu-opened\": _vm.openedMenu\n          },\n          attrs: { \"data-id\": _vm.user.id }\n        },\n        [\n          _c(\n            \"div\",\n            {\n              staticClass: \"avatar\",\n              class: {\n                \"icon-loading-small\":\n                  _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe\n              }\n            },\n            [\n              !_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe\n                ? _c(\"img\", {\n                    attrs: {\n                      src: _vm.generateAvatar(_vm.user.id, 32),\n                      srcset:\n                        _vm.generateAvatar(_vm.user.id, 64) +\n                        \" 2x, \" +\n                        _vm.generateAvatar(_vm.user.id, 128) +\n                        \" 4x\",\n                      alt: \"\",\n                      height: \"32\",\n                      width: \"32\"\n                    }\n                  })\n                : _vm._e()\n            ]\n          ),\n          _vm._v(\" \"),\n          _c(\"div\", { staticClass: \"displayName\" }, [\n            _c(\n              \"form\",\n              {\n                staticClass: \"displayName\",\n                class: { \"icon-loading-small\": _vm.loading.displayName },\n                on: {\n                  submit: function($event) {\n                    $event.preventDefault()\n                    return _vm.updateDisplayName($event)\n                  }\n                }\n              },\n              [\n                _vm.user.backendCapabilities.setDisplayName\n                  ? [\n                      _vm.user.backendCapabilities.setDisplayName\n                        ? _c(\"input\", {\n                            ref: \"displayName\",\n                            attrs: {\n                              id: \"displayName\" + _vm.user.id + _vm.rand,\n                              disabled:\n                                _vm.loading.displayName || _vm.loading.all,\n                              autocapitalize: \"off\",\n                              autocomplete: \"new-password\",\n                              autocorrect: \"off\",\n                              spellcheck: \"false\",\n                              type: \"text\"\n                            },\n                            domProps: { value: _vm.user.displayname }\n                          })\n                        : _vm._e(),\n                      _vm._v(\" \"),\n                      _vm.user.backendCapabilities.setDisplayName\n                        ? _c(\"input\", {\n                            staticClass: \"icon-confirm\",\n                            attrs: { type: \"submit\", value: \"\" }\n                          })\n                        : _vm._e()\n                    ]\n                  : _c(\"div\", {\n                      directives: [\n                        {\n                          name: \"tooltip\",\n                          rawName: \"v-tooltip.auto\",\n                          value: _vm.t(\n                            \"settings\",\n                            \"The backend does not support changing the display name\"\n                          ),\n                          expression:\n                            \"t('settings', 'The backend does not support changing the display name')\",\n                          modifiers: { auto: true }\n                        }\n                      ],\n                      staticClass: \"name\"\n                    })\n              ],\n              2\n            )\n          ]),\n          _vm._v(\" \"),\n          _vm.settings.canChangePassword &&\n          _vm.user.backendCapabilities.setPassword\n            ? _c(\n                \"form\",\n                {\n                  staticClass: \"password\",\n                  class: { \"icon-loading-small\": _vm.loading.password },\n                  on: {\n                    submit: function($event) {\n                      $event.preventDefault()\n                      return _vm.updatePassword($event)\n                    }\n                  }\n                },\n                [\n                  _c(\"input\", {\n                    ref: \"password\",\n                    attrs: {\n                      id: \"password\" + _vm.user.id + _vm.rand,\n                      disabled: _vm.loading.password || _vm.loading.all,\n                      minlength: _vm.minPasswordLength,\n                      placeholder: _vm.t(\"settings\", \"Add new password\"),\n                      autocapitalize: \"off\",\n                      autocomplete: \"new-password\",\n                      autocorrect: \"off\",\n                      required: \"\",\n                      spellcheck: \"false\",\n                      type: \"password\",\n                      value: \"\"\n                    }\n                  }),\n                  _vm._v(\" \"),\n                  _c(\"input\", {\n                    staticClass: \"icon-confirm\",\n                    attrs: { type: \"submit\", value: \"\" }\n                  })\n                ]\n              )\n            : _c(\"div\"),\n          _vm._v(\" \"),\n          _c(\n            \"form\",\n            {\n              staticClass: \"mailAddress\",\n              class: { \"icon-loading-small\": _vm.loading.mailAddress },\n              on: {\n                submit: function($event) {\n                  $event.preventDefault()\n                  return _vm.updateEmail($event)\n                }\n              }\n            },\n            [\n              _c(\"input\", {\n                ref: \"mailAddress\",\n                attrs: {\n                  id: \"mailAddress\" + _vm.user.id + _vm.rand,\n                  disabled: _vm.loading.mailAddress || _vm.loading.all,\n                  placeholder: _vm.t(\"settings\", \"Add new email address\"),\n                  autocapitalize: \"off\",\n                  autocomplete: \"new-password\",\n                  autocorrect: \"off\",\n                  spellcheck: \"false\",\n                  type: \"email\"\n                },\n                domProps: { value: _vm.user.email }\n              }),\n              _vm._v(\" \"),\n              _c(\"input\", {\n                staticClass: \"icon-confirm\",\n                attrs: { type: \"submit\", value: \"\" }\n              })\n            ]\n          ),\n          _vm._v(\" \"),\n          _c(\n            \"div\",\n            {\n              staticClass: \"groups\",\n              class: { \"icon-loading-small\": _vm.loading.groups }\n            },\n            [\n              _c(\n                \"Multiselect\",\n                {\n                  staticClass: \"multiselect-vue\",\n                  attrs: {\n                    \"close-on-select\": false,\n                    disabled: _vm.loading.groups || _vm.loading.all,\n                    limit: 2,\n                    multiple: true,\n                    options: _vm.availableGroups,\n                    placeholder: _vm.t(\"settings\", \"Add user in group\"),\n                    \"tag-width\": 60,\n                    taggable: _vm.settings.isAdmin,\n                    value: _vm.userGroups,\n                    label: \"name\",\n                    \"tag-placeholder\": \"create\",\n                    \"track-by\": \"id\"\n                  },\n                  on: {\n                    remove: _vm.removeUserGroup,\n                    select: _vm.addUserGroup,\n                    tag: _vm.createGroup\n                  }\n                },\n                [\n                  _c(\n                    \"span\",\n                    { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n                    [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n                  )\n                ]\n              )\n            ],\n            1\n          ),\n          _vm._v(\" \"),\n          _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n            ? _c(\n                \"div\",\n                {\n                  staticClass: \"subadmins\",\n                  class: { \"icon-loading-small\": _vm.loading.subadmins }\n                },\n                [\n                  _c(\n                    \"Multiselect\",\n                    {\n                      staticClass: \"multiselect-vue\",\n                      attrs: {\n                        \"close-on-select\": false,\n                        disabled: _vm.loading.subadmins || _vm.loading.all,\n                        limit: 2,\n                        multiple: true,\n                        options: _vm.subAdminsGroups,\n                        placeholder: _vm.t(\"settings\", \"Set user as admin for\"),\n                        \"tag-width\": 60,\n                        value: _vm.userSubAdminsGroups,\n                        label: \"name\",\n                        \"track-by\": \"id\"\n                      },\n                      on: {\n                        remove: _vm.removeUserSubAdmin,\n                        select: _vm.addUserSubAdmin\n                      }\n                    },\n                    [\n                      _c(\n                        \"span\",\n                        { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n                        [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n                      )\n                    ]\n                  )\n                ],\n                1\n              )\n            : _vm._e(),\n          _vm._v(\" \"),\n          _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"tooltip\",\n                  rawName: \"v-tooltip.auto\",\n                  value: _vm.usedSpace,\n                  expression: \"usedSpace\",\n                  modifiers: { auto: true }\n                }\n              ],\n              staticClass: \"quota\",\n              class: { \"icon-loading-small\": _vm.loading.quota }\n            },\n            [\n              _c(\"Multiselect\", {\n                staticClass: \"multiselect-vue\",\n                attrs: {\n                  \"allow-empty\": false,\n                  disabled: _vm.loading.quota || _vm.loading.all,\n                  options: _vm.quotaOptions,\n                  placeholder: _vm.t(\"settings\", \"Select user quota\"),\n                  taggable: true,\n                  value: _vm.userQuota,\n                  label: \"label\",\n                  \"tag-placeholder\": \"create\",\n                  \"track-by\": \"id\"\n                },\n                on: { input: _vm.setUserQuota, tag: _vm.validateQuota }\n              })\n            ],\n            1\n          ),\n          _vm._v(\" \"),\n          _vm.showConfig.showLanguages\n            ? _c(\n                \"div\",\n                {\n                  staticClass: \"languages\",\n                  class: { \"icon-loading-small\": _vm.loading.languages }\n                },\n                [\n                  _c(\"Multiselect\", {\n                    staticClass: \"multiselect-vue\",\n                    attrs: {\n                      \"allow-empty\": false,\n                      disabled: _vm.loading.languages || _vm.loading.all,\n                      options: _vm.languages,\n                      placeholder: _vm.t(\"settings\", \"No language set\"),\n                      value: _vm.userLanguage,\n                      \"group-label\": \"label\",\n                      \"group-values\": \"languages\",\n                      label: \"name\",\n                      \"track-by\": \"code\"\n                    },\n                    on: { input: _vm.setUserLanguage }\n                  })\n                ],\n                1\n              )\n            : _vm._e(),\n          _vm._v(\" \"),\n          _vm.showConfig.showStoragePath || _vm.showConfig.showUserBackend\n            ? _c(\"div\", { staticClass: \"storageLocation\" })\n            : _vm._e(),\n          _vm._v(\" \"),\n          _vm.showConfig.showLastLogin ? _c(\"div\") : _vm._e(),\n          _vm._v(\" \"),\n          _c(\"div\", { staticClass: \"userActions\" }, [\n            _vm.OC.currentUser !== _vm.user.id &&\n            _vm.user.id !== \"admin\" &&\n            !_vm.loading.all\n              ? _c(\n                  \"div\",\n                  { staticClass: \"toggleUserActions\" },\n                  [\n                    _c(\n                      \"Actions\",\n                      [\n                        _c(\n                          \"ActionButton\",\n                          {\n                            attrs: { icon: \"icon-checkmark\" },\n                            on: {\n                              click: function($event) {\n                                _vm.editing = false\n                              }\n                            }\n                          },\n                          [\n                            _vm._v(\n                              \"\\n\\t\\t\\t\\t\\t\" +\n                                _vm._s(_vm.t(\"settings\", \"Done\")) +\n                                \"\\n\\t\\t\\t\\t\"\n                            )\n                          ]\n                        )\n                      ],\n                      1\n                    ),\n                    _vm._v(\" \"),\n                    _c(\"div\", {\n                      directives: [\n                        {\n                          name: \"click-outside\",\n                          rawName: \"v-click-outside\",\n                          value: _vm.hideMenu,\n                          expression: \"hideMenu\"\n                        }\n                      ],\n                      staticClass: \"icon-more\",\n                      on: { click: _vm.toggleMenu }\n                    }),\n                    _vm._v(\" \"),\n                    _c(\n                      \"div\",\n                      {\n                        staticClass: \"popovermenu\",\n                        class: { open: _vm.openedMenu }\n                      },\n                      [_c(\"PopoverMenu\", { attrs: { menu: _vm.userActions } })],\n                      1\n                    )\n                  ],\n                  1\n                )\n              : _vm._e(),\n            _vm._v(\" \"),\n            _c(\n              \"div\",\n              {\n                staticClass: \"feedback\",\n                style: { opacity: _vm.feedbackMessage !== \"\" ? 1 : 0 }\n              },\n              [\n                _c(\"div\", { staticClass: \"icon-checkmark\" }),\n                _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.feedbackMessage) + \"\\n\\t\\t\")\n              ]\n            )\n          ])\n        ]\n      )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"row\",\n      class: { disabled: _vm.loading.delete || _vm.loading.disable },\n      attrs: { \"data-id\": _vm.user.id }\n    },\n    [\n      _c(\n        \"div\",\n        {\n          staticClass: \"avatar\",\n          class: {\n            \"icon-loading-small\":\n              _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe\n          }\n        },\n        [\n          !_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe\n            ? _c(\"img\", {\n                attrs: {\n                  alt: \"\",\n                  width: \"32\",\n                  height: \"32\",\n                  src: _vm.generateAvatar(_vm.user.id, 32),\n                  srcset:\n                    _vm.generateAvatar(_vm.user.id, 64) +\n                    \" 2x, \" +\n                    _vm.generateAvatar(_vm.user.id, 128) +\n                    \" 4x\"\n                }\n              })\n            : _vm._e()\n        ]\n      ),\n      _vm._v(\" \"),\n      _c(\"div\", { staticClass: \"name\" }, [\n        _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.user.id) + \"\\n\\t\\t\"),\n        _c(\"div\", { staticClass: \"displayName subtitle\" }, [\n          _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"tooltip\",\n                  rawName: \"v-tooltip\",\n                  value:\n                    _vm.user.displayname.length > 20\n                      ? _vm.user.displayname\n                      : \"\",\n                  expression:\n                    \"user.displayname.length > 20 ? user.displayname : ''\"\n                }\n              ],\n              staticClass: \"cellText\"\n            },\n            [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.user.displayname) + \"\\n\\t\\t\\t\")]\n          )\n        ])\n      ]),\n      _vm._v(\" \"),\n      _c(\"div\"),\n      _vm._v(\" \"),\n      _c(\"div\", { staticClass: \"mailAddress\" }, [\n        _c(\n          \"div\",\n          {\n            directives: [\n              {\n                name: \"tooltip\",\n                rawName: \"v-tooltip\",\n                value:\n                  _vm.user.email !== null && _vm.user.email.length > 20\n                    ? _vm.user.email\n                    : \"\",\n                expression:\n                  \"user.email !== null && user.email.length > 20 ? user.email : ''\"\n              }\n            ],\n            staticClass: \"cellText\"\n          },\n          [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.user.email) + \"\\n\\t\\t\")]\n        )\n      ]),\n      _vm._v(\" \"),\n      _c(\"div\", { staticClass: \"groups\" }, [\n        _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.userGroupsLabels) + \"\\n\\t\")\n      ]),\n      _vm._v(\" \"),\n      _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n        ? _c(\"div\", { staticClass: \"subAdminsGroups\" }, [\n            _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.userSubAdminsGroupsLabels) + \"\\n\\t\")\n          ])\n        : _vm._e(),\n      _vm._v(\" \"),\n      _c(\n        \"div\",\n        {\n          directives: [\n            {\n              name: \"tooltip\",\n              rawName: \"v-tooltip.auto\",\n              value: _vm.usedSpace,\n              expression: \"usedSpace\",\n              modifiers: { auto: true }\n            }\n          ],\n          staticClass: \"quota\"\n        },\n        [\n          _c(\"progress\", {\n            staticClass: \"quota-user-progress\",\n            class: { warn: _vm.usedQuota > 80 },\n            attrs: { max: \"100\" },\n            domProps: { value: _vm.usedQuota }\n          })\n        ]\n      ),\n      _vm._v(\" \"),\n      _vm.showConfig.showLanguages\n        ? _c(\"div\", { staticClass: \"languages\" }, [\n            _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.userLanguage.name) + \"\\n\\t\")\n          ])\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath\n        ? _c(\"div\", { staticClass: \"userBackend\" }, [\n            _vm.showConfig.showUserBackend\n              ? _c(\"div\", { staticClass: \"userBackend\" }, [\n                  _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.user.backend) + \"\\n\\t\\t\")\n                ])\n              : _vm._e(),\n            _vm._v(\" \"),\n            _vm.showConfig.showStoragePath\n              ? _c(\"div\", { staticClass: \"storageLocation subtitle\" }, [\n                  _vm._v(\n                    \"\\n\\t\\t\\t\" + _vm._s(_vm.user.storageLocation) + \"\\n\\t\\t\"\n                  )\n                ])\n              : _vm._e()\n          ])\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.showConfig.showLastLogin\n        ? _c(\n            \"div\",\n            {\n              directives: [\n                {\n                  name: \"tooltip\",\n                  rawName: \"v-tooltip.auto\",\n                  value: _vm.userLastLoginTooltip,\n                  expression: \"userLastLoginTooltip\",\n                  modifiers: { auto: true }\n                }\n              ],\n              staticClass: \"lastLogin\"\n            },\n            [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.userLastLogin) + \"\\n\\t\")]\n          )\n        : _vm._e(),\n      _vm._v(\" \"),\n      _c(\"div\", { staticClass: \"userActions\" }, [\n        _vm.canEdit && !_vm.loading.all\n          ? _c(\n              \"div\",\n              { staticClass: \"toggleUserActions\" },\n              [\n                _c(\n                  \"Actions\",\n                  [\n                    _c(\n                      \"ActionButton\",\n                      {\n                        attrs: { icon: \"icon-rename\" },\n                        on: { click: _vm.toggleEdit }\n                      },\n                      [\n                        _vm._v(\n                          \"\\n\\t\\t\\t\\t\\t\" +\n                            _vm._s(_vm.t(\"settings\", \"Edit User\")) +\n                            \"\\n\\t\\t\\t\\t\"\n                        )\n                      ]\n                    )\n                  ],\n                  1\n                ),\n                _vm._v(\" \"),\n                _c(\"div\", {\n                  directives: [\n                    {\n                      name: \"click-outside\",\n                      rawName: \"v-click-outside\",\n                      value: _vm.hideMenu,\n                      expression: \"hideMenu\"\n                    }\n                  ],\n                  staticClass: \"icon-more\",\n                  on: {\n                    click: function($event) {\n                      return _vm.$emit(\"toggleMenu\")\n                    }\n                  }\n                }),\n                _vm._v(\" \"),\n                _c(\n                  \"div\",\n                  {\n                    staticClass: \"popovermenu\",\n                    class: { open: _vm.openedMenu }\n                  },\n                  [_c(\"PopoverMenu\", { attrs: { menu: _vm.userActions } })],\n                  1\n                )\n              ],\n              1\n            )\n          : _vm._e(),\n        _vm._v(\" \"),\n        _c(\n          \"div\",\n          {\n            staticClass: \"feedback\",\n            style: { opacity: _vm.feedbackMessage !== \"\" ? 1 : 0 }\n          },\n          [\n            _c(\"div\", { staticClass: \"icon-checkmark\" }),\n            _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.feedbackMessage) + \"\\n\\t\\t\")\n          ]\n        )\n      ])\n    ]\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"Content\",\n    {\n      attrs: {\n        \"app-name\": \"settings\",\n        \"navigation-class\": { \"icon-loading\": _vm.loadingAddGroup }\n      }\n    },\n    [\n      _c(\n        \"AppNavigation\",\n        [\n          _c(\"AppNavigationNew\", {\n            attrs: {\n              \"button-id\": \"new-user-button\",\n              text: _vm.t(\"settings\", \"New user\"),\n              \"button-class\": \"icon-add\"\n            },\n            on: { click: _vm.toggleNewUserMenu }\n          }),\n          _vm._v(\" \"),\n          _c(\n            \"ul\",\n            { attrs: { id: \"usergrouplist\" } },\n            _vm._l(_vm.menu, function(item) {\n              return _c(\"AppNavigationItem\", {\n                key: item.key,\n                attrs: { item: item }\n              })\n            }),\n            1\n          ),\n          _vm._v(\" \"),\n          _c(\"AppNavigationSettings\", [\n            _c(\n              \"div\",\n              [\n                _c(\"p\", [_vm._v(_vm._s(_vm.t(\"settings\", \"Default quota:\")))]),\n                _vm._v(\" \"),\n                _c(\"Multiselect\", {\n                  attrs: {\n                    value: _vm.defaultQuota,\n                    options: _vm.quotaOptions,\n                    \"tag-placeholder\": \"create\",\n                    placeholder: _vm.t(\"settings\", \"Select default quota\"),\n                    label: \"label\",\n                    \"track-by\": \"id\",\n                    \"allow-empty\": false,\n                    taggable: true\n                  },\n                  on: { tag: _vm.validateQuota, input: _vm.setDefaultQuota }\n                })\n              ],\n              1\n            ),\n            _vm._v(\" \"),\n            _c(\"div\", [\n              _c(\"input\", {\n                directives: [\n                  {\n                    name: \"model\",\n                    rawName: \"v-model\",\n                    value: _vm.showLanguages,\n                    expression: \"showLanguages\"\n                  }\n                ],\n                staticClass: \"checkbox\",\n                attrs: { id: \"showLanguages\", type: \"checkbox\" },\n                domProps: {\n                  checked: Array.isArray(_vm.showLanguages)\n                    ? _vm._i(_vm.showLanguages, null) > -1\n                    : _vm.showLanguages\n                },\n                on: {\n                  change: function($event) {\n                    var $$a = _vm.showLanguages,\n                      $$el = $event.target,\n                      $$c = $$el.checked ? true : false\n                    if (Array.isArray($$a)) {\n                      var $$v = null,\n                        $$i = _vm._i($$a, $$v)\n                      if ($$el.checked) {\n                        $$i < 0 && (_vm.showLanguages = $$a.concat([$$v]))\n                      } else {\n                        $$i > -1 &&\n                          (_vm.showLanguages = $$a\n                            .slice(0, $$i)\n                            .concat($$a.slice($$i + 1)))\n                      }\n                    } else {\n                      _vm.showLanguages = $$c\n                    }\n                  }\n                }\n              }),\n              _vm._v(\" \"),\n              _c(\"label\", { attrs: { for: \"showLanguages\" } }, [\n                _vm._v(_vm._s(_vm.t(\"settings\", \"Show Languages\")))\n              ])\n            ]),\n            _vm._v(\" \"),\n            _c(\"div\", [\n              _c(\"input\", {\n                directives: [\n                  {\n                    name: \"model\",\n                    rawName: \"v-model\",\n                    value: _vm.showLastLogin,\n                    expression: \"showLastLogin\"\n                  }\n                ],\n                staticClass: \"checkbox\",\n                attrs: { id: \"showLastLogin\", type: \"checkbox\" },\n                domProps: {\n                  checked: Array.isArray(_vm.showLastLogin)\n                    ? _vm._i(_vm.showLastLogin, null) > -1\n                    : _vm.showLastLogin\n                },\n                on: {\n                  change: function($event) {\n                    var $$a = _vm.showLastLogin,\n                      $$el = $event.target,\n                      $$c = $$el.checked ? true : false\n                    if (Array.isArray($$a)) {\n                      var $$v = null,\n                        $$i = _vm._i($$a, $$v)\n                      if ($$el.checked) {\n                        $$i < 0 && (_vm.showLastLogin = $$a.concat([$$v]))\n                      } else {\n                        $$i > -1 &&\n                          (_vm.showLastLogin = $$a\n                            .slice(0, $$i)\n                            .concat($$a.slice($$i + 1)))\n                      }\n                    } else {\n                      _vm.showLastLogin = $$c\n                    }\n                  }\n                }\n              }),\n              _vm._v(\" \"),\n              _c(\"label\", { attrs: { for: \"showLastLogin\" } }, [\n                _vm._v(_vm._s(_vm.t(\"settings\", \"Show last login\")))\n              ])\n            ]),\n            _vm._v(\" \"),\n            _c(\"div\", [\n              _c(\"input\", {\n                directives: [\n                  {\n                    name: \"model\",\n                    rawName: \"v-model\",\n                    value: _vm.showUserBackend,\n                    expression: \"showUserBackend\"\n                  }\n                ],\n                staticClass: \"checkbox\",\n                attrs: { id: \"showUserBackend\", type: \"checkbox\" },\n                domProps: {\n                  checked: Array.isArray(_vm.showUserBackend)\n                    ? _vm._i(_vm.showUserBackend, null) > -1\n                    : _vm.showUserBackend\n                },\n                on: {\n                  change: function($event) {\n                    var $$a = _vm.showUserBackend,\n                      $$el = $event.target,\n                      $$c = $$el.checked ? true : false\n                    if (Array.isArray($$a)) {\n                      var $$v = null,\n                        $$i = _vm._i($$a, $$v)\n                      if ($$el.checked) {\n                        $$i < 0 && (_vm.showUserBackend = $$a.concat([$$v]))\n                      } else {\n                        $$i > -1 &&\n                          (_vm.showUserBackend = $$a\n                            .slice(0, $$i)\n                            .concat($$a.slice($$i + 1)))\n                      }\n                    } else {\n                      _vm.showUserBackend = $$c\n                    }\n                  }\n                }\n              }),\n              _vm._v(\" \"),\n              _c(\"label\", { attrs: { for: \"showUserBackend\" } }, [\n                _vm._v(_vm._s(_vm.t(\"settings\", \"Show user backend\")))\n              ])\n            ]),\n            _vm._v(\" \"),\n            _c(\"div\", [\n              _c(\"input\", {\n                directives: [\n                  {\n                    name: \"model\",\n                    rawName: \"v-model\",\n                    value: _vm.showStoragePath,\n                    expression: \"showStoragePath\"\n                  }\n                ],\n                staticClass: \"checkbox\",\n                attrs: { id: \"showStoragePath\", type: \"checkbox\" },\n                domProps: {\n                  checked: Array.isArray(_vm.showStoragePath)\n                    ? _vm._i(_vm.showStoragePath, null) > -1\n                    : _vm.showStoragePath\n                },\n                on: {\n                  change: function($event) {\n                    var $$a = _vm.showStoragePath,\n                      $$el = $event.target,\n                      $$c = $$el.checked ? true : false\n                    if (Array.isArray($$a)) {\n                      var $$v = null,\n                        $$i = _vm._i($$a, $$v)\n                      if ($$el.checked) {\n                        $$i < 0 && (_vm.showStoragePath = $$a.concat([$$v]))\n                      } else {\n                        $$i > -1 &&\n                          (_vm.showStoragePath = $$a\n                            .slice(0, $$i)\n                            .concat($$a.slice($$i + 1)))\n                      }\n                    } else {\n                      _vm.showStoragePath = $$c\n                    }\n                  }\n                }\n              }),\n              _vm._v(\" \"),\n              _c(\"label\", { attrs: { for: \"showStoragePath\" } }, [\n                _vm._v(_vm._s(_vm.t(\"settings\", \"Show storage path\")))\n              ])\n            ])\n          ])\n        ],\n        1\n      ),\n      _vm._v(\" \"),\n      _c(\n        \"AppContent\",\n        [\n          _c(\"UserList\", {\n            attrs: {\n              users: _vm.users,\n              \"show-config\": _vm.showConfig,\n              \"selected-group\": _vm.selectedGroup,\n              \"external-actions\": _vm.externalActions\n            },\n            scopedSlots: _vm._u([\n              {\n                key: \"content\",\n                fn: function() {\n                  return undefined\n                },\n                proxy: true\n              }\n            ])\n          })\n        ],\n        1\n      )\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"beab2b2c\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&\", function() {\n     var newContent = require(\"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&\");\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&scoped=true&lang=css&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"70cdb6d6\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&scoped=true&lang=css&\", function() {\n     var newContent = require(\"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&scoped=true&lang=css&\");\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}"],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACvCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACvCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/MA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5lBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACx6BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/JA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnfA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACNA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACzhBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACjeA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACjPA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;A","sourceRoot":""}