diff --git a/js/firstrunwizard-main.js b/js/firstrunwizard-main.js index 2eb6690db..7dba90116 100644 --- a/js/firstrunwizard-main.js +++ b/js/firstrunwizard-main.js @@ -1,3 +1,3 @@ /*! For license information please see firstrunwizard-main.js.LICENSE.txt */ -(()=>{var e={478:(e,t,n)=>{"use strict";var a=n(791),r=Object.prototype.hasOwnProperty,i={align:"text-align",valign:"vertical-align",height:"height",width:"width"};function o(e){var t;if("tr"===e.tagName||"td"===e.tagName||"th"===e.tagName)for(t in i)r.call(i,t)&&void 0!==e.properties[t]&&(s(e,i[t],e.properties[t]),delete e.properties[t])}function s(e,t,n){var a=(e.properties.style||"").trim();a&&!/;\s*/.test(a)&&(a+=";"),a&&(a+=" ");var r=a+t+": "+n+";";e.properties.style=r}e.exports=function(e){return a(e,"element",o),e}},3790:e=>{"use strict";function t(e){if("string"==typeof e)return function(e){return t;function t(t){return Boolean(t&&t.type===e)}}(e);if(null==e)return r;if("object"==typeof e)return("length"in e?a:n)(e);if("function"==typeof e)return e;throw new Error("Expected function, string, or object as test")}function n(e){return function(t){var n;for(n in e)if(t[n]!==e[n])return!1;return!0}}function a(e){var n=function(e){for(var n=[],a=e.length,r=-1;++r{"use strict";e.exports=o;var a=n(3790),r="skip",i=!1;function o(e,t,n,o){var l;function u(e,a,c){var d,h=[];return(t&&!l(e,a,c[c.length-1]||null)||(h=s(n(e,c)))[0]!==i)&&e.children&&h[0]!==r?(d=s(function(e,t){var n,a=-1,r=o?-1:1,s=(o?e.length:a)+r;for(;s>a&&s{"use strict";e.exports=s;var a=n(1150),r=a.CONTINUE,i=a.SKIP,o=a.EXIT;function s(e,t,n,r){"function"==typeof t&&"function"!=typeof n&&(r=n,n=t,t=null),a(e,t,(function(e,t){var a=t[t.length-1],r=a?a.children.indexOf(e):null;return n(e,r,a)}),r)}s.CONTINUE=r,s.SKIP=i,s.EXIT=o},2200:(e,t,n)=>{"use strict";var a=n(7888),r=void 0,i=[];a.subscribe("csrf-token-update",(function(e){r=e.token,i.forEach((function(t){try{t(e.token)}catch(e){console.error("error updating CSRF token observer",e)}}))}));var o=function(e,t){return e?e.getAttribute(t):null},s=void 0;t.getCurrentUser=function(){if(void 0!==s)return s;var e=null===document||void 0===document?void 0:document.getElementsByTagName("head")[0];if(!e)return null;var t=o(e,"data-user");return s=null===t?null:{uid:t,displayName:o(e,"data-user-displayname"),isAdmin:"undefined"!=typeof OC&&OC.isUserAdmin()}},t.getRequestToken=function(){if(void 0===r){var e=null===document||void 0===document?void 0:document.getElementsByTagName("head")[0];r=e?e.getAttribute("data-requesttoken"):null}return r},t.onRequestTokenUpdate=function(e){i.push(e)}},2556:(e,t,n)=>{"use strict";t.Kc=function(e){return new a.default(e)};var a=i(n(1957)),r=i(n(8971));function i(e){return e&&e.__esModule?e:{default:e}}function o(e,t){Object.keys(e).filter((e=>!t||t(e))).map(e.removeItem.bind(e))}},8971:(e,t)=>{"use strict";function n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=typeof a)return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;class a{constructor(e,t,r){n(this,"scope",void 0),n(this,"wrapped",void 0),this.scope=`${r?a.GLOBAL_SCOPE_PERSISTENT:a.GLOBAL_SCOPE_VOLATILE}_${btoa(e)}_`,this.wrapped=t}scopeKey(e){return`${this.scope}${e}`}setItem(e,t){this.wrapped.setItem(this.scopeKey(e),t)}getItem(e){return this.wrapped.getItem(this.scopeKey(e))}removeItem(e){this.wrapped.removeItem(this.scopeKey(e))}clear(){Object.keys(this.wrapped).filter((e=>e.startsWith(this.scope))).map(this.wrapped.removeItem.bind(this.wrapped))}}t.default=a,n(a,"GLOBAL_SCOPE_VOLATILE","nextcloud_vol"),n(a,"GLOBAL_SCOPE_PERSISTENT","nextcloud_per")},1957:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a,r=(a=n(8971))&&a.__esModule?a:{default:a};function i(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=typeof a)return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}t.default=class{constructor(e){i(this,"appId",void 0),i(this,"persisted",!1),i(this,"clearedOnLogout",!1),this.appId=e}persist(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this.persisted=e,this}clearOnLogout(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this.clearedOnLogout=e,this}build(){return new r.default(this.appId,this.persisted?window.localStorage:window.sessionStorage,!this.clearedOnLogout)}}},2515:(e,t,n)=>{"use strict";t.F=function(){try{return(0,a.loadState)("core","capabilities")}catch(e){return console.debug("Could not find capabilities initial state fall back to _oc_capabilities"),"_oc_capabilities"in window?window._oc_capabilities:{}}};var a=n(853)},853:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.loadState=function(e,t,n){var a=document.querySelector("#initial-state-".concat(e,"-").concat(t));if(null===a){if(void 0!==n)return n;throw new Error("Could not find initial state ".concat(t," of ").concat(e))}try{return JSON.parse(atob(a.value))}catch(n){throw new Error("Could not parse initial state ".concat(t," of ").concat(e))}},n(2222)},1356:(e,t,n)=>{"use strict";n(9070),n(2165),n(6992),n(8783),n(3948),Object.defineProperty(t,"__esModule",{value:!0}),t.ConsoleLogger=void 0,t.buildConsoleLogger=function(e){return new s(e)},n(9601),n(6649),n(6078),n(2526),n(1817),n(1539),n(9653);var a=n(6);function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function i(e,t){for(var n=0;n{"use strict";n(9070),n(2165),n(6992),n(8783),n(3948),Object.defineProperty(t,"__esModule",{value:!0}),t.LoggerBuilder=void 0,n(6649),n(6078),n(2526),n(1817),n(1539),n(9653);var a=n(2200),r=n(6);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function o(e,t){for(var n=0;n{"use strict";var a;n(9070),Object.defineProperty(t,"__esModule",{value:!0}),t.LogLevel=void 0,t.LogLevel=a,function(e){e[e.Debug=0]="Debug",e[e.Info=1]="Info",e[e.Warn=2]="Warn",e[e.Error=3]="Error",e[e.Fatal=4]="Fatal"}(a||(t.LogLevel=a={}))},7499:(e,t,n)=>{"use strict";n(9070),t.IY=o;var a=n(1356),r=n(5058),i=n(6);function o(){return new r.LoggerBuilder(a.buildConsoleLogger)}},9753:(e,t,n)=>{"use strict";n(9070),t.hp=t.nu=t.c=t.Ii=t.FW=void 0,n(9601),n(4916),n(5306),n(1539),n(9714),n(2772);t.c=function(e){return window.location.protocol+"//"+window.location.host+function(e){return i()+"/remote.php/"+e}(e)};t.Ii=function(e,t,n){var r=1===Object.assign({ocsVersion:2},n||{}).ocsVersion?1:2;return window.location.protocol+"//"+window.location.host+i()+"/ocs/v"+r+".php"+a(e,t,n)};var a=function(e,t,n){var a,r=Object.assign({escape:!0},n||{});return"/"!==e.charAt(0)&&(e="/"+e),a=(a=t||{})||{},e.replace(/{([^{}]*)}/g,(function(e,t){var n=a[t];return r.escape?"string"==typeof n||"number"==typeof n?encodeURIComponent(n.toString()):encodeURIComponent(e):"string"==typeof n||"number"==typeof n?n.toString():e}))};t.nu=function(e,t,n){var r,o,s,l=Object.assign({noRewrite:!1},n||{});return!0!==(null===(r=window)||void 0===r||null===(o=r.OC)||void 0===o||null===(s=o.config)||void 0===s?void 0:s.modRewriteWorking)||l.noRewrite?i()+"/index.php"+a(e,t,n):i()+a(e,t,n)};t.hp=function(e,t){return-1===t.indexOf(".")?r(e,"img",t+".svg"):r(e,"img",t)};var r=function(e,t,n){var a,r,o,s=-1!==(null===(a=window)||void 0===a||null===(r=a.OC)||void 0===r||null===(o=r.coreApps)||void 0===o?void 0:o.indexOf(e)),l=i();if("php"!==n.substring(n.length-3)||s)if("php"===n.substring(n.length-3)||s)l+="settings"!==e&&"core"!==e&&"search"!==e||"ajax"!==t?"/":"/index.php/",s||(l+="apps/"),""!==e&&(l+=e+="/"),t&&(l+=t+"/"),l+=n;else{var u,c,d;l=null===(u=window)||void 0===u||null===(c=u.OC)||void 0===c||null===(d=c.appswebroots)||void 0===d?void 0:d[e],t&&(l+="/"+t+"/"),"/"!==l.substring(l.length-1)&&(l+="/"),l+=n}else l+="/index.php/apps/"+e,"index.php"!==n&&(l+="/",t&&(l+=encodeURI(t+"/")),l+=n);return l};t.FW=r;var i=function(){var e,t;return(null===(e=window)||void 0===e||null===(t=e.OC)||void 0===t?void 0:t.webroot)||""}},9960:function(e){"undefined"!=typeof self&&self,e.exports=(()=>{var e={646:e=>{e.exports=function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t{e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},860:e=>{e.exports=function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}},206:e=>{e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}},319:(e,t,n)=>{var a=n(646),r=n(860),i=n(206);e.exports=function(e){return a(e)||r(e)||i()}},8:e=>{function t(n){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?e.exports=t=function(e){return typeof e}:e.exports=t=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(n)}e.exports=t}},t={};function n(a){var r=t[a];if(void 0!==r)return r.exports;var i=t[a]={exports:{}};return e[a](i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};return(()=>{"use strict";n.r(a),n.d(a,{VueSelect:()=>F,default:()=>T,mixins:()=>b});var e=n(319),t=n.n(e),r=n(8),i=n.n(r),o=n(713),s=n.n(o);const l={props:{autoscroll:{type:Boolean,default:!0}},watch:{typeAheadPointer:function(){this.autoscroll&&this.maybeAdjustScroll()},open:function(e){var t=this;this.autoscroll&&e&&this.$nextTick((function(){return t.maybeAdjustScroll()}))}},methods:{maybeAdjustScroll:function(){var e,t=(null===(e=this.$refs.dropdownMenu)||void 0===e?void 0:e.children[this.typeAheadPointer])||!1;if(t){var n=this.getDropdownViewport(),a=t.getBoundingClientRect(),r=a.top,i=a.bottom,o=a.height;if(rn.bottom)return this.$refs.dropdownMenu.scrollTop=t.offsetTop-(n.height-o)}},getDropdownViewport:function(){return this.$refs.dropdownMenu?this.$refs.dropdownMenu.getBoundingClientRect():{height:0,top:0,bottom:0}}}},u={data:function(){return{typeAheadPointer:-1}},watch:{filteredOptions:function(){if(this.resetFocusOnOptionsChange)for(var e=0;e=0;e--)if(this.selectable(this.filteredOptions[e])){this.typeAheadPointer=e;break}},typeAheadDown:function(){for(var e=this.typeAheadPointer+1;e0&&void 0!==arguments[0]?arguments[0]:null;return this.mutableLoading=null==e?!this.mutableLoading:e}}};function d(e,t,n,a,r,i,o,s){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),a&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),o?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(o)},u._ssrRegister=l):r&&(l=s?function(){r.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:r),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var d=u.beforeCreate;u.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:u}}const h={Deselect:d({},(function(){var e=this.$createElement,t=this._self._c||e;return t("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",width:"10",height:"10"}},[t("path",{attrs:{d:"M6.895455 5l2.842897-2.842898c.348864-.348863.348864-.914488 0-1.263636L9.106534.261648c-.348864-.348864-.914489-.348864-1.263636 0L5 3.104545 2.157102.261648c-.348863-.348864-.914488-.348864-1.263636 0L.261648.893466c-.348864.348864-.348864.914489 0 1.263636L3.104545 5 .261648 7.842898c-.348864.348863-.348864.914488 0 1.263636l.631818.631818c.348864.348864.914773.348864 1.263636 0L5 6.895455l2.842898 2.842897c.348863.348864.914772.348864 1.263636 0l.631818-.631818c.348864-.348864.348864-.914489 0-1.263636L6.895455 5z"}})])}),[],!1,null,null,null).exports,OpenIndicator:d({},(function(){var e=this.$createElement,t=this._self._c||e;return t("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"10"}},[t("path",{attrs:{d:"M9.211364 7.59931l4.48338-4.867229c.407008-.441854.407008-1.158247 0-1.60046l-.73712-.80023c-.407008-.441854-1.066904-.441854-1.474243 0L7 5.198617 2.51662.33139c-.407008-.441853-1.066904-.441853-1.474243 0l-.737121.80023c-.407008.441854-.407008 1.158248 0 1.600461l4.48338 4.867228L7 10l2.211364-2.40069z"}})])}),[],!1,null,null,null).exports},p={inserted:function(e,t,n){var a=n.context;if(a.appendToBody){document.body.appendChild(e);var r=a.$refs.toggle.getBoundingClientRect(),i=r.height,o=r.top,s=r.left,l=r.width,u=window.scrollX||window.pageXOffset,c=window.scrollY||window.pageYOffset;e.unbindPosition=a.calculatePosition(e,a,{width:l+"px",left:u+s+"px",top:c+o+i+"px"})}},unbind:function(e,t,n){n.context.appendToBody&&(e.unbindPosition&&"function"==typeof e.unbindPosition&&e.unbindPosition(),e.parentNode&&e.parentNode.removeChild(e))}},f=function(e){var t={};return Object.keys(e).sort().forEach((function(n){t[n]=e[n]})),JSON.stringify(t)};var g=0;const m=function(){return++g};function _(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function A(e){for(var t=1;t-1}},filter:{type:Function,default:function(e,t){var n=this;return e.filter((function(e){var a=n.getOptionLabel(e);return"number"==typeof a&&(a=a.toString()),n.filterBy(e,a,t)}))}},createOption:{type:Function,default:function(e){return"object"===i()(this.optionList[0])?s()({},this.label,e):e}},resetFocusOnOptionsChange:{type:Boolean,default:!0},resetOnOptionsChange:{default:!1,validator:function(e){return["function","boolean"].includes(i()(e))}},clearSearchOnBlur:{type:Function,default:function(e){var t=e.clearSearchOnSelect,n=e.multiple;return t&&!n}},noDrop:{type:Boolean,default:!1},inputId:{type:String},dir:{type:String,default:"auto"},selectOnTab:{type:Boolean,default:!1},selectOnKeyCodes:{type:Array,default:function(){return[13]}},searchInputQuerySelector:{type:String,default:"[type=search]"},mapKeydown:{type:Function,default:function(e,t){return e}},appendToBody:{type:Boolean,default:!1},calculatePosition:{type:Function,default:function(e,t,n){var a=n.width,r=n.top,i=n.left;e.style.top=r,e.style.left=i,e.style.width=a}},dropdownShouldOpen:{type:Function,default:function(e){var t=e.noDrop,n=e.open,a=e.mutableLoading;return!t&&n&&!a}},keyboardFocusBorder:{type:Boolean,default:!1},uid:{type:[String,Number],default:function(){return m()}}},data:function(){return{search:"",open:!1,isComposing:!1,isKeyboardNavigation:!1,pushedTags:[],_value:[]}},computed:{isTrackingValues:function(){return void 0===this.value||this.$options.propsData.hasOwnProperty("reduce")},selectedValue:function(){var e=this.value;return this.isTrackingValues&&(e=this.$data._value),null!=e&&""!==e?[].concat(e):[]},optionList:function(){return this.options.concat(this.pushTags?this.pushedTags:[])},searchEl:function(){return this.$scopedSlots.search?this.$refs.selectedOptions.querySelector(this.searchInputQuerySelector):this.$refs.search},scope:function(){var e=this,t={search:this.search,loading:this.loading,searching:this.searching,filteredOptions:this.filteredOptions};return{search:{attributes:A({disabled:this.disabled,placeholder:this.searchPlaceholder,tabindex:this.tabindex,readonly:!this.searchable,id:this.inputId,"aria-autocomplete":"list","aria-labelledby":"vs".concat(this.uid,"__combobox"),"aria-controls":"vs".concat(this.uid,"__listbox"),ref:"search",type:"search",autocomplete:this.autocomplete,value:this.search},this.dropdownOpen&&this.filteredOptions[this.typeAheadPointer]?{"aria-activedescendant":"vs".concat(this.uid,"__option-").concat(this.typeAheadPointer)}:{}),events:{compositionstart:function(){return e.isComposing=!0},compositionend:function(){return e.isComposing=!1},keydown:this.onSearchKeyDown,keypress:this.onSearchKeyPress,blur:this.onSearchBlur,focus:this.onSearchFocus,input:function(t){return e.search=t.target.value}}},spinner:{loading:this.mutableLoading},noOptions:{search:this.search,loading:this.mutableLoading,searching:this.searching},openIndicator:{attributes:{ref:"openIndicator",role:"presentation",class:"vs__open-indicator"}},listHeader:t,listFooter:t,header:A({},t,{deselect:this.deselect}),footer:A({},t,{deselect:this.deselect})}},childComponents:function(){return A({},h,{},this.components)},stateClasses:function(){return{"vs--open":this.dropdownOpen,"vs--single":!this.multiple,"vs--multiple":this.multiple,"vs--searching":this.searching&&!this.noDrop,"vs--searchable":this.searchable&&!this.noDrop,"vs--unsearchable":!this.searchable,"vs--loading":this.mutableLoading,"vs--disabled":this.disabled}},searching:function(){return!!this.search},dropdownOpen:function(){return this.dropdownShouldOpen(this)},searchPlaceholder:function(){return this.isValueEmpty&&this.placeholder?this.placeholder:void 0},filteredOptions:function(){var e=this,t=function(t){return null!==e.limit?t.slice(0,e.limit):t},n=[].concat(this.optionList);if(!this.filterable&&!this.taggable)return t(n);var a=this.search.length?this.filter(n,this.search,this):n;if(this.taggable&&this.search.length){var r=this.createOption(this.search);this.optionExists(r)||a.unshift(r)}return t(a)},isValueEmpty:function(){return 0===this.selectedValue.length},showClearButton:function(){return!this.multiple&&this.clearable&&!this.open&&!this.isValueEmpty}},watch:{options:function(e,t){var n=this;!this.taggable&&("function"==typeof n.resetOnOptionsChange?n.resetOnOptionsChange(e,t,n.selectedValue):n.resetOnOptionsChange)&&this.clearSelection(),this.value&&this.isTrackingValues&&this.setInternalValueFromOptions(this.value)},value:{immediate:!0,handler:function(e){this.isTrackingValues&&this.setInternalValueFromOptions(e)}},multiple:function(){this.clearSelection()},open:function(e){this.$emit(e?"open":"close")},search:function(e){e.length&&(this.open=!0)}},created:function(){this.mutableLoading=this.loading,this.$on("option:created",this.pushTag)},methods:{setInternalValueFromOptions:function(e){var t=this;Array.isArray(e)?this.$data._value=e.map((function(e){return t.findOptionFromReducedValue(e)})):this.$data._value=this.findOptionFromReducedValue(e)},select:function(e){this.$emit("option:selecting",e),this.isOptionSelected(e)?this.deselectFromDropdown&&(this.clearable||this.multiple&&this.selectedValue.length>1)&&this.deselect(e):(this.taggable&&!this.optionExists(e)&&this.$emit("option:created",e),this.multiple&&(e=this.selectedValue.concat(e)),this.updateValue(e),this.$emit("option:selected",e)),this.onAfterSelect(e)},deselect:function(e){var t=this;this.$emit("option:deselecting",e),this.updateValue(this.selectedValue.filter((function(n){return!t.optionComparator(n,e)}))),this.$emit("option:deselected",e)},keyboardDeselect:function(e,t){var n,a;this.deselect(e);var r=null===(n=this.$refs.deselectButtons)||void 0===n?void 0:n[t+1],i=null===(a=this.$refs.deselectButtons)||void 0===a?void 0:a[t-1],o=null!=r?r:i;o?o.focus():this.searchEl.focus()},clearSelection:function(){this.updateValue(this.multiple?[]:null),this.searchEl.focus()},onAfterSelect:function(e){var t=this;this.closeOnSelect&&(this.open=!this.open),this.clearSearchOnSelect&&(this.search=""),this.noDrop&&this.multiple&&this.$nextTick((function(){return t.$refs.search.focus()}))},updateValue:function(e){var t=this;void 0===this.value&&(this.$data._value=e),null!==e&&(e=Array.isArray(e)?e.map((function(e){return t.reduce(e)})):this.reduce(e)),this.$emit("input",e)},toggleDropdown:function(e){var n=e.target!==this.searchEl;n&&e.preventDefault();var a=[].concat(t()(this.$refs.deselectButtons||[]),t()([this.$refs.clearButton]||0));void 0===this.searchEl||a.filter(Boolean).some((function(t){return t.contains(e.target)||t===e.target}))?e.preventDefault():this.open&&n?this.searchEl.blur():this.disabled||(this.open=!0,this.searchEl.focus())},isOptionSelected:function(e){var t=this;return this.selectedValue.some((function(n){return t.optionComparator(n,e)}))},isOptionDeselectable:function(e){return this.isOptionSelected(e)&&this.deselectFromDropdown},hasKeyboardFocusBorder:function(e){return!(!this.keyboardFocusBorder||!this.isKeyboardNavigation)&&e===this.typeAheadPointer},optionComparator:function(e,t){return this.getOptionKey(e)===this.getOptionKey(t)},findOptionFromReducedValue:function(e){var n=this,a=[].concat(t()(this.options),t()(this.pushedTags)).filter((function(t){return JSON.stringify(n.reduce(t))===JSON.stringify(e)}));return 1===a.length?a[0]:a.find((function(e){return n.optionComparator(e,n.$data._value)}))||e},closeSearchOptions:function(){this.open=!1,this.$emit("search:blur")},maybeDeleteValue:function(){if(!this.searchEl.value.length&&this.selectedValue&&this.selectedValue.length&&this.clearable){var e=null;this.multiple&&(e=t()(this.selectedValue.slice(0,this.selectedValue.length-1))),this.updateValue(e)}},optionExists:function(e){var t=this;return this.optionList.some((function(n){return t.optionComparator(n,e)}))},optionAriaSelected:function(e){return this.selectable(e)?String(this.isOptionSelected(e)):null},normalizeOptionForSlot:function(e){return"object"===i()(e)?e:s()({},this.label,e)},pushTag:function(e){this.pushedTags.push(e)},onEscape:function(){this.search.length?this.search="":this.open=!1},onSearchBlur:function(){if(!this.mousedown||this.searching){var e=this.clearSearchOnSelect,t=this.multiple;return this.clearSearchOnBlur({clearSearchOnSelect:e,multiple:t})&&(this.search=""),void this.closeSearchOptions()}this.mousedown=!1,0!==this.search.length||0!==this.options.length||this.closeSearchOptions()},onSearchFocus:function(){this.open=!0,this.$emit("search:focus")},onMousedown:function(){this.mousedown=!0},onMouseUp:function(){this.mousedown=!1},onMouseMove:function(e,t){this.isKeyboardNavigation=!1,this.selectable(e)&&(this.typeAheadPointer=t)},onSearchKeyDown:function(e){var t=this,n=function(e){if(e.preventDefault(),t.open)return!t.isComposing&&t.typeAheadSelect();t.open=!0},a={8:function(e){return t.maybeDeleteValue()},9:function(e){return t.onTab()},27:function(e){return t.onEscape()},38:function(e){if(e.preventDefault(),t.isKeyboardNavigation=!0,t.open)return t.typeAheadUp();t.open=!0},40:function(e){if(e.preventDefault(),t.isKeyboardNavigation=!0,t.open)return t.typeAheadDown();t.open=!0}};this.selectOnKeyCodes.forEach((function(e){return a[e]=n}));var r=this.mapKeydown(a,this);if("function"==typeof r[e.keyCode])return r[e.keyCode](e)},onSearchKeyPress:function(e){this.open||32!==e.keyCode||(e.preventDefault(),this.open=!0)}}},(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"v-select",class:e.stateClasses,attrs:{dir:e.dir}},[e._t("header",null,null,e.scope.header),e._v(" "),n("div",{ref:"toggle",staticClass:"vs__dropdown-toggle",attrs:{id:"vs"+e.uid+"__combobox",role:"combobox","aria-expanded":e.dropdownOpen.toString(),"aria-owns":"vs"+e.uid+"__listbox","aria-label":e.ariaLabelCombobox},on:{mousedown:function(t){return e.toggleDropdown(t)}}},[n("div",{ref:"selectedOptions",staticClass:"vs__selected-options"},[e._l(e.selectedValue,(function(t,a){return e._t("selected-option-container",[n("span",{key:e.getOptionKey(t),staticClass:"vs__selected"},[e._t("selected-option",[e._v("\n "+e._s(e.getOptionLabel(t))+"\n ")],null,e.normalizeOptionForSlot(t)),e._v(" "),e.multiple?n("button",{ref:"deselectButtons",refInFor:!0,staticClass:"vs__deselect",attrs:{disabled:e.disabled,type:"button",title:e.ariaLabelDeselectOption(e.getOptionLabel(t)),"aria-label":e.ariaLabelDeselectOption(e.getOptionLabel(t))},on:{mousedown:function(n){return n.stopPropagation(),e.deselect(t)},keydown:function(n){return!n.type.indexOf("key")&&e._k(n.keyCode,"enter",13,n.key,"Enter")?null:e.keyboardDeselect(t,a)}}},[n(e.childComponents.Deselect,{tag:"component"})],1):e._e()],2)],{option:e.normalizeOptionForSlot(t),deselect:e.deselect,multiple:e.multiple,disabled:e.disabled})})),e._v(" "),e._t("search",[n("input",e._g(e._b({staticClass:"vs__search"},"input",e.scope.search.attributes,!1),e.scope.search.events))],null,e.scope.search)],2),e._v(" "),n("div",{ref:"actions",staticClass:"vs__actions"},[n("button",{directives:[{name:"show",rawName:"v-show",value:e.showClearButton,expression:"showClearButton"}],ref:"clearButton",staticClass:"vs__clear",attrs:{disabled:e.disabled,type:"button",title:e.ariaLabelClearSelected,"aria-label":e.ariaLabelClearSelected},on:{click:e.clearSelection}},[n(e.childComponents.Deselect,{tag:"component"})],1),e._v(" "),e._t("open-indicator",[e.noDrop?e._e():n(e.childComponents.OpenIndicator,e._b({tag:"component"},"component",e.scope.openIndicator.attributes,!1))],null,e.scope.openIndicator),e._v(" "),e._t("spinner",[n("div",{directives:[{name:"show",rawName:"v-show",value:e.mutableLoading,expression:"mutableLoading"}],staticClass:"vs__spinner"},[e._v("Loading...")])],null,e.scope.spinner)],2)]),e._v(" "),n("transition",{attrs:{name:e.transition}},[e.dropdownOpen?n("ul",{directives:[{name:"append-to-body",rawName:"v-append-to-body"}],key:"vs"+e.uid+"__listbox",ref:"dropdownMenu",staticClass:"vs__dropdown-menu",attrs:{id:"vs"+e.uid+"__listbox",role:"listbox","aria-multiselectable":e.multiple,tabindex:"-1"},on:{mousedown:function(t){return t.preventDefault(),e.onMousedown(t)},mouseup:e.onMouseUp}},[e._t("list-header",null,null,e.scope.listHeader),e._v(" "),e._l(e.filteredOptions,(function(t,a){return n("li",{key:e.getOptionKey(t),staticClass:"vs__dropdown-option",class:{"vs__dropdown-option--deselect":e.isOptionDeselectable(t)&&a===e.typeAheadPointer,"vs__dropdown-option--selected":e.isOptionSelected(t),"vs__dropdown-option--highlight":a===e.typeAheadPointer,"vs__dropdown-option--kb-focus":e.hasKeyboardFocusBorder(a),"vs__dropdown-option--disabled":!e.selectable(t)},attrs:{id:"vs"+e.uid+"__option-"+a,role:"option","aria-selected":e.optionAriaSelected(t)},on:{mousemove:function(n){return e.onMouseMove(t,a)},click:function(n){n.preventDefault(),n.stopPropagation(),e.selectable(t)&&e.select(t)}}},[e._t("option",[e._v("\n "+e._s(e.getOptionLabel(t))+"\n ")],null,e.normalizeOptionForSlot(t))],2)})),e._v(" "),0===e.filteredOptions.length?n("li",{staticClass:"vs__no-options"},[e._t("no-options",[e._v("\n Sorry, no matching options.\n ")],null,e.scope.noOptions)],2):e._e(),e._v(" "),e._t("list-footer",null,null,e.scope.listFooter)],2):n("ul",{staticStyle:{display:"none",visibility:"hidden"},attrs:{id:"vs"+e.uid+"__listbox",role:"listbox"}})]),e._v(" "),e._t("footer",null,null,e.scope.footer)],2)}),[],!1,null,null,null).exports,b={ajax:c,pointer:u,pointerScroll:l},T=F})(),a})()},487:e=>{var t={utf8:{stringToBytes:function(e){return t.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(t.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],n=0;n{"use strict";var a=n(614),r=n(6330),i=TypeError;e.exports=function(e){if(a(e))return e;throw new i(r(e)+" is not a function")}},6077:(e,t,n)=>{"use strict";var a=n(614),r=String,i=TypeError;e.exports=function(e){if("object"==typeof e||a(e))return e;throw new i("Can't set "+r(e)+" as a prototype")}},1223:(e,t,n)=>{"use strict";var a=n(5112),r=n(30),i=n(3070).f,o=a("unscopables"),s=Array.prototype;void 0===s[o]&&i(s,o,{configurable:!0,value:r(null)}),e.exports=function(e){s[o][e]=!0}},1530:(e,t,n)=>{"use strict";var a=n(8710).charAt;e.exports=function(e,t,n){return t+(n?a(e,t).length:1)}},9670:(e,t,n)=>{"use strict";var a=n(111),r=String,i=TypeError;e.exports=function(e){if(a(e))return e;throw new i(r(e)+" is not an object")}},1318:(e,t,n)=>{"use strict";var a=n(5656),r=n(1400),i=n(6244),o=function(e){return function(t,n,o){var s,l=a(t),u=i(l),c=r(o,u);if(e&&n!=n){for(;u>c;)if((s=l[c++])!=s)return!0}else for(;u>c;c++)if((e||c in l)&&l[c]===n)return e||c||0;return!e&&-1}};e.exports={includes:o(!0),indexOf:o(!1)}},2092:(e,t,n)=>{"use strict";var a=n(9974),r=n(1702),i=n(8361),o=n(7908),s=n(6244),l=n(5417),u=r([].push),c=function(e){var t=1===e,n=2===e,r=3===e,c=4===e,d=6===e,h=7===e,p=5===e||d;return function(f,g,m,_){for(var A,F,b=o(f),T=i(b),v=a(g,m),y=s(T),E=0,C=_||l,D=t?C(f,y):n||h?C(f,0):void 0;y>E;E++)if((p||E in T)&&(F=v(A=T[E],E,b),e))if(t)D[E]=F;else if(F)switch(e){case 3:return!0;case 5:return A;case 6:return E;case 2:u(D,A)}else switch(e){case 4:return!1;case 7:u(D,A)}return d?-1:r||c?c:D}};e.exports={forEach:c(0),map:c(1),filter:c(2),some:c(3),every:c(4),find:c(5),findIndex:c(6),filterReject:c(7)}},1194:(e,t,n)=>{"use strict";var a=n(7293),r=n(5112),i=n(7392),o=r("species");e.exports=function(e){return i>=51||!a((function(){var t=[];return(t.constructor={})[o]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},9341:(e,t,n)=>{"use strict";var a=n(7293);e.exports=function(e,t){var n=[][e];return!!n&&a((function(){n.call(null,t||function(){return 1},1)}))}},1589:(e,t,n)=>{"use strict";var a=n(1400),r=n(6244),i=n(6135),o=Array,s=Math.max;e.exports=function(e,t,n){for(var l=r(e),u=a(t,l),c=a(void 0===n?l:n,l),d=o(s(c-u,0)),h=0;u{"use strict";var a=n(1702);e.exports=a([].slice)},7475:(e,t,n)=>{"use strict";var a=n(3157),r=n(4411),i=n(111),o=n(5112)("species"),s=Array;e.exports=function(e){var t;return a(e)&&(t=e.constructor,(r(t)&&(t===s||a(t.prototype))||i(t)&&null===(t=t[o]))&&(t=void 0)),void 0===t?s:t}},5417:(e,t,n)=>{"use strict";var a=n(7475);e.exports=function(e,t){return new(a(e))(0===t?0:t)}},4326:(e,t,n)=>{"use strict";var a=n(1702),r=a({}.toString),i=a("".slice);e.exports=function(e){return i(r(e),8,-1)}},648:(e,t,n)=>{"use strict";var a=n(1694),r=n(614),i=n(4326),o=n(5112)("toStringTag"),s=Object,l="Arguments"===i(function(){return arguments}());e.exports=a?i:function(e){var t,n,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=s(e),o))?n:l?i(t):"Object"===(a=i(t))&&r(t.callee)?"Arguments":a}},9920:(e,t,n)=>{"use strict";var a=n(2597),r=n(3887),i=n(1236),o=n(3070);e.exports=function(e,t,n){for(var s=r(t),l=o.f,u=i.f,c=0;c{"use strict";var a=n(7293);e.exports=!a((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},6178:e=>{"use strict";e.exports=function(e,t){return{value:e,done:t}}},8880:(e,t,n)=>{"use strict";var a=n(9781),r=n(3070),i=n(9114);e.exports=a?function(e,t,n){return r.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},9114:e=>{"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},6135:(e,t,n)=>{"use strict";var a=n(4948),r=n(3070),i=n(9114);e.exports=function(e,t,n){var o=a(t);o in e?r.f(e,o,i(0,n)):e[o]=n}},8709:(e,t,n)=>{"use strict";var a=n(9670),r=n(2140),i=TypeError;e.exports=function(e){if(a(this),"string"===e||"default"===e)e="string";else if("number"!==e)throw new i("Incorrect hint");return r(this,e)}},7045:(e,t,n)=>{"use strict";var a=n(6339),r=n(3070);e.exports=function(e,t,n){return n.get&&a(n.get,t,{getter:!0}),n.set&&a(n.set,t,{setter:!0}),r.f(e,t,n)}},8052:(e,t,n)=>{"use strict";var a=n(614),r=n(3070),i=n(6339),o=n(3072);e.exports=function(e,t,n,s){s||(s={});var l=s.enumerable,u=void 0!==s.name?s.name:t;if(a(n)&&i(n,u,s),s.global)l?e[t]=n:o(t,n);else{try{s.unsafe?e[t]&&(l=!0):delete e[t]}catch(e){}l?e[t]=n:r.f(e,t,{value:n,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return e}},3072:(e,t,n)=>{"use strict";var a=n(7854),r=Object.defineProperty;e.exports=function(e,t){try{r(a,e,{value:t,configurable:!0,writable:!0})}catch(n){a[e]=t}return t}},9781:(e,t,n)=>{"use strict";var a=n(7293);e.exports=!a((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))},4154:e=>{"use strict";var t="object"==typeof document&&document.all,n=void 0===t&&void 0!==t;e.exports={all:t,IS_HTMLDDA:n}},317:(e,t,n)=>{"use strict";var a=n(7854),r=n(111),i=a.document,o=r(i)&&r(i.createElement);e.exports=function(e){return o?i.createElement(e):{}}},7207:e=>{"use strict";var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t("Maximum allowed index exceeded");return e}},8324:e=>{"use strict";e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},8509:(e,t,n)=>{"use strict";var a=n(317)("span").classList,r=a&&a.constructor&&a.constructor.prototype;e.exports=r===Object.prototype?void 0:r},8113:e=>{"use strict";e.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},7392:(e,t,n)=>{"use strict";var a,r,i=n(7854),o=n(8113),s=i.process,l=i.Deno,u=s&&s.versions||l&&l.version,c=u&&u.v8;c&&(r=(a=c.split("."))[0]>0&&a[0]<4?1:+(a[0]+a[1])),!r&&o&&(!(a=o.match(/Edge\/(\d+)/))||a[1]>=74)&&(a=o.match(/Chrome\/(\d+)/))&&(r=+a[1]),e.exports=r},748:e=>{"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},2109:(e,t,n)=>{"use strict";var a=n(7854),r=n(1236).f,i=n(8880),o=n(8052),s=n(3072),l=n(9920),u=n(4705);e.exports=function(e,t){var n,c,d,h,p,f=e.target,g=e.global,m=e.stat;if(n=g?a:m?a[f]||s(f,{}):(a[f]||{}).prototype)for(c in t){if(h=t[c],d=e.dontCallGetSet?(p=r(n,c))&&p.value:n[c],!u(g?c:f+(m?".":"#")+c,e.forced)&&void 0!==d){if(typeof h==typeof d)continue;l(h,d)}(e.sham||d&&d.sham)&&i(h,"sham",!0),o(n,c,h,e)}}},7293:e=>{"use strict";e.exports=function(e){try{return!!e()}catch(e){return!0}}},7007:(e,t,n)=>{"use strict";n(4916);var a=n(1470),r=n(8052),i=n(2261),o=n(7293),s=n(5112),l=n(8880),u=s("species"),c=RegExp.prototype;e.exports=function(e,t,n,d){var h=s(e),p=!o((function(){var t={};return t[h]=function(){return 7},7!==""[e](t)})),f=p&&!o((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[u]=function(){return n},n.flags="",n[h]=/./[h]),n.exec=function(){return t=!0,null},n[h](""),!t}));if(!p||!f||n){var g=a(/./[h]),m=t(h,""[e],(function(e,t,n,r,o){var s=a(e),l=t.exec;return l===i||l===c.exec?p&&!o?{done:!0,value:g(t,n,r)}:{done:!0,value:s(n,t,r)}:{done:!1}}));r(String.prototype,e,m[0]),r(c,h,m[1])}d&&l(c[h],"sham",!0)}},2104:(e,t,n)=>{"use strict";var a=n(4374),r=Function.prototype,i=r.apply,o=r.call;e.exports="object"==typeof Reflect&&Reflect.apply||(a?o.bind(i):function(){return o.apply(i,arguments)})},9974:(e,t,n)=>{"use strict";var a=n(1470),r=n(9662),i=n(4374),o=a(a.bind);e.exports=function(e,t){return r(e),void 0===t?e:i?o(e,t):function(){return e.apply(t,arguments)}}},4374:(e,t,n)=>{"use strict";var a=n(7293);e.exports=!a((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},6916:(e,t,n)=>{"use strict";var a=n(4374),r=Function.prototype.call;e.exports=a?r.bind(r):function(){return r.apply(r,arguments)}},6530:(e,t,n)=>{"use strict";var a=n(9781),r=n(2597),i=Function.prototype,o=a&&Object.getOwnPropertyDescriptor,s=r(i,"name"),l=s&&"something"===function(){}.name,u=s&&(!a||a&&o(i,"name").configurable);e.exports={EXISTS:s,PROPER:l,CONFIGURABLE:u}},5668:(e,t,n)=>{"use strict";var a=n(1702),r=n(9662);e.exports=function(e,t,n){try{return a(r(Object.getOwnPropertyDescriptor(e,t)[n]))}catch(e){}}},1470:(e,t,n)=>{"use strict";var a=n(4326),r=n(1702);e.exports=function(e){if("Function"===a(e))return r(e)}},1702:(e,t,n)=>{"use strict";var a=n(4374),r=Function.prototype,i=r.call,o=a&&r.bind.bind(i,i);e.exports=a?o:function(e){return function(){return i.apply(e,arguments)}}},5005:(e,t,n)=>{"use strict";var a=n(7854),r=n(614),i=function(e){return r(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?i(a[e]):a[e]&&a[e][t]}},8044:(e,t,n)=>{"use strict";var a=n(1702),r=n(3157),i=n(614),o=n(4326),s=n(1340),l=a([].push);e.exports=function(e){if(i(e))return e;if(r(e)){for(var t=e.length,n=[],a=0;a{"use strict";var a=n(9662),r=n(8554);e.exports=function(e,t){var n=e[t];return r(n)?void 0:a(n)}},647:(e,t,n)=>{"use strict";var a=n(1702),r=n(7908),i=Math.floor,o=a("".charAt),s=a("".replace),l=a("".slice),u=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,c=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,a,d,h){var p=n+e.length,f=a.length,g=c;return void 0!==d&&(d=r(d),g=u),s(h,g,(function(r,s){var u;switch(o(s,0)){case"$":return"$";case"&":return e;case"`":return l(t,0,n);case"'":return l(t,p);case"<":u=d[l(s,1,-1)];break;default:var c=+s;if(0===c)return r;if(c>f){var h=i(c/10);return 0===h?r:h<=f?void 0===a[h-1]?o(s,1):a[h-1]+o(s,1):r}u=a[c-1]}return void 0===u?"":u}))}},7854:function(e,t,n){"use strict";var a=function(e){return e&&e.Math===Math&&e};e.exports=a("object"==typeof globalThis&&globalThis)||a("object"==typeof window&&window)||a("object"==typeof self&&self)||a("object"==typeof n.g&&n.g)||function(){return this}()||this||Function("return this")()},2597:(e,t,n)=>{"use strict";var a=n(1702),r=n(7908),i=a({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return i(r(e),t)}},3501:e=>{"use strict";e.exports={}},490:(e,t,n)=>{"use strict";var a=n(5005);e.exports=a("document","documentElement")},4664:(e,t,n)=>{"use strict";var a=n(9781),r=n(7293),i=n(317);e.exports=!a&&!r((function(){return 7!==Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},8361:(e,t,n)=>{"use strict";var a=n(1702),r=n(7293),i=n(4326),o=Object,s=a("".split);e.exports=r((function(){return!o("z").propertyIsEnumerable(0)}))?function(e){return"String"===i(e)?s(e,""):o(e)}:o},9587:(e,t,n)=>{"use strict";var a=n(614),r=n(111),i=n(7674);e.exports=function(e,t,n){var o,s;return i&&a(o=t.constructor)&&o!==n&&r(s=o.prototype)&&s!==n.prototype&&i(e,s),e}},2788:(e,t,n)=>{"use strict";var a=n(1702),r=n(614),i=n(5465),o=a(Function.toString);r(i.inspectSource)||(i.inspectSource=function(e){return o(e)}),e.exports=i.inspectSource},9909:(e,t,n)=>{"use strict";var a,r,i,o=n(4811),s=n(7854),l=n(111),u=n(8880),c=n(2597),d=n(5465),h=n(6200),p=n(3501),f="Object already initialized",g=s.TypeError,m=s.WeakMap;if(o||d.state){var _=d.state||(d.state=new m);_.get=_.get,_.has=_.has,_.set=_.set,a=function(e,t){if(_.has(e))throw new g(f);return t.facade=e,_.set(e,t),t},r=function(e){return _.get(e)||{}},i=function(e){return _.has(e)}}else{var A=h("state");p[A]=!0,a=function(e,t){if(c(e,A))throw new g(f);return t.facade=e,u(e,A,t),t},r=function(e){return c(e,A)?e[A]:{}},i=function(e){return c(e,A)}}e.exports={set:a,get:r,has:i,enforce:function(e){return i(e)?r(e):a(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=r(t)).type!==e)throw new g("Incompatible receiver, "+e+" required");return n}}}},3157:(e,t,n)=>{"use strict";var a=n(4326);e.exports=Array.isArray||function(e){return"Array"===a(e)}},614:(e,t,n)=>{"use strict";var a=n(4154),r=a.all;e.exports=a.IS_HTMLDDA?function(e){return"function"==typeof e||e===r}:function(e){return"function"==typeof e}},4411:(e,t,n)=>{"use strict";var a=n(1702),r=n(7293),i=n(614),o=n(648),s=n(5005),l=n(2788),u=function(){},c=[],d=s("Reflect","construct"),h=/^\s*(?:class|function)\b/,p=a(h.exec),f=!h.test(u),g=function(e){if(!i(e))return!1;try{return d(u,c,e),!0}catch(e){return!1}},m=function(e){if(!i(e))return!1;switch(o(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return f||!!p(h,l(e))}catch(e){return!0}};m.sham=!0,e.exports=!d||r((function(){var e;return g(g.call)||!g(Object)||!g((function(){e=!0}))||e}))?m:g},4705:(e,t,n)=>{"use strict";var a=n(7293),r=n(614),i=/#|\.prototype\./,o=function(e,t){var n=l[s(e)];return n===c||n!==u&&(r(t)?a(t):!!t)},s=o.normalize=function(e){return String(e).replace(i,".").toLowerCase()},l=o.data={},u=o.NATIVE="N",c=o.POLYFILL="P";e.exports=o},8554:e=>{"use strict";e.exports=function(e){return null==e}},111:(e,t,n)=>{"use strict";var a=n(614),r=n(4154),i=r.all;e.exports=r.IS_HTMLDDA?function(e){return"object"==typeof e?null!==e:a(e)||e===i}:function(e){return"object"==typeof e?null!==e:a(e)}},1913:e=>{"use strict";e.exports=!1},2190:(e,t,n)=>{"use strict";var a=n(5005),r=n(614),i=n(7976),o=n(3307),s=Object;e.exports=o?function(e){return"symbol"==typeof e}:function(e){var t=a("Symbol");return r(t)&&i(t.prototype,s(e))}},3061:(e,t,n)=>{"use strict";var a=n(3383).IteratorPrototype,r=n(30),i=n(9114),o=n(8003),s=n(7497),l=function(){return this};e.exports=function(e,t,n,u){var c=t+" Iterator";return e.prototype=r(a,{next:i(+!u,n)}),o(e,c,!1,!0),s[c]=l,e}},1656:(e,t,n)=>{"use strict";var a=n(2109),r=n(6916),i=n(1913),o=n(6530),s=n(614),l=n(3061),u=n(9518),c=n(7674),d=n(8003),h=n(8880),p=n(8052),f=n(5112),g=n(7497),m=n(3383),_=o.PROPER,A=o.CONFIGURABLE,F=m.IteratorPrototype,b=m.BUGGY_SAFARI_ITERATORS,T=f("iterator"),v="keys",y="values",E="entries",C=function(){return this};e.exports=function(e,t,n,o,f,m,D){l(n,t,o);var k,w,S,x=function(e){if(e===f&&M)return M;if(!b&&e&&e in R)return R[e];switch(e){case v:case y:case E:return function(){return new n(this,e)}}return function(){return new n(this)}},B=t+" Iterator",N=!1,R=e.prototype,O=R[T]||R["@@iterator"]||f&&R[f],M=!b&&O||x(f),j="Array"===t&&R.entries||O;if(j&&(k=u(j.call(new e)))!==Object.prototype&&k.next&&(i||u(k)===F||(c?c(k,F):s(k[T])||p(k,T,C)),d(k,B,!0,!0),i&&(g[B]=C)),_&&f===y&&O&&O.name!==y&&(!i&&A?h(R,"name",y):(N=!0,M=function(){return r(O,this)})),f)if(w={values:x(y),keys:m?M:x(v),entries:x(E)},D)for(S in w)(b||N||!(S in R))&&p(R,S,w[S]);else a({target:t,proto:!0,forced:b||N},w);return i&&!D||R[T]===M||p(R,T,M,{name:f}),g[t]=M,w}},3383:(e,t,n)=>{"use strict";var a,r,i,o=n(7293),s=n(614),l=n(111),u=n(30),c=n(9518),d=n(8052),h=n(5112),p=n(1913),f=h("iterator"),g=!1;[].keys&&("next"in(i=[].keys())?(r=c(c(i)))!==Object.prototype&&(a=r):g=!0),!l(a)||o((function(){var e={};return a[f].call(e)!==e}))?a={}:p&&(a=u(a)),s(a[f])||d(a,f,(function(){return this})),e.exports={IteratorPrototype:a,BUGGY_SAFARI_ITERATORS:g}},7497:e=>{"use strict";e.exports={}},6244:(e,t,n)=>{"use strict";var a=n(7466);e.exports=function(e){return a(e.length)}},6339:(e,t,n)=>{"use strict";var a=n(1702),r=n(7293),i=n(614),o=n(2597),s=n(9781),l=n(6530).CONFIGURABLE,u=n(2788),c=n(9909),d=c.enforce,h=c.get,p=String,f=Object.defineProperty,g=a("".slice),m=a("".replace),_=a([].join),A=s&&!r((function(){return 8!==f((function(){}),"length",{value:8}).length})),F=String(String).split("String"),b=e.exports=function(e,t,n){"Symbol("===g(p(t),0,7)&&(t="["+m(p(t),/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!o(e,"name")||l&&e.name!==t)&&(s?f(e,"name",{value:t,configurable:!0}):e.name=t),A&&n&&o(n,"arity")&&e.length!==n.arity&&f(e,"length",{value:n.arity});try{n&&o(n,"constructor")&&n.constructor?s&&f(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var a=d(e);return o(a,"source")||(a.source=_(F,"string"==typeof t?t:"")),e};Function.prototype.toString=b((function(){return i(this)&&h(this).source||u(this)}),"toString")},4758:e=>{"use strict";var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var a=+e;return(a>0?n:t)(a)}},1574:(e,t,n)=>{"use strict";var a=n(9781),r=n(1702),i=n(6916),o=n(7293),s=n(1956),l=n(5181),u=n(5296),c=n(7908),d=n(8361),h=Object.assign,p=Object.defineProperty,f=r([].concat);e.exports=!h||o((function(){if(a&&1!==h({b:1},h(p({},"a",{enumerable:!0,get:function(){p(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol("assign detection"),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach((function(e){t[e]=e})),7!==h({},e)[n]||s(h({},t)).join("")!==r}))?function(e,t){for(var n=c(e),r=arguments.length,o=1,h=l.f,p=u.f;r>o;)for(var g,m=d(arguments[o++]),_=h?f(s(m),h(m)):s(m),A=_.length,F=0;A>F;)g=_[F++],a&&!i(p,m,g)||(n[g]=m[g]);return n}:h},30:(e,t,n)=>{"use strict";var a,r=n(9670),i=n(6048),o=n(748),s=n(3501),l=n(490),u=n(317),c=n(6200),d=c("IE_PROTO"),h=function(){},p=function(e){return"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon chevron-right-icon\",attrs:{\"aria-hidden\":!_vm.title,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import t from \"vue\";\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ \n *\n * @author John Molakvoæ \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\nconst i = {\n before() {\n (!this.$slots.default || this.text.trim() === \"\") && (t.util.warn(`${this.$options.name} cannot be empty and requires a meaningful text content`, this), this.$destroy(), this.$el.remove());\n },\n beforeUpdate() {\n this.text = this.getText();\n },\n data() {\n return {\n // $slots are not reactive.\n // We need to update the content manually\n text: this.getText()\n };\n },\n computed: {\n isLongText() {\n return this.text && this.text.trim().length > 20;\n }\n },\n methods: {\n getText() {\n return this.$slots.default ? this.$slots.default[0].text.trim() : \"\";\n }\n }\n};\nexport {\n i as A\n};\n","import { A as n } from \"./actionGlobal-8c1c28c9.mjs\";\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ \n *\n * @author John Molakvoæ \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\nconst l = function(i, t) {\n let e = i.$parent;\n for (; e; ) {\n if (e.$options.name === t)\n return e;\n e = e.$parent;\n }\n};\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ \n *\n * @author John Molakvoæ \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\nconst r = {\n mixins: [n],\n props: {\n /**\n * Icon to show with the action, can be either a CSS class or an URL\n */\n icon: {\n type: String,\n default: \"\"\n },\n /**\n * The main text content of the entry.\n */\n name: {\n type: String,\n default: \"\"\n },\n /**\n * The title attribute of the element.\n */\n title: {\n type: String,\n default: \"\"\n },\n /**\n * Whether we close the Actions menu after the click\n */\n closeAfterClick: {\n type: Boolean,\n default: !1\n },\n /**\n * Aria label for the button. Not needed if the button has text.\n */\n ariaLabel: {\n type: String,\n default: null\n },\n /**\n * aria-hidden attribute for the icon slot\n */\n ariaHidden: {\n type: Boolean,\n default: null\n }\n },\n emits: [\n \"click\"\n ],\n computed: {\n isIconUrl() {\n try {\n return new URL(this.icon);\n } catch {\n return !1;\n }\n }\n },\n methods: {\n onClick(i) {\n if (this.$emit(\"click\", i), this.closeAfterClick) {\n const t = l(this, \"NcActions\");\n t && t.closeMenu && t.closeMenu(!1);\n }\n }\n }\n};\nexport {\n r as A\n};\n","function v(r, a, d, h, i, t, f, u) {\n var e = typeof r == \"function\" ? r.options : r;\n a && (e.render = a, e.staticRenderFns = d, e._compiled = !0), h && (e.functional = !0), t && (e._scopeId = \"data-v-\" + t);\n var o;\n if (f ? (o = function(n) {\n n = n || // cached call\n this.$vnode && this.$vnode.ssrContext || // stateful\n this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext, !n && typeof __VUE_SSR_CONTEXT__ < \"u\" && (n = __VUE_SSR_CONTEXT__), i && i.call(this, n), n && n._registeredComponents && n._registeredComponents.add(f);\n }, e._ssrRegister = o) : i && (o = u ? function() {\n i.call(\n this,\n (e.functional ? this.parent : this).$root.$options.shadowRoot\n );\n } : i), o)\n if (e.functional) {\n e._injectStyles = o;\n var l = e.render;\n e.render = function(p, _) {\n return o.call(_), l(p, _);\n };\n } else {\n var s = e.beforeCreate;\n e.beforeCreate = s ? [].concat(s, o) : [o];\n }\n return {\n exports: r,\n options: e\n };\n}\nexport {\n v as n\n};\n","import \"../assets/index-0e9b11c7.css\";\nimport o from \"vue-material-design-icons/ChevronRight.vue\";\nimport { A as a } from \"../chunks/actionText-a64be267.mjs\";\nimport { n as s } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nconst e = {\n name: \"NcActionButton\",\n components: {\n ChevronRightIcon: o\n },\n mixins: [a],\n props: {\n /**\n * disabled state of the action button\n */\n disabled: {\n type: Boolean,\n default: !1\n },\n /**\n * aria-hidden attribute for the icon slot\n */\n ariaHidden: {\n type: Boolean,\n default: null\n },\n /**\n * If this is a menu, a chevron icon will\n * be added at the end of the line\n */\n isMenu: {\n type: Boolean,\n default: !1\n }\n },\n computed: {\n /**\n * determines if the action is focusable\n *\n * @return {boolean} is the action focusable ?\n */\n isFocusable() {\n return !this.disabled;\n }\n }\n};\nvar i = function() {\n var t = this, n = t._self._c;\n return n(\"li\", { staticClass: \"action\", class: { \"action--disabled\": t.disabled } }, [n(\"button\", { staticClass: \"action-button\", class: { focusable: t.isFocusable }, attrs: { \"aria-label\": t.ariaLabel, title: t.title, role: \"menuitem\", type: \"button\" }, on: { click: t.onClick } }, [t._t(\"icon\", function() {\n return [n(\"span\", { staticClass: \"action-button__icon\", class: [t.isIconUrl ? \"action-button__icon--url\" : t.icon], style: { backgroundImage: t.isIconUrl ? `url(${t.icon})` : null }, attrs: { \"aria-hidden\": t.ariaHidden } })];\n }), t.name ? n(\"span\", { staticClass: \"action-button__longtext-wrapper\" }, [n(\"strong\", { staticClass: \"action-button__name\" }, [t._v(\" \" + t._s(t.name) + \" \")]), n(\"br\"), n(\"span\", { staticClass: \"action-button__longtext\", domProps: { textContent: t._s(t.text) } })]) : t.isLongText ? n(\"span\", { staticClass: \"action-button__longtext\", domProps: { textContent: t._s(t.text) } }) : n(\"span\", { staticClass: \"action-button__text\" }, [t._v(t._s(t.text))]), t.isMenu ? n(\"ChevronRightIcon\", { staticClass: \"action-button__menu-icon\" }) : t._e(), t._e()], 2)]);\n}, c = [], l = /* @__PURE__ */ s(\n e,\n i,\n c,\n !1,\n null,\n \"4ad257bb\",\n null,\n null\n);\nconst b = l.exports;\nexport {\n b as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-5fa0ac5a.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-5fa0ac5a.css\";\n export default content && content.locals ? content.locals : undefined;\n","import \"../assets/index-5fa0ac5a.css\";\nimport { defineComponent as e } from \"vue\";\nimport { n as o } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nconst r = e({\n name: \"NcActionButtonGroup\",\n props: {\n /**\n * Optional text shown below the button group\n */\n name: {\n required: !1,\n default: void 0,\n type: String\n }\n }\n});\nvar s = function() {\n var n = this, t = n._self._c;\n return n._self._setupProxy, t(\"li\", { staticClass: \"nc-button-group-base\" }, [n.name ? t(\"div\", [n._v(\" \" + n._s(n.name) + \" \")]) : n._e(), t(\"ul\", { staticClass: \"nc-button-group-content\" }, [n._t(\"default\")], 2)]);\n}, _ = [], u = /* @__PURE__ */ o(\n r,\n s,\n _,\n !1,\n null,\n null,\n null,\n null\n);\nconst p = u.exports;\nexport {\n p as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-441b6552.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-441b6552.css\";\n export default content && content.locals ? content.locals : undefined;\n","import \"../assets/index-441b6552.css\";\nimport { n as t } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nconst a = {\n name: \"NcActionCaption\",\n props: {\n /**\n * The caption's text\n */\n name: {\n type: String,\n required: !0\n }\n }\n};\nvar _ = function() {\n var n = this, e = n._self._c;\n return e(\"li\", { staticClass: \"app-navigation-caption\" }, [n._v(\" \" + n._s(n.name) + \" \")]);\n}, o = [], r = /* @__PURE__ */ t(\n a,\n _,\n o,\n !1,\n null,\n \"325a2ae8\",\n null,\n null\n);\nconst p = r.exports;\nexport {\n p as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-baf8711a.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-baf8711a.css\";\n export default content && content.locals ? content.locals : undefined;\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ \n *\n * @author John Molakvoæ \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\nconst e = (a) => Math.random().toString(36).replace(/[^a-z]+/g, \"\").slice(0, a || 5);\nexport {\n e as G\n};\n","import \"../assets/index-baf8711a.css\";\nimport { A as s } from \"../chunks/actionGlobal-8c1c28c9.mjs\";\nimport { G as i } from \"../chunks/GenRandomId-cb9ccebe.mjs\";\nimport { n } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nconst o = {\n name: \"NcActionCheckbox\",\n mixins: [s],\n props: {\n /**\n * id attribute of the checkbox element\n */\n id: {\n type: String,\n default: () => \"action-\" + i(),\n validator: (t) => t.trim() !== \"\"\n },\n /**\n * checked state of the the checkbox element\n */\n checked: {\n type: Boolean,\n default: !1\n },\n /**\n * value of the checkbox input\n */\n value: {\n type: [String, Number],\n default: \"\"\n },\n /**\n * disabled state of the checkbox element\n */\n disabled: {\n type: Boolean,\n default: !1\n }\n },\n emits: [\n \"change\",\n \"check\",\n \"uncheck\",\n \"update:checked\"\n ],\n computed: {\n /**\n * determines if the action is focusable\n *\n * @return {boolean} is the action focusable ?\n */\n isFocusable() {\n return !this.disabled;\n }\n },\n methods: {\n checkInput(t) {\n this.$refs.label.click();\n },\n onChange(t) {\n this.$emit(\"update:checked\", this.$refs.checkbox.checked), this.$emit(\"change\", t), this.$refs.checkbox.checked ? this.$emit(\"check\") : this.$emit(\"uncheck\");\n }\n }\n};\nvar l = function() {\n var e = this, a = e._self._c;\n return a(\"li\", { staticClass: \"action\", class: { \"action--disabled\": e.disabled } }, [a(\"span\", { staticClass: \"action-checkbox\" }, [a(\"input\", { ref: \"checkbox\", staticClass: \"checkbox action-checkbox__checkbox\", class: { focusable: e.isFocusable }, attrs: { id: e.id, disabled: e.disabled, type: \"checkbox\" }, domProps: { checked: e.checked, value: e.value }, on: { keydown: function(c) {\n return !c.type.indexOf(\"key\") && e._k(c.keyCode, \"enter\", 13, c.key, \"Enter\") || c.ctrlKey || c.shiftKey || c.altKey || c.metaKey ? null : (c.preventDefault(), e.checkInput.apply(null, arguments));\n }, change: e.onChange } }), a(\"label\", { ref: \"label\", staticClass: \"action-checkbox__label\", attrs: { for: e.id } }, [e._v(e._s(e.text))]), e._e()], 2)]);\n}, r = [], d = /* @__PURE__ */ n(\n o,\n l,\n r,\n !1,\n null,\n \"1aa9466c\",\n null,\n null\n);\nconst f = d.exports;\nexport {\n f as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-e7c55791.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-e7c55791.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-8b51f162.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-8b51f162.css\";\n export default content && content.locals ? content.locals : undefined;\n","import GetText from 'node-gettext';\nimport '@nextcloud/router';\nimport 'dompurify';\nimport 'escape-html';\n\n/**\n * Returns the user's locale\n */\n/**\n * Returns the user's language\n */\nfunction getLanguage() {\n return document.documentElement.lang || 'en';\n}\n\n/**\n * This module provides functionality to translate applications independent from Nextcloud\n *\n * @packageDocumentation\n * @module @nextcloud/l10n/gettext\n * @example\n * ```js\nimport { getGettextBuilder } from '@nextcloud/l10n/gettext'\nconst gt = getGettextBuilder()\n .detectLocale() // or use setLanguage()\n .addTranslation(/* ... *\\/)\n .build()\ngt.gettext('some string to translate')\n```\n */\n/**\n * @notExported\n */\nclass GettextBuilder {\n constructor() {\n this.translations = {};\n this.debug = false;\n }\n setLanguage(language) {\n this.locale = language;\n return this;\n }\n /** Try to detect locale from context with `en` as fallback value */\n detectLocale() {\n return this.setLanguage(getLanguage().replace('-', '_'));\n }\n addTranslation(language, data) {\n this.translations[language] = data;\n return this;\n }\n enableDebugMode() {\n this.debug = true;\n return this;\n }\n build() {\n return new GettextWrapper(this.locale || 'en', this.translations, this.debug);\n }\n}\n/**\n * @notExported\n */\nclass GettextWrapper {\n constructor(locale, data, debug) {\n this.gt = new GetText({\n debug,\n sourceLocale: 'en',\n });\n for (const key in data) {\n this.gt.addTranslations(key, 'messages', data[key]);\n }\n this.gt.setLocale(locale);\n }\n subtitudePlaceholders(translated, vars) {\n return translated.replace(/{([^{}]*)}/g, (a, b) => {\n const r = vars[b];\n if (typeof r === 'string' || typeof r === 'number') {\n return r.toString();\n }\n else {\n return a;\n }\n });\n }\n /**\n * Get translated string (singular form), optionally with placeholders\n *\n * @param original original string to translate\n * @param placeholders map of placeholder key to value\n */\n gettext(original, placeholders = {}) {\n return this.subtitudePlaceholders(this.gt.gettext(original), placeholders);\n }\n /**\n * Get translated string with plural forms\n *\n * @param singular Singular text form\n * @param plural Plural text form to be used if `count` requires it\n * @param count The number to insert into the text\n * @param placeholders optional map of placeholder key to value\n */\n ngettext(singular, plural, count, placeholders = {}) {\n return this.subtitudePlaceholders(this.gt.ngettext(singular, plural, count).replace(/%n/g, count.toString()), placeholders);\n }\n}\n/**\n * Create a new GettextBuilder instance\n */\nfunction getGettextBuilder() {\n return new GettextBuilder();\n}\n\nexport { getGettextBuilder };\n","import { getGettextBuilder as i } from \"@nextcloud/l10n/gettext\";\nconst s = i().detectLocale();\n[{ locale: \"af\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"ar\", translations: { \"{tag} (invisible)\": \"{tag} (غير مرئي)\", \"{tag} (restricted)\": \"{tag} (مُقيّد)\", \"a few seconds ago\": \"منذ عدة ثوانٍ مضت\", Actions: \"إجراءات\", 'Actions for item with name \"{name}\"': 'إجراءات على العنصر المُسمَّى \"{name}\"', Activities: \"الحركات\", \"Animals & Nature\": \"الحيوانات والطبيعة\", \"Any link\": \"أيَّ رابطٍ\", \"Anything shared with the same group of people will show up here\": \"أي مادة تمت مشاركتها مع نفس المجموعة من الأشخاص سيتم عرضها هنا\", \"Avatar of {displayName}\": \"الرمز التجسيدي avatar لــ {displayName} \", \"Avatar of {displayName}, {status}\": \"الرمز التجسيدي avatar لــ {displayName}، {status}\", away: \"غير موجود\", Back: \"عودة\", \"Back to provider selection\": \"عودة إلى اختيار المُزوِّد\", \"Cancel changes\": \"إلغاء التغييرات\", \"Change name\": \"تغيير الاسم\", Choose: \"إختَر\", \"Clear search\": \"مَحْوُ البحث\", \"Clear text\": \"مَحْوُ النص\", Close: \"أغلِق\", \"Close modal\": \"أغلِق النافذة الصُّورِية\", \"Close navigation\": \"أغلِق المُتصفِّح\", \"Close sidebar\": \"قفل الشريط الجانبي\", \"Close Smart Picker\": \"أغلِق اللاقط الذكي Smart Picker\", \"Collapse menu\": \"طَيُّ القائمة\", \"Confirm changes\": \"تأكيد التغييرات\", Custom: \"مُخصَّص\", \"do not disturb\": \"يُرجى عدم الإزعاج\", \"Edit item\": \"تعديل عنصر\", \"Enter link\": \"أدخِل الرابط\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"خطأ في الحصول على الموارد ذات الصلة. يرجى الاتصال بمشرف النظام عندك إذا كان لديك أيّ أسئلة.\", \"External documentation for {name}\": \"التوثيق الخارجي لـ {name}\", Favorite: \"المُفضَّلة\", Flags: \"الأعلام\", \"Food & Drink\": \"الطعام والشراب\", \"Frequently used\": \"شائعة الاستعمال\", Global: \"شامل\", \"Go back to the list\": \"عودة إلى القائمة\", \"Hide password\": \"إخفاء كلمة المرور\", 'Load more \"{options}\"': 'تحميل المزيد من \"{options}\" ', \"Message limit of {count} characters reached\": \"تمّ الوصول إلى الحد الأقصى لعدد الأحرف في الرسالة: {count} حرف\", \"More items …\": \"عناصر أخرى ...\", \"More options\": \"خيارات أخرى ...\", Next: \"التالي\", \"No emoji found\": \"لم يتم العثور على أي إيموجي emoji\", \"No link provider found\": \"لا يوجد أيّ مزود روابط link provider\", \"No results\": \"ليس هناك أية نتيجة\", Objects: \"أشياء\", offline: \"غير متصل\", online: \"مُتّصِلٌ\", \"Open contact menu\": \"إفتَح قائمة جهات الاتصال\", 'Open link to \"{resourceName}\"': 'إفتَح الرابط إلى \"{resourceName}\"', \"Open menu\": \"إفتَح القائمة\", \"Open navigation\": \"إفتَح المتصفح\", \"Open settings menu\": \"إفتَح قائمة الإعدادات\", \"Password is secure\": \"كلمة المرور مُؤمّنة\", \"Pause slideshow\": \"تجميد عرض الشرائح\", \"People & Body\": \"ناس و أجسام\", \"Pick a date\": \"إختَر التاريخ\", \"Pick a date and a time\": \"إختَر التاريخ و الوقت\", \"Pick a month\": \"إختَر الشهر\", \"Pick a time\": \"إختَر الوقت\", \"Pick a week\": \"إختَر الأسبوع\", \"Pick a year\": \"إختَر السنة\", \"Pick an emoji\": \"إختَر رمز إيموجي emoji\", \"Please select a time zone:\": \"الرجاء تحديد المنطقة الزمنية:\", Previous: \"السابق\", \"Provider icon\": \"أيقونة المُزوِّد\", \"Raw link {options}\": \" الرابط الخام raw link ـ {options}\", \"Related resources\": \"مصادر ذات صلة\", Search: \"بحث\", \"Search emoji\": \"بحث عن إيموجي emoji\", \"Search results\": \"نتائج البحث\", \"sec. ago\": \"ثانية مضت\", \"seconds ago\": \"ثوان مضت\", \"Select a tag\": \"إختَر سِمَةً tag\", \"Select provider\": \"إختَر مٌزوِّداً\", Selected: \"مُحدّدة\", Settings: \"الإعدادات\", \"Settings navigation\": \"إعدادات التّصفُّح\", \"Show password\": \"أظهِر كلمة المرور\", \"Smart Picker\": \"اللاقط الذكي smart picker\", \"Smileys & Emotion\": \"وجوهٌ ضاحكة و مشاعر\", \"Start slideshow\": \"إبدإ العرض\", \"Start typing to search\": \"إبدإ كتابة مفردات البحث\", Submit: \"إرسال\", Symbols: \"رموز\", \"Travel & Places\": \"سفر و أماكن\", \"Type to search time zone\": \"أكتُب للبحث عن منطقة زمنية\", \"Unable to search the group\": \"تعذّر البحث في المجموعة\", \"Undo changes\": \"تراجَع عن التغييرات\", \"User status: {status}\": \"حالة المستخدِم: {status}\", \"Write a message …\": \"أكتُب رسالةً ...\" } }, { locale: \"ast\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"az\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"be\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"bg\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"bn_BD\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"br\", translations: { \"{tag} (invisible)\": \"{tag} (diwelus)\", \"{tag} (restricted)\": \"{tag} (bevennet)\", \"a few seconds ago\": \"\", Actions: \"Oberioù\", 'Actions for item with name \"{name}\"': \"\", Activities: \"Oberiantizoù\", \"Animals & Nature\": \"Loened & Natur\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"Dibab\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"Serriñ\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"Personelañ\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"Bannieloù\", \"Food & Drink\": \"Boued & Evajoù\", \"Frequently used\": \"Implijet alies\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"Da heul\", \"No emoji found\": \"Emoji ebet kavet\", \"No link provider found\": \"\", \"No results\": \"Disoc'h ebet\", Objects: \"Traoù\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"Arsav an diaporama\", \"People & Body\": \"Tud & Korf\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"Choaz un emoji\", \"Please select a time zone:\": \"\", Previous: \"A-raok\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"Klask\", \"Search emoji\": \"\", \"Search results\": \"Disoc'hoù an enklask\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Choaz ur c'hlav\", \"Select provider\": \"\", Settings: \"Arventennoù\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"Smileyioù & Fromoù\", \"Start slideshow\": \"Kregiñ an diaporama\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"Arouezioù\", \"Travel & Places\": \"Beaj & Lec'hioù\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"Dibosupl eo klask ar strollad\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"bs\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"ca\", translations: { \"{tag} (invisible)\": \"{tag} (invisible)\", \"{tag} (restricted)\": \"{tag} (restringit)\", \"a few seconds ago\": \"\", Actions: \"Accions\", 'Actions for item with name \"{name}\"': \"\", Activities: \"Activitats\", \"Animals & Nature\": \"Animals i natura\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"Qualsevol cosa compartida amb el mateix grup de persones es mostrarà aquí\", \"Avatar of {displayName}\": \"Avatar de {displayName}\", \"Avatar of {displayName}, {status}\": \"Avatar de {displayName}, {status}\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"Cancel·la els canvis\", \"Change name\": \"\", Choose: \"Tria\", \"Clear search\": \"\", \"Clear text\": \"Netejar text\", Close: \"Tanca\", \"Close modal\": \"Tancar el mode\", \"Close navigation\": \"Tanca la navegació\", \"Close sidebar\": \"Tancar la barra lateral\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"Confirmeu els canvis\", Custom: \"Personalitzat\", \"Edit item\": \"Edita l'element\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"Preferit\", Flags: \"Marques\", \"Food & Drink\": \"Menjar i begudes\", \"Frequently used\": \"Utilitzats recentment\", Global: \"Global\", \"Go back to the list\": \"Torna a la llista\", \"Hide password\": \"Amagar contrasenya\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"S'ha arribat al límit de {count} caràcters per missatge\", \"More items …\": \"Més artícles...\", \"More options\": \"\", Next: \"Següent\", \"No emoji found\": \"No s'ha trobat cap emoji\", \"No link provider found\": \"\", \"No results\": \"Sense resultats\", Objects: \"Objectes\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"Obre la navegació\", \"Open settings menu\": \"\", \"Password is secure\": \"Contrasenya segura
\", \"Pause slideshow\": \"Atura la presentació\", \"People & Body\": \"Persones i cos\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"Trieu un emoji\", \"Please select a time zone:\": \"Seleccioneu una zona horària:\", Previous: \"Anterior\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"Recursos relacionats\", Search: \"Cerca\", \"Search emoji\": \"\", \"Search results\": \"Resultats de cerca\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Seleccioneu una etiqueta\", \"Select provider\": \"\", Settings: \"Paràmetres\", \"Settings navigation\": \"Navegació d'opcions\", \"Show password\": \"Mostrar contrasenya\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"Cares i emocions\", \"Start slideshow\": \"Inicia la presentació\", \"Start typing to search\": \"\", Submit: \"Envia\", Symbols: \"Símbols\", \"Travel & Places\": \"Viatges i llocs\", \"Type to search time zone\": \"Escriviu per cercar la zona horària\", \"Unable to search the group\": \"No es pot cercar el grup\", \"Undo changes\": \"Desfés els canvis\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': 'Escriu missatge, fes servir \"@\" per esmentar algú, fes servir \":\" per autocompletar emojis...' } }, { locale: \"cs\", translations: { \"{tag} (invisible)\": \"{tag} (neviditelné)\", \"{tag} (restricted)\": \"{tag} (omezené)\", \"a few seconds ago\": \"před několika sekundami\", Actions: \"Akce\", 'Actions for item with name \"{name}\"': \"Akce pro položku s názvem „{name}“\", Activities: \"Aktivity\", \"Animals & Nature\": \"Zvířata a příroda\", \"Any link\": \"Jakýkoli odkaz\", \"Anything shared with the same group of people will show up here\": \"Cokoli nasdíleného stejné skupině lidí se zobrazí zde\", \"Avatar of {displayName}\": \"Zástupný obrázek uživatele {displayName}\", \"Avatar of {displayName}, {status}\": \"Zástupný obrázek uživatele {displayName}, {status}\", Back: \"Zpět\", \"Back to provider selection\": \"Zpět na výběr poskytovatele\", \"Cancel changes\": \"Zrušit změny\", \"Change name\": \"Změnit název\", Choose: \"Zvolit\", \"Clear search\": \"Vyčistit vyhledávání\", \"Clear text\": \"Čitelný text\", Close: \"Zavřít\", \"Close modal\": \"Zavřít dialogové okno\", \"Close navigation\": \"Zavřít navigaci\", \"Close sidebar\": \"Zavřít postranní panel\", \"Close Smart Picker\": \"Zavřít inteligentní výběr\", \"Collapse menu\": \"Sbalit nabídku\", \"Confirm changes\": \"Potvrdit změny\", Custom: \"Uživatelsky určené\", \"Edit item\": \"Upravit položku\", \"Enter link\": \"Zadat odkaz\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"Chyba při získávání souvisejících prostředků. Pokud máte jakékoli dotazy, obraťte se na správce vámi využívaného systému.\", \"External documentation for {name}\": \"Externí dokumentace pro {name}\", Favorite: \"Oblíbené\", Flags: \"Příznaky\", \"Food & Drink\": \"Jídlo a pití\", \"Frequently used\": \"Často používané\", Global: \"Globální\", \"Go back to the list\": \"Jít zpět na seznam\", \"Hide password\": \"Skrýt heslo\", 'Load more \"{options}\"\"': \"Načíst více „{options}“\", \"Message limit of {count} characters reached\": \"Dosaženo limitu počtu ({count}) znaků zprávy\", \"More items …\": \"Další položky…\", \"More options\": \"Další volby\", Next: \"Následující\", \"No emoji found\": \"Nenalezeno žádné emoji\", \"No link provider found\": \"Nenalezen žádný poskytovatel odkazů\", \"No results\": \"Nic nenalezeno\", Objects: \"Objekty\", \"Open contact menu\": \"Otevřít nabídku kontaktů\", 'Open link to \"{resourceName}\"': \"Otevřít odkaz na „{resourceName}“\", \"Open menu\": \"Otevřít nabídku\", \"Open navigation\": \"Otevřít navigaci\", \"Open settings menu\": \"Otevřít nabídku nastavení\", \"Password is secure\": \"Heslo je bezpečné\", \"Pause slideshow\": \"Pozastavit prezentaci\", \"People & Body\": \"Lidé a tělo\", \"Pick a date\": \"Vybrat datum\", \"Pick a date and a time\": \"Vybrat datum a čas\", \"Pick a month\": \"Vybrat měsíc\", \"Pick a time\": \"Vybrat čas\", \"Pick a week\": \"Vybrat týden\", \"Pick a year\": \"Vybrat rok\", \"Pick an emoji\": \"Vybrat emoji\", \"Please select a time zone:\": \"Vyberte časovou zónu:\", Previous: \"Předchozí\", \"Provider icon\": \"Ikona poskytovatele\", \"Raw link {options}\": \"Holý odkaz {options}\", \"Related resources\": \"Související prostředky\", Search: \"Hledat\", \"Search emoji\": \"Hledat emoji\", \"Search results\": \"Výsledky hledání\", \"sec. ago\": \"sek. před\", \"seconds ago\": \"sekund předtím\", \"Select a tag\": \"Vybrat štítek\", \"Select provider\": \"Vybrat poskytovatele\", Settings: \"Nastavení\", \"Settings navigation\": \"Pohyb po nastavení\", \"Show password\": \"Zobrazit heslo\", \"Smart Picker\": \"Inteligentní výběr\", \"Smileys & Emotion\": \"Úsměvy a emoce\", \"Start slideshow\": \"Spustit prezentaci\", \"Start typing to search\": \"Vyhledávejte psaním\", Submit: \"Odeslat\", Symbols: \"Symboly\", \"Travel & Places\": \"Cestování a místa\", \"Type to search time zone\": \"Psaním vyhledejte časovou zónu\", \"Unable to search the group\": \"Nedaří se hledat skupinu\", \"Undo changes\": \"Vzít změny zpět\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"Napište zprávu – pokud chcete někoho zmínit, napište před jeho uživatelským jménem „@“ (zavináč); automatické doplňování emotikonů zahájíte napsáním „:“ (dvojtečky)…\" } }, { locale: \"cs_CZ\", translations: { \"{tag} (invisible)\": \"{tag} (neviditelné)\", \"{tag} (restricted)\": \"{tag} (omezené)\", \"a few seconds ago\": \"před několika sekundami\", Actions: \"Akce\", 'Actions for item with name \"{name}\"': \"Akce pro položku s názvem „{name}“\", Activities: \"Aktivity\", \"Animals & Nature\": \"Zvířata a příroda\", \"Any link\": \"Jakýkoli odkaz\", \"Anything shared with the same group of people will show up here\": \"Cokoli nasdíleného stejné skupině lidí se zobrazí zde\", \"Avatar of {displayName}\": \"Zástupný obrázek uživatele {displayName}\", \"Avatar of {displayName}, {status}\": \"Zástupný obrázek uživatele {displayName}, {status}\", away: \"pryč\", Back: \"Zpět\", \"Back to provider selection\": \"Zpět na výběr poskytovatele\", \"Cancel changes\": \"Zrušit změny\", \"Change name\": \"Změnit název\", Choose: \"Zvolit\", \"Clear search\": \"Vyčistit vyhledávání\", \"Clear text\": \"Čitelný text\", Close: \"Zavřít\", \"Close modal\": \"Zavřít dialogové okno\", \"Close navigation\": \"Zavřít navigaci\", \"Close sidebar\": \"Zavřít postranní panel\", \"Close Smart Picker\": \"Zavřít inteligentní výběr\", \"Collapse menu\": \"Sbalit nabídku\", \"Confirm changes\": \"Potvrdit změny\", Custom: \"Uživatelsky určené\", \"do not disturb\": \"nerušit\", \"Edit item\": \"Upravit položku\", \"Enter link\": \"Zadat odkaz\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"Chyba při získávání souvisejících prostředků. Pokud máte jakékoli dotazy, obraťte se na správce vámi využívaného systému.\", \"External documentation for {name}\": \"Externí dokumentace pro {name}\", Favorite: \"Oblíbené\", Flags: \"Příznaky\", \"Food & Drink\": \"Jídlo a pití\", \"Frequently used\": \"Často používané\", Global: \"Globální\", \"Go back to the list\": \"Jít zpět na seznam\", \"Hide password\": \"Skrýt heslo\", 'Load more \"{options}\"': \"Načíst další „{options}“\", \"Message limit of {count} characters reached\": \"Dosaženo limitu počtu ({count}) znaků zprávy\", \"More items …\": \"Další položky…\", \"More options\": \"Další volby\", Next: \"Následující\", \"No emoji found\": \"Nenalezeno žádné emoji\", \"No link provider found\": \"Nenalezen žádný poskytovatel odkazů\", \"No results\": \"Nic nenalezeno\", Objects: \"Objekty\", offline: \"offline\", online: \"online\", \"Open contact menu\": \"Otevřít nabídku kontaktů\", 'Open link to \"{resourceName}\"': \"Otevřít odkaz na „{resourceName}“\", \"Open menu\": \"Otevřít nabídku\", \"Open navigation\": \"Otevřít navigaci\", \"Open settings menu\": \"Otevřít nabídku nastavení\", \"Password is secure\": \"Heslo je bezpečné\", \"Pause slideshow\": \"Pozastavit prezentaci\", \"People & Body\": \"Lidé a tělo\", \"Pick a date\": \"Vybrat datum\", \"Pick a date and a time\": \"Vybrat datum a čas\", \"Pick a month\": \"Vybrat měsíc\", \"Pick a time\": \"Vybrat čas\", \"Pick a week\": \"Vybrat týden\", \"Pick a year\": \"Vybrat rok\", \"Pick an emoji\": \"Vybrat emoji\", \"Please select a time zone:\": \"Vyberte časovou zónu:\", Previous: \"Předchozí\", \"Provider icon\": \"Ikona poskytovatele\", \"Raw link {options}\": \"Holý odkaz {options}\", \"Related resources\": \"Související prostředky\", Search: \"Hledat\", \"Search emoji\": \"Hledat emoji\", \"Search results\": \"Výsledky hledání\", \"sec. ago\": \"sek. před\", \"seconds ago\": \"sekund předtím\", \"Select a tag\": \"Vybrat štítek\", \"Select provider\": \"Vybrat poskytovatele\", Selected: \"Vybráno\", Settings: \"Nastavení\", \"Settings navigation\": \"Pohyb po nastavení\", \"Show password\": \"Zobrazit heslo\", \"Smart Picker\": \"Inteligentní výběr\", \"Smileys & Emotion\": \"Úsměvy a emoce\", \"Start slideshow\": \"Spustit prezentaci\", \"Start typing to search\": \"Vyhledávejte psaním\", Submit: \"Odeslat\", Symbols: \"Symboly\", \"Travel & Places\": \"Cestování a místa\", \"Type to search time zone\": \"Psaním vyhledejte časovou zónu\", \"Unable to search the group\": \"Nedaří se hledat skupinu\", \"Undo changes\": \"Vzít změny zpět\", \"User status: {status}\": \"Stav uživatele: {status}\", \"Write a message …\": \"Napsat zprávu…\" } }, { locale: \"cy_GB\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"da\", translations: { \"{tag} (invisible)\": \"{tag} (usynlig)\", \"{tag} (restricted)\": \"{tag} (begrænset)\", \"a few seconds ago\": \"et par sekunder siden\", Actions: \"Handlinger\", 'Actions for item with name \"{name}\"': 'Handlinger for element med navnet \"{name}\"', Activities: \"Aktiviteter\", \"Animals & Nature\": \"Dyr & Natur\", \"Any link\": \"Ethvert link\", \"Anything shared with the same group of people will show up here\": \"Alt der deles med samme gruppe af personer vil vises her\", \"Avatar of {displayName}\": \"Avatar af {displayName}\", \"Avatar of {displayName}, {status}\": \"Avatar af {displayName}, {status}\", Back: \"Tilbage\", \"Back to provider selection\": \"Tilbage til udbydervalg\", \"Cancel changes\": \"Annuller ændringer\", \"Change name\": \"Ændre navn\", Choose: \"Vælg\", \"Clear search\": \"Ryd søgning\", \"Clear text\": \"Ryd tekst\", Close: \"Luk\", \"Close modal\": \"Luk vindue\", \"Close navigation\": \"Luk navigation\", \"Close sidebar\": \"Luk sidepanel\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"Bekræft ændringer\", Custom: \"Brugerdefineret\", \"Edit item\": \"Rediger emne\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"Favorit\", Flags: \"Flag\", \"Food & Drink\": \"Mad & Drikke\", \"Frequently used\": \"Ofte brugt\", Global: \"Global\", \"Go back to the list\": \"Tilbage til listen\", \"Hide password\": \"Skjul kodeord\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"Begrænsning på {count} tegn er nået\", \"More items …\": \"Mere ...\", \"More options\": \"\", Next: \"Videre\", \"No emoji found\": \"Ingen emoji fundet\", \"No link provider found\": \"\", \"No results\": \"Ingen resultater\", Objects: \"Objekter\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"Åbn navigation\", \"Open settings menu\": \"\", \"Password is secure\": \"Kodeordet er sikkert\", \"Pause slideshow\": \"Suspender fremvisning\", \"People & Body\": \"Mennesker & Menneskekroppen\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"Vælg en emoji\", \"Please select a time zone:\": \"Vælg venligst en tidszone:\", Previous: \"Forrige\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"Relaterede emner\", Search: \"Søg\", \"Search emoji\": \"\", \"Search results\": \"Søgeresultater\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Vælg et mærke\", \"Select provider\": \"\", Settings: \"Indstillinger\", \"Settings navigation\": \"Naviger i indstillinger\", \"Show password\": \"Vis kodeord\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"Smileys & Emotion\", \"Start slideshow\": \"Start fremvisning\", \"Start typing to search\": \"\", Submit: \"Send\", Symbols: \"Symboler\", \"Travel & Places\": \"Rejser & Rejsemål\", \"Type to search time zone\": \"Indtast for at søge efter tidszone\", \"Unable to search the group\": \"Kan ikke søge på denne gruppe\", \"Undo changes\": \"Fortryd ændringer\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': 'Skriv besked, brug \"@\" for at nævne nogen, brug \":\" til emoji-autofuldførelse ...' } }, { locale: \"de\", translations: { \"{tag} (invisible)\": \"{tag} (unsichtbar)\", \"{tag} (restricted)\": \"{tag} (eingeschränkt)\", \"a few seconds ago\": \"vor ein paar Sekunden\", Actions: \"Aktionen\", 'Actions for item with name \"{name}\"': 'Aktionen für das Element \"{name}“', Activities: \"Aktivitäten\", \"Animals & Nature\": \"Tiere & Natur\", \"Any link\": \"Irgendein Link\", \"Anything shared with the same group of people will show up here\": \"Alles, das mit derselben Gruppe von Personen geteilt wird, wird hier angezeigt\", \"Avatar of {displayName}\": \"Avatar von {displayName}\", \"Avatar of {displayName}, {status}\": \"Avatar von {displayName}, {status}\", Back: \"Zurück\", \"Back to provider selection\": \"Zurück zur Anbieterauswahl\", \"Cancel changes\": \"Änderungen verwerfen\", \"Change name\": \"Namen ändern\", Choose: \"Auswählen\", \"Clear search\": \"Suche leeren\", \"Clear text\": \"Klartext\", Close: \"Schließen\", \"Close modal\": \"Modal schließen\", \"Close navigation\": \"Navigation schließen\", \"Close sidebar\": \"Seitenleiste schließen\", \"Close Smart Picker\": \"Smart Picker schließen\", \"Collapse menu\": \"Menü einklappen\", \"Confirm changes\": \"Änderungen bestätigen\", Custom: \"Benutzerdefiniert\", \"Edit item\": \"Objekt bearbeiten\", \"Enter link\": \"Link eingeben\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"Fehler beim Abrufen verwandter Ressourcen. Bei Fragen wende dich bitte an deinen Systemadministrator.\", \"External documentation for {name}\": \"Externe Dokumentation für {name}\", Favorite: \"Favorit\", Flags: \"Flaggen\", \"Food & Drink\": \"Essen & Trinken\", \"Frequently used\": \"Häufig verwendet\", Global: \"Global\", \"Go back to the list\": \"Zurück zur Liste\", \"Hide password\": \"Passwort verbergen\", 'Load more \"{options}\"': 'Weitere \"{options}\" laden', \"Message limit of {count} characters reached\": \"Nachrichtenlimit von {count} Zeichen erreicht.\", \"More items …\": \"Weitere Elemente …\", \"More options\": \"Weitere Optionen\", Next: \"Weiter\", \"No emoji found\": \"Kein Emoji gefunden\", \"No link provider found\": \"Kein Linkanbieter gefunden\", \"No results\": \"Keine Ergebnisse\", Objects: \"Gegenstände\", \"Open contact menu\": \"Kontaktmenü öffnen\", 'Open link to \"{resourceName}\"': 'Link zu \"{resourceName}“ öffnen', \"Open menu\": \"Menü öffnen\", \"Open navigation\": \"Navigation öffnen\", \"Open settings menu\": \"Einstellungsmenü öffnen\", \"Password is secure\": \"Passwort ist sicher\", \"Pause slideshow\": \"Diashow pausieren\", \"People & Body\": \"Menschen & Körper\", \"Pick a date\": \"Ein Datum auswählen\", \"Pick a date and a time\": \"Datum und Uhrzeit auswählen\", \"Pick a month\": \"Einen Monat auswählen\", \"Pick a time\": \"Eine Uhrzeit auswählen\", \"Pick a week\": \"Eine Woche auswählen\", \"Pick a year\": \"Ein Jahr auswählen\", \"Pick an emoji\": \"Ein Emoji auswählen\", \"Please select a time zone:\": \"Bitte wähle eine Zeitzone:\", Previous: \"Vorherige\", \"Provider icon\": \"Anbietersymbol\", \"Raw link {options}\": \"Unverarbeiteter Link {Optionen}\", \"Related resources\": \"Verwandte Ressourcen\", Search: \"Suche\", \"Search emoji\": \"Emoji suchen\", \"Search results\": \"Suchergebnisse\", \"sec. ago\": \"Sek. zuvor\", \"seconds ago\": \"Sekunden zuvor\", \"Select a tag\": \"Schlagwort auswählen\", \"Select provider\": \"Anbieter auswählen\", Selected: \"Ausgewählt\", Settings: \"Einstellungen\", \"Settings navigation\": \"Einstellungen für die Navigation\", \"Show password\": \"Passwort anzeigen\", \"Smart Picker\": \"Smart Picker\", \"Smileys & Emotion\": \"Smileys & Emotionen\", \"Start slideshow\": \"Diashow starten\", \"Start typing to search\": \"Beginne mit der Eingabe, um zu suchen\", Submit: \"Einreichen\", Symbols: \"Symbole\", \"Travel & Places\": \"Reisen & Orte\", \"Type to search time zone\": \"Tippen, um Zeitzone zu suchen\", \"Unable to search the group\": \"Die Gruppe konnte nicht durchsucht werden.\", \"Undo changes\": \"Änderungen rückgängig machen\", \"Write a message …\": \"Nachricht schreiben …\" } }, { locale: \"de_DE\", translations: { \"{tag} (invisible)\": \"{tag} (unsichtbar)\", \"{tag} (restricted)\": \"{tag} (eingeschränkt)\", \"a few seconds ago\": \"vor ein paar Sekunden\", Actions: \"Aktionen\", 'Actions for item with name \"{name}\"': 'Aktionen für Element mit dem Namen \"{name}“', Activities: \"Aktivitäten\", \"Animals & Nature\": \"Tiere & Natur\", \"Any link\": \"Irgendein Link\", \"Anything shared with the same group of people will show up here\": \"Alles, das mit derselben Gruppe von Personen geteilt wird, wird hier angezeigt\", \"Avatar of {displayName}\": \"Avatar von {displayName}\", \"Avatar of {displayName}, {status}\": \"Avatar von {displayName}, {status}\", away: \"Abwesend\", Back: \"Zurück\", \"Back to provider selection\": \"Zurück zur Anbieterauswahl\", \"Cancel changes\": \"Änderungen verwerfen\", \"Change name\": \"Namen ändern\", Choose: \"Auswählen\", \"Clear search\": \"Suche leeren\", \"Clear text\": \"Klartext\", Close: \"Schließen\", \"Close modal\": \"Modal schließen\", \"Close navigation\": \"Navigation schließen\", \"Close sidebar\": \"Seitenleiste schließen\", \"Close Smart Picker\": \"Smart Picker schließen\", \"Collapse menu\": \"Menü einklappen\", \"Confirm changes\": \"Änderungen bestätigen\", Custom: \"Benutzerdefiniert\", \"do not disturb\": \"Bitte nicht stören\", \"Edit item\": \"Element bearbeiten\", \"Enter link\": \"Link eingeben\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"Fehler beim Abrufen verwandter Ressourcen. Bei Fragen wenden Sie sich bitte an Ihre Systemadministration.\", \"External documentation for {name}\": \"Externe Dokumentation für {name}\", Favorite: \"Favorit\", Flags: \"Flaggen\", \"Food & Drink\": \"Essen & Trinken\", \"Frequently used\": \"Häufig verwendet\", Global: \"Global\", \"Go back to the list\": \"Zurück zur Liste\", \"Hide password\": \"Passwort verbergen\", 'Load more \"{options}\"': 'Weitere \"{options}\" laden', \"Message limit of {count} characters reached\": \"Nachrichtenlimit von {count} Zeichen erreicht\", \"More items …\": \"Weitere Elemente …\", \"More options\": \"Mehr Optionen\", Next: \"Weiter\", \"No emoji found\": \"Kein Emoji gefunden\", \"No link provider found\": \"Kein Linkanbieter gefunden\", \"No results\": \"Keine Ergebnisse\", Objects: \"Objekte\", offline: \"Offline\", online: \"Online\", \"Open contact menu\": \"Kontaktmenü öffnen\", 'Open link to \"{resourceName}\"': 'Link zu \"{resourceName}“ öffnen', \"Open menu\": \"Menü öffnen\", \"Open navigation\": \"Navigation öffnen\", \"Open settings menu\": \"Einstellungsmenü öffnen\", \"Password is secure\": \"Passwort ist sicher\", \"Pause slideshow\": \"Diashow pausieren\", \"People & Body\": \"Menschen & Körper\", \"Pick a date\": \"Ein Datum auswählen\", \"Pick a date and a time\": \"Datum und Uhrzeit auswählen\", \"Pick a month\": \"Einen Monat auswählen\", \"Pick a time\": \"Eine Uhrzeit auswählen\", \"Pick a week\": \"Eine Woche auswählen\", \"Pick a year\": \"Ein Jahr auswählen\", \"Pick an emoji\": \"Ein Emoji auswählen\", \"Please select a time zone:\": \"Bitte eine Zeitzone auswählen:\", Previous: \"Vorherige\", \"Provider icon\": \"Anbietersymbol\", \"Raw link {options}\": \"Unverarbeiteter Link {Optionen}\", \"Related resources\": \"Verwandte Ressourcen\", Search: \"Suche\", \"Search emoji\": \"Emoji suchen\", \"Search results\": \"Suchergebnisse\", \"sec. ago\": \"Sek. zuvor\", \"seconds ago\": \"Sekunden zuvor\", \"Select a tag\": \"Schlagwort auswählen\", \"Select provider\": \"Anbieter auswählen\", Selected: \"Ausgewählt\", Settings: \"Einstellungen\", \"Settings navigation\": \"Einstellungen für die Navigation\", \"Show password\": \"Passwort anzeigen\", \"Smart Picker\": \"Smart Picker\", \"Smileys & Emotion\": \"Smileys & Emotionen\", \"Start slideshow\": \"Diashow starten\", \"Start typing to search\": \"Mit der Eingabe beginnen, um zu suchen\", Submit: \"Einreichen\", Symbols: \"Symbole\", \"Travel & Places\": \"Reisen & Orte\", \"Type to search time zone\": \"Tippen, um eine Zeitzone zu suchen\", \"Unable to search the group\": \"Die Gruppe kann nicht durchsucht werden\", \"Undo changes\": \"Änderungen rückgängig machen\", \"User status: {status}\": \"Benutzerstatus: {status}\", \"Write a message …\": \"Nachricht schreiben …\" } }, { locale: \"el\", translations: { \"{tag} (invisible)\": \"{tag} (αόρατο)\", \"{tag} (restricted)\": \"{tag} (περιορισμένο)\", \"a few seconds ago\": \"\", Actions: \"Ενέργειες\", 'Actions for item with name \"{name}\"': \"\", Activities: \"Δραστηριότητες\", \"Animals & Nature\": \"Ζώα & Φύση\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"Οτιδήποτε μοιράζεται με την ίδια ομάδα ατόμων θα εμφανίζεται εδώ\", \"Avatar of {displayName}\": \"Άβαταρ του {displayName}\", \"Avatar of {displayName}, {status}\": \"Άβαταρ του {displayName}, {status}\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"Ακύρωση αλλαγών\", \"Change name\": \"\", Choose: \"Επιλογή\", \"Clear search\": \"\", \"Clear text\": \"Εκκαθάριση κειμένου\", Close: \"Κλείσιμο\", \"Close modal\": \"Βοηθητικό κλείσιμο\", \"Close navigation\": \"Κλείσιμο πλοήγησης\", \"Close sidebar\": \"Κλείσιμο πλευρικής μπάρας\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"Επιβεβαίωση αλλαγών\", Custom: \"Προσαρμογή\", \"Edit item\": \"Επεξεργασία\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"Αγαπημένα\", Flags: \"Σημαίες\", \"Food & Drink\": \"Φαγητό & Ποτό\", \"Frequently used\": \"Συχνά χρησιμοποιούμενο\", Global: \"Καθολικό\", \"Go back to the list\": \"Επιστροφή στην αρχική λίστα \", \"Hide password\": \"Απόκρυψη κωδικού πρόσβασης\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"Συμπληρώθηκε το όριο των {count} χαρακτήρων του μηνύματος\", \"More items …\": \"Περισσότερα στοιχεία …\", \"More options\": \"\", Next: \"Επόμενο\", \"No emoji found\": \"Δεν βρέθηκε emoji\", \"No link provider found\": \"\", \"No results\": \"Κανένα αποτέλεσμα\", Objects: \"Αντικείμενα\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"Άνοιγμα πλοήγησης\", \"Open settings menu\": \"\", \"Password is secure\": \"Ο κωδικός πρόσβασης είναι ασφαλής\", \"Pause slideshow\": \"Παύση προβολής διαφανειών\", \"People & Body\": \"Άνθρωποι & Σώμα\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"Επιλέξτε ένα emoji\", \"Please select a time zone:\": \"Παρακαλούμε επιλέξτε μια ζώνη ώρας:\", Previous: \"Προηγούμενο\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"Σχετικοί πόροι\", Search: \"Αναζήτηση\", \"Search emoji\": \"\", \"Search results\": \"Αποτελέσματα αναζήτησης\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Επιλογή ετικέτας\", \"Select provider\": \"\", Settings: \"Ρυθμίσεις\", \"Settings navigation\": \"Πλοήγηση ρυθμίσεων\", \"Show password\": \"Εμφάνιση κωδικού πρόσβασης\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"Φατσούλες & Συναίσθημα\", \"Start slideshow\": \"Έναρξη προβολής διαφανειών\", \"Start typing to search\": \"\", Submit: \"Υποβολή\", Symbols: \"Σύμβολα\", \"Travel & Places\": \"Ταξίδια & Τοποθεσίες\", \"Type to search time zone\": \"Πληκτρολογήστε για αναζήτηση ζώνης ώρας\", \"Unable to search the group\": \"Δεν είναι δυνατή η αναζήτηση της ομάδας\", \"Undo changes\": \"Αναίρεση Αλλαγών\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': 'Γράψτε μήνυμα, χρησιμοποιείστε \"@\" για να αναφέρετε κάποιον, χρησιμοποιείστε \":\" για αυτόματη συμπλήρωση emoji …' } }, { locale: \"en_GB\", translations: { \"{tag} (invisible)\": \"{tag} (invisible)\", \"{tag} (restricted)\": \"{tag} (restricted)\", \"a few seconds ago\": \"a few seconds ago\", Actions: \"Actions\", 'Actions for item with name \"{name}\"': 'Actions for item with name \"{name}\"', Activities: \"Activities\", \"Animals & Nature\": \"Animals & Nature\", \"Any link\": \"Any link\", \"Anything shared with the same group of people will show up here\": \"Anything shared with the same group of people will show up here\", \"Avatar of {displayName}\": \"Avatar of {displayName}\", \"Avatar of {displayName}, {status}\": \"Avatar of {displayName}, {status}\", away: \"away\", Back: \"Back\", \"Back to provider selection\": \"Back to provider selection\", \"Cancel changes\": \"Cancel changes\", \"Change name\": \"Change name\", Choose: \"Choose\", \"Clear search\": \"Clear search\", \"Clear text\": \"Clear text\", Close: \"Close\", \"Close modal\": \"Close modal\", \"Close navigation\": \"Close navigation\", \"Close sidebar\": \"Close sidebar\", \"Close Smart Picker\": \"Close Smart Picker\", \"Collapse menu\": \"Collapse menu\", \"Confirm changes\": \"Confirm changes\", Custom: \"Custom\", \"do not disturb\": \"do not disturb\", \"Edit item\": \"Edit item\", \"Enter link\": \"Enter link\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"Error getting related resources. Please contact your system administrator if you have any questions.\", \"External documentation for {name}\": \"External documentation for {name}\", Favorite: \"Favourite\", Flags: \"Flags\", \"Food & Drink\": \"Food & Drink\", \"Frequently used\": \"Frequently used\", Global: \"Global\", \"Go back to the list\": \"Go back to the list\", \"Hide password\": \"Hide password\", 'Load more \"{options}\"': 'Load more \"{options}\"', \"Message limit of {count} characters reached\": \"Message limit of {count} characters reached\", \"More items …\": \"More items …\", \"More options\": \"More options\", Next: \"Next\", \"No emoji found\": \"No emoji found\", \"No link provider found\": \"No link provider found\", \"No results\": \"No results\", Objects: \"Objects\", offline: \"offline\", online: \"online\", \"Open contact menu\": \"Open contact menu\", 'Open link to \"{resourceName}\"': 'Open link to \"{resourceName}\"', \"Open menu\": \"Open menu\", \"Open navigation\": \"Open navigation\", \"Open settings menu\": \"Open settings menu\", \"Password is secure\": \"Password is secure\", \"Pause slideshow\": \"Pause slideshow\", \"People & Body\": \"People & Body\", \"Pick a date\": \"Pick a date\", \"Pick a date and a time\": \"Pick a date and a time\", \"Pick a month\": \"Pick a month\", \"Pick a time\": \"Pick a time\", \"Pick a week\": \"Pick a week\", \"Pick a year\": \"Pick a year\", \"Pick an emoji\": \"Pick an emoji\", \"Please select a time zone:\": \"Please select a time zone:\", Previous: \"Previous\", \"Provider icon\": \"Provider icon\", \"Raw link {options}\": \"Raw link {options}\", \"Related resources\": \"Related resources\", Search: \"Search\", \"Search emoji\": \"Search emoji\", \"Search results\": \"Search results\", \"sec. ago\": \"sec. ago\", \"seconds ago\": \"seconds ago\", \"Select a tag\": \"Select a tag\", \"Select provider\": \"Select provider\", Selected: \"Selected\", Settings: \"Settings\", \"Settings navigation\": \"Settings navigation\", \"Show password\": \"Show password\", \"Smart Picker\": \"Smart Picker\", \"Smileys & Emotion\": \"Smileys & Emotion\", \"Start slideshow\": \"Start slideshow\", \"Start typing to search\": \"Start typing to search\", Submit: \"Submit\", Symbols: \"Symbols\", \"Travel & Places\": \"Travel & Places\", \"Type to search time zone\": \"Type to search time zone\", \"Unable to search the group\": \"Unable to search the group\", \"Undo changes\": \"Undo changes\", \"User status: {status}\": \"User status: {status}\", \"Write a message …\": \"Write a message …\" } }, { locale: \"eo\", translations: { \"{tag} (invisible)\": \"{tag} (kaŝita)\", \"{tag} (restricted)\": \"{tag} (limigita)\", \"a few seconds ago\": \"\", Actions: \"Agoj\", 'Actions for item with name \"{name}\"': \"\", Activities: \"Aktiveco\", \"Animals & Nature\": \"Bestoj & Naturo\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"Elektu\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"Fermu\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"Propra\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"Flagoj\", \"Food & Drink\": \"Manĝaĵo & Trinkaĵo\", \"Frequently used\": \"Ofte uzataj\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"La limo je {count} da literoj atingita\", \"More items …\": \"\", \"More options\": \"\", Next: \"Sekva\", \"No emoji found\": \"La emoĝio forestas\", \"No link provider found\": \"\", \"No results\": \"La rezulto forestas\", Objects: \"Objektoj\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"Payzi bildprezenton\", \"People & Body\": \"Homoj & Korpo\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"Elekti emoĝion \", \"Please select a time zone:\": \"\", Previous: \"Antaŭa\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"Serĉi\", \"Search emoji\": \"\", \"Search results\": \"Serĉrezultoj\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Elektu etikedon\", \"Select provider\": \"\", Settings: \"Agordo\", \"Settings navigation\": \"Agorda navigado\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"Ridoj kaj Emocioj\", \"Start slideshow\": \"Komenci bildprezenton\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"Signoj\", \"Travel & Places\": \"Vojaĵoj & Lokoj\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"Ne eblas serĉi en la grupo\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"es\", translations: { \"{tag} (invisible)\": \"{tag} (invisible)\", \"{tag} (restricted)\": \"{tag} (restringido)\", \"a few seconds ago\": \"hace unos pocos segundos\", Actions: \"Acciones\", 'Actions for item with name \"{name}\"': 'Acciones para el elemento con nombre \"{name}\"', Activities: \"Actividades\", \"Animals & Nature\": \"Animales y naturaleza\", \"Any link\": \"Cualquier enlace\", \"Anything shared with the same group of people will show up here\": \"Cualquier cosa que sea compartida con el mismo grupo de personas se mostrará aquí\", \"Avatar of {displayName}\": \"Avatar de {displayName}\", \"Avatar of {displayName}, {status}\": \"Avatar de {displayName}, {status}\", away: \"ausente\", Back: \"Atrás\", \"Back to provider selection\": \"Volver a la selección de proveedor\", \"Cancel changes\": \"Cancelar cambios\", \"Change name\": \"Cambiar nombre\", Choose: \"Elegir\", \"Clear search\": \"Limpiar búsqueda\", \"Clear text\": \"Limpiar texto\", Close: \"Cerrar\", \"Close modal\": \"Cerrar modal\", \"Close navigation\": \"Cerrar navegación\", \"Close sidebar\": \"Cerrar barra lateral\", \"Close Smart Picker\": \"Cerrar selector inteligente\", \"Collapse menu\": \"Ocultar menú\", \"Confirm changes\": \"Confirmar cambios\", Custom: \"Personalizado\", \"do not disturb\": \"no molestar\", \"Edit item\": \"Editar elemento\", \"Enter link\": \"Ingrese enlace\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"Error al obtener recursos relacionados. Por favor, contacta a tu administrador del sistema si tienes alguna pregunta.\", \"External documentation for {name}\": \"Documentación externa para {name}\", Favorite: \"Favorito\", Flags: \"Banderas\", \"Food & Drink\": \"Comida y bebida\", \"Frequently used\": \"Usado con frecuenca\", Global: \"Global\", \"Go back to the list\": \"Volver a la lista\", \"Hide password\": \"Ocultar contraseña\", 'Load more \"{options}\"': 'Cargar más \"{options}\"', \"Message limit of {count} characters reached\": \"El mensaje ha alcanzado el límite de {count} caracteres\", \"More items …\": \"Más ítems...\", \"More options\": \"Más opciones\", Next: \"Siguiente\", \"No emoji found\": \"No hay ningún emoji\", \"No link provider found\": \"No se encontró ningún proveedor de enlaces\", \"No results\": \" Ningún resultado\", Objects: \"Objetos\", offline: \"fuera de línea\", online: \"en línea\", \"Open contact menu\": \"Abrir menú de contactos\", 'Open link to \"{resourceName}\"': 'Abrir enlace a \"{resourceName}\"', \"Open menu\": \"Abrir menú\", \"Open navigation\": \"Abrir navegación\", \"Open settings menu\": \"Abrir menú de ajustes\", \"Password is secure\": \"La contraseña es segura\", \"Pause slideshow\": \"Pausar la presentación \", \"People & Body\": \"Personas y cuerpos\", \"Pick a date\": \"Seleccione una fecha\", \"Pick a date and a time\": \"Seleccione una fecha y hora\", \"Pick a month\": \"Seleccione un mes\", \"Pick a time\": \"Seleccione una hora\", \"Pick a week\": \"Seleccione una semana\", \"Pick a year\": \"Seleccione un año\", \"Pick an emoji\": \"Elegir un emoji\", \"Please select a time zone:\": \"Por favor elige un huso de horario:\", Previous: \"Anterior\", \"Provider icon\": \"Ícono del proveedor\", \"Raw link {options}\": \"Enlace directo {options}\", \"Related resources\": \"Recursos relacionados\", Search: \"Buscar\", \"Search emoji\": \"Buscar emoji\", \"Search results\": \"Resultados de la búsqueda\", \"sec. ago\": \"hace segundos\", \"seconds ago\": \"segundos atrás\", \"Select a tag\": \"Seleccione una etiqueta\", \"Select provider\": \"Seleccione proveedor\", Selected: \"Seleccionado\", Settings: \"Ajustes\", \"Settings navigation\": \"Navegación por ajustes\", \"Show password\": \"Mostrar contraseña\", \"Smart Picker\": \"Selector inteligente\", \"Smileys & Emotion\": \"Smileys y emoticonos\", \"Start slideshow\": \"Iniciar la presentación\", \"Start typing to search\": \"Comience a escribir para buscar\", Submit: \"Enviar\", Symbols: \"Símbolos\", \"Travel & Places\": \"Viajes y lugares\", \"Type to search time zone\": \"Escribe para buscar un huso de horario\", \"Unable to search the group\": \"No es posible buscar en el grupo\", \"Undo changes\": \"Deshacer cambios\", \"User status: {status}\": \"Estatus del usuario: {status}\", \"Write a message …\": \"Escribe un mensaje …\" } }, { locale: \"es_419\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"es_AR\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"es_CL\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"es_CO\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"es_CR\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"es_DO\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"es_EC\", translations: { \"{tag} (invisible)\": \"{tag} (invisible)\", \"{tag} (restricted)\": \"{tag} (restricted)\", \"a few seconds ago\": \"hace unos segundos\", Actions: \"Acciones\", 'Actions for item with name \"{name}\"': 'Acciones para el elemento con nombre \"{name}\"', Activities: \"Actividades\", \"Animals & Nature\": \"Animales y Naturaleza\", \"Any link\": \"Cualquier enlace\", \"Anything shared with the same group of people will show up here\": \"Cualquier cosa compartida con el mismo grupo de personas aparecerá aquí.\", \"Avatar of {displayName}\": \"Avatar de {displayName}\", \"Avatar of {displayName}, {status}\": \"Avatar de {displayName}, {status}\", Back: \"Atrás\", \"Back to provider selection\": \"Volver a la selección de proveedor\", \"Cancel changes\": \"Cancelar cambios\", \"Change name\": \"Cambiar nombre\", Choose: \"Elegir\", \"Clear search\": \"Limpiar búsqueda\", \"Clear text\": \"Limpiar texto\", Close: \"Cerrar\", \"Close modal\": \"Cerrar modal\", \"Close navigation\": \"Cerrar navegación\", \"Close sidebar\": \"Cerrar barra lateral\", \"Close Smart Picker\": \"Cerrar selector inteligente\", \"Collapse menu\": \"Ocultar menú\", \"Confirm changes\": \"Confirmar cambios\", Custom: \"Personalizado\", \"Edit item\": \"Editar elemento\", \"Enter link\": \"Ingresar enlace\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"Error al obtener recursos relacionados. Por favor, contacta a tu administrador del sistema si tienes alguna pregunta.\", \"External documentation for {name}\": \"Documentación externa para {name}\", Favorite: \"Favorito\", Flags: \"Marcas\", \"Food & Drink\": \"Comida y Bebida\", \"Frequently used\": \"Frecuentemente utilizado\", Global: \"Global\", \"Go back to the list\": \"Volver a la lista\", \"Hide password\": \"Ocultar contraseña\", 'Load more \"{options}\"': \"\", \"Message limit of {count} characters reached\": \"Se ha alcanzado el límite de caracteres del mensaje {count}\", \"More items …\": \"Más elementos...\", \"More options\": \"Más opciones\", Next: \"Siguiente\", \"No emoji found\": \"No se encontró ningún emoji\", \"No link provider found\": \"No se encontró ningún proveedor de enlaces\", \"No results\": \"Sin resultados\", Objects: \"Objetos\", \"Open contact menu\": \"Abrir menú de contactos\", 'Open link to \"{resourceName}\"': 'Abrir enlace a \"{resourceName}\"', \"Open menu\": \"Abrir menú\", \"Open navigation\": \"Abrir navegación\", \"Open settings menu\": \"Abrir menú de configuración\", \"Password is secure\": \"La contraseña es segura\", \"Pause slideshow\": \"Pausar presentación de diapositivas\", \"People & Body\": \"Personas y Cuerpo\", \"Pick a date\": \"Seleccionar una fecha\", \"Pick a date and a time\": \"Seleccionar una fecha y una hora\", \"Pick a month\": \"Seleccionar un mes\", \"Pick a time\": \"Seleccionar una semana\", \"Pick a week\": \"Seleccionar una semana\", \"Pick a year\": \"Seleccionar un año\", \"Pick an emoji\": \"Seleccionar un emoji\", \"Please select a time zone:\": \"Por favor, selecciona una zona horaria:\", Previous: \"Anterior\", \"Provider icon\": \"Ícono del proveedor\", \"Raw link {options}\": \"Enlace directo {options}\", \"Related resources\": \"Recursos relacionados\", Search: \"Buscar\", \"Search emoji\": \"Buscar emoji\", \"Search results\": \"Resultados de búsqueda\", \"sec. ago\": \"hace segundos\", \"seconds ago\": \"Segundos atrás\", \"Select a tag\": \"Seleccionar una etiqueta\", \"Select provider\": \"Seleccionar proveedor\", Selected: \"\", Settings: \"Configuraciones\", \"Settings navigation\": \"Navegación de configuraciones\", \"Show password\": \"Mostrar contraseña\", \"Smart Picker\": \"Selector inteligente\", \"Smileys & Emotion\": \"Caritas y Emociones\", \"Start slideshow\": \"Iniciar presentación de diapositivas\", \"Start typing to search\": \"Comienza a escribir para buscar\", Submit: \"Enviar\", Symbols: \"Símbolos\", \"Travel & Places\": \"Viajes y Lugares\", \"Type to search time zone\": \"Escribe para buscar la zona horaria\", \"Unable to search the group\": \"No se puede buscar en el grupo\", \"Undo changes\": \"Deshacer cambios\", \"Write a message …\": \"\" } }, { locale: \"es_GT\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"es_HN\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"es_MX\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"es_NI\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"es_PA\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"es_PE\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"es_PR\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"es_PY\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"es_SV\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"es_UY\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"et_EE\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"eu\", translations: { \"{tag} (invisible)\": \"{tag} (ikusezina)\", \"{tag} (restricted)\": \"{tag} (mugatua)\", \"a few seconds ago\": \"duela segundo batzuk\", Actions: \"Ekintzak\", 'Actions for item with name \"{name}\"': '\"{name}\" izeneko elementuaren ekintzak', Activities: \"Jarduerak\", \"Animals & Nature\": \"Animaliak eta Natura\", \"Any link\": \"Edozein esteka\", \"Anything shared with the same group of people will show up here\": \"Pertsona-talde berarekin partekatutako edozer agertuko da hemen\", \"Avatar of {displayName}\": \"{displayName}-(e)n irudia\", \"Avatar of {displayName}, {status}\": \"{displayName} -(e)n irudia, {status}\", Back: \"Atzera\", \"Back to provider selection\": \"Itzuli hornitzaileen hautapenera\", \"Cancel changes\": \"Ezeztatu aldaketak\", \"Change name\": \"Aldatu izena\", Choose: \"Aukeratu\", \"Clear search\": \"Garbitu bilaketa\", \"Clear text\": \"Garbitu testua\", Close: \"Itxi\", \"Close modal\": \"Itxi modala\", \"Close navigation\": \"Itxi nabigazioa\", \"Close sidebar\": \"Itxi albo-barra\", \"Close Smart Picker\": \"Itxi hautatzaile adimenduna\", \"Collapse menu\": \"Tolestu menua\", \"Confirm changes\": \"Baieztatu aldaketak\", Custom: \"Pertsonalizatua\", \"Edit item\": \"Editatu elementua\", \"Enter link\": \"Sartu esteka\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"Errore bat gertatu da erlazionatutako baliabideak eskuratzean. Jarri harremanetan zure sistemaren administratzailearekin galderarik baduzu.\", \"External documentation for {name}\": \"{name}-ren kanpoko dokumentazioa\", Favorite: \"Gogokoa\", Flags: \"Banderak\", \"Food & Drink\": \"Janaria eta edariak\", \"Frequently used\": \"Askotan erabilia\", Global: \"Globala\", \"Go back to the list\": \"Bueltatu zerrendara\", \"Hide password\": \"Ezkutatu pasahitza\", 'Load more \"{options}\"': 'Kargatu \"{options}\" gehiago', \"Message limit of {count} characters reached\": \"Mezuaren {count} karaketere-limitera heldu zara\", \"More items …\": \"Elementu gehiago …\", \"More options\": \"Aukera gehiago\", Next: \"Hurrengoa\", \"No emoji found\": \"Ez da emojirik aurkitu\", \"No link provider found\": \"Ez da aurkitu esteka-hornitzailerik\", \"No results\": \"Emaitzarik ez\", Objects: \"Objektuak\", \"Open contact menu\": \"Ireki kontaktuen menua\", 'Open link to \"{resourceName}\"': 'Ireki \"{resourceName}\" esteka', \"Open menu\": \"Ireki menua\", \"Open navigation\": \"Ireki nabigazioa\", \"Open settings menu\": \"Ireki ezarpenen menua\", \"Password is secure\": \"Pasahitza segurua da\", \"Pause slideshow\": \"Pausatu diaporama\", \"People & Body\": \"Jendea eta gorputza\", \"Pick a date\": \"Aukeratu data bat\", \"Pick a date and a time\": \"Aukeratu data eta ordu bat\", \"Pick a month\": \"Aukeratu hilabete bat\", \"Pick a time\": \"Aukeratu ordu bat\", \"Pick a week\": \"Aukeratu aste bat\", \"Pick a year\": \"Aukeratu urte bat\", \"Pick an emoji\": \"Hautatu emoji bat\", \"Please select a time zone:\": \"Mesedez hautatu ordu-zona bat:\", Previous: \"Aurrekoa\", \"Provider icon\": \"Hornitzailearen ikonoa\", \"Raw link {options}\": \"Formaturik gabeko esteka {aukerak}\", \"Related resources\": \"Erlazionatutako baliabideak\", Search: \"Bilatu\", \"Search emoji\": \"Bilatu emojiak\", \"Search results\": \"Bilaketa emaitzak\", \"sec. ago\": \"duela seg.\", \"seconds ago\": \"duela segundo\", \"Select a tag\": \"Hautatu etiketa bat\", \"Select provider\": \"Hautatu hornitzailea\", Selected: \"Hautatuta\", Settings: \"Ezarpenak\", \"Settings navigation\": \"Nabigazio ezarpenak\", \"Show password\": \"Erakutsi pasahitza\", \"Smart Picker\": \"Hautatzaile adimenduna\", \"Smileys & Emotion\": \"Smileyak eta emozioa\", \"Start slideshow\": \"Hasi diaporama\", \"Start typing to search\": \"Hasi idazten bilatzeko\", Submit: \"Bidali\", Symbols: \"Sinboloak\", \"Travel & Places\": \"Bidaiak eta lekuak\", \"Type to search time zone\": \"Idatzi ordu-zona bat bilatzeko\", \"Unable to search the group\": \"Ezin izan da taldea bilatu\", \"Undo changes\": \"Aldaketak desegin\", \"Write a message …\": \"Idatzi mezu bat…\" } }, { locale: \"fa\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"fi\", translations: { \"{tag} (invisible)\": \"{tag} (näkymätön)\", \"{tag} (restricted)\": \"{tag} (rajoitettu)\", \"a few seconds ago\": \"\", Actions: \"Toiminnot\", 'Actions for item with name \"{name}\"': \"\", Activities: \"Aktiviteetit\", \"Animals & Nature\": \"Eläimet & luonto\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"Käyttäjän {displayName} avatar\", \"Avatar of {displayName}, {status}\": \"Käyttäjän {displayName} avatar, {status}\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"Peruuta muutokset\", \"Change name\": \"\", Choose: \"Valitse\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"Sulje\", \"Close modal\": \"\", \"Close navigation\": \"Sulje navigaatio\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"Vahvista muutokset\", Custom: \"Mukautettu\", \"Edit item\": \"Muokkaa kohdetta\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"Liput\", \"Food & Drink\": \"Ruoka & juoma\", \"Frequently used\": \"Usein käytetyt\", Global: \"Yleinen\", \"Go back to the list\": \"Siirry takaisin listaan\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"Viestin merkken enimmäisimäärä {count} täynnä \", \"More items …\": \"\", \"More options\": \"\", Next: \"Seuraava\", \"No emoji found\": \"Emojia ei löytynyt\", \"No link provider found\": \"\", \"No results\": \"Ei tuloksia\", Objects: \"Esineet & asiat\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"Avaa navigaatio\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"Keskeytä diaesitys\", \"People & Body\": \"Ihmiset & keho\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"Valitse emoji\", \"Please select a time zone:\": \"Valitse aikavyöhyke:\", Previous: \"Edellinen\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"Etsi\", \"Search emoji\": \"\", \"Search results\": \"Hakutulokset\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Valitse tagi\", \"Select provider\": \"\", Settings: \"Asetukset\", \"Settings navigation\": \"Asetusnavigaatio\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"Hymiöt & tunteet\", \"Start slideshow\": \"Aloita diaesitys\", \"Start typing to search\": \"\", Submit: \"Lähetä\", Symbols: \"Symbolit\", \"Travel & Places\": \"Matkustus & kohteet\", \"Type to search time zone\": \"Kirjoita etsiäksesi aikavyöhyke\", \"Unable to search the group\": \"Ryhmää ei voi hakea\", \"Undo changes\": \"Kumoa muutokset\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"fo\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"fr\", translations: { \"{tag} (invisible)\": \"{tag} (invisible)\", \"{tag} (restricted)\": \"{tag} (restreint)\", \"a few seconds ago\": \"il y a quelques instants\", Actions: \"Actions\", 'Actions for item with name \"{name}\"': `Actions de l'entrée avec le nom \"{name}\"`, Activities: \"Activités\", \"Animals & Nature\": \"Animaux & Nature\", \"Any link\": \"N'importe quel lien\", \"Anything shared with the same group of people will show up here\": \"Tout ce qui est partagé avec le même groupe de personnes apparaîtra ici\", \"Avatar of {displayName}\": \"Avatar de {displayName}\", \"Avatar of {displayName}, {status}\": \"Avatar de {displayName}, {status}\", away: \"absent\", Back: \"Retour\", \"Back to provider selection\": \"Revenir à la sélection du fournisseur\", \"Cancel changes\": \"Annuler les modifications\", \"Change name\": \"Modifier le nom\", Choose: \"Choisir\", \"Clear search\": \"Effacer la recherche\", \"Clear text\": \"Effacer le texte\", Close: \"Fermer\", \"Close modal\": \"Fermer la fenêtre\", \"Close navigation\": \"Fermer la navigation\", \"Close sidebar\": \"Fermer la barre latérale\", \"Close Smart Picker\": \"Fermer le sélecteur intelligent\", \"Collapse menu\": \"Réduire le menu\", \"Confirm changes\": \"Confirmer les modifications\", Custom: \"Personnalisé\", \"do not disturb\": \"ne pas déranger\", \"Edit item\": \"Éditer l'élément\", \"Enter link\": \"Saisissez le lien\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"Erreur lors de la récupération des ressources liées. Contactez votre administrateur système pour répondre à vos éventuelles questions.\", \"External documentation for {name}\": \"Documentation externe pour {name}\", Favorite: \"Favori\", Flags: \"Drapeaux\", \"Food & Drink\": \"Nourriture & Boissons\", \"Frequently used\": \"Utilisés fréquemment\", Global: \"Global\", \"Go back to the list\": \"Retourner à la liste\", \"Hide password\": \"Cacher le mot de passe\", 'Load more \"{options}\"': `Charger d'avantage \"{options}\"`, \"Message limit of {count} characters reached\": \"Limite de messages de {count} caractères atteinte\", \"More items …\": \"Plus d'éléments...\", \"More options\": \"Plus d'options\", Next: \"Suivant\", \"No emoji found\": \"Pas d’émoji trouvé\", \"No link provider found\": \"Aucun fournisseur de lien trouvé\", \"No results\": \"Aucun résultat\", Objects: \"Objets\", offline: \"hors ligne\", online: \"en ligne\", \"Open contact menu\": \"Ouvrir le menu Contact\", 'Open link to \"{resourceName}\"': 'Ouvrir le lien vers \"{resourceName}\"', \"Open menu\": \"Ouvrir le menu\", \"Open navigation\": \"Ouvrir la navigation\", \"Open settings menu\": \"Ouvrir le menu Paramètres\", \"Password is secure\": \"Le mot de passe est sécurisé\", \"Pause slideshow\": \"Mettre le diaporama en pause\", \"People & Body\": \"Personnes & Corps\", \"Pick a date\": \"Sélectionner une date\", \"Pick a date and a time\": \"Sélectionner une date et une heure\", \"Pick a month\": \"Sélectionner un mois\", \"Pick a time\": \"Sélectionner une heure\", \"Pick a week\": \"Sélectionner une semaine\", \"Pick a year\": \"Sélectionner une année\", \"Pick an emoji\": \"Choisissez un émoji\", \"Please select a time zone:\": \"Sélectionnez un fuseau horaire : \", Previous: \"Précédent\", \"Provider icon\": \"Icône du fournisseur\", \"Raw link {options}\": \"Lien brut {options}\", \"Related resources\": \"Ressources liées\", Search: \"Chercher\", \"Search emoji\": \"Rechercher un emoji\", \"Search results\": \"Résultats de recherche\", \"sec. ago\": \"il y a sec.\", \"seconds ago\": \"il y a secondes\", \"Select a tag\": \"Sélectionnez une balise\", \"Select provider\": \"Sélectionner un fournisseur\", Selected: \"sélectionné\", Settings: \"Paramètres\", \"Settings navigation\": \"Navigation dans les paramètres\", \"Show password\": \"Afficher le mot de passe\", \"Smart Picker\": \"Sélecteur intelligent\", \"Smileys & Emotion\": \"Smileys & Émotions\", \"Start slideshow\": \"Démarrer le diaporama\", \"Start typing to search\": \"Commencez à écrire pour rechercher\", Submit: \"Valider\", Symbols: \"Symboles\", \"Travel & Places\": \"Voyage & Lieux\", \"Type to search time zone\": \"Saisissez les premiers lettres pour rechercher un fuseau horaire\", \"Unable to search the group\": \"Impossible de chercher le groupe\", \"Undo changes\": \"Annuler les changements\", \"User status: {status}\": \"Statut de l'utilisateur : {status}\", \"Write a message …\": \"Ecrire un message...\" } }, { locale: \"gd\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"gl\", translations: { \"{tag} (invisible)\": \"{tag} (invisíbel)\", \"{tag} (restricted)\": \"{tag} (restrinxido)\", \"a few seconds ago\": \"hai uns segundos\", Actions: \"Accións\", 'Actions for item with name \"{name}\"': \"Accións para o elemento co nome «{name}»\", Activities: \"Actividades\", \"Animals & Nature\": \"Animais e natureza\", \"Any link\": \"Calquera ligazón\", \"Anything shared with the same group of people will show up here\": \"Todo o que se comparta co mesmo grupo de persoas aparecerá aquí\", \"Avatar of {displayName}\": \"Avatar de {displayName}\", \"Avatar of {displayName}, {status}\": \"Avatar de {displayName}, {status}\", away: \"ausente\", Back: \"Atrás\", \"Back to provider selection\": \"Volver á selección do provedor\", \"Cancel changes\": \"Cancelar os cambios\", \"Change name\": \"Cambiar o nome\", Choose: \"Escoller\", \"Clear search\": \"Limpar a busca\", \"Clear text\": \"Limpar o texto\", Close: \"Pechar\", \"Close modal\": \"Pechar a modal\", \"Close navigation\": \"Pechar a navegación\", \"Close sidebar\": \"Pechar a barra lateral\", \"Close Smart Picker\": \"Pechar o Selector intelixente\", \"Collapse menu\": \"Contraer o menú\", \"Confirm changes\": \"Confirma os cambios\", Custom: \"Personalizado\", \"do not disturb\": \"non molestar\", \"Edit item\": \"Editar o elemento\", \"Enter link\": \"Introducir a ligazón\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"Produciuse un erro ao obter os recursos relacionados. Póñase en contacto coa administración do seu sistema se ten algunha dúbida.\", \"External documentation for {name}\": \"Documentación externa para {name}\", Favorite: \"Favorito\", Flags: \"Bandeiras\", \"Food & Drink\": \"Comida e bebida\", \"Frequently used\": \"Usado con frecuencia\", Global: \"Global\", \"Go back to the list\": \"Volver á lista\", \"Hide password\": \"Agochar o contrasinal\", 'Load more \"{options}\"': \"Cargar máis «{options}»\", \"Message limit of {count} characters reached\": \"Acadouse o límite de {count} caracteres por mensaxe\", \"More items …\": \"Máis elementos…\", \"More options\": \"Máis opcións\", Next: \"Seguinte\", \"No emoji found\": \"Non se atopou ningún «emoji»\", \"No link provider found\": \"Non se atopou ningún provedor de ligazóns\", \"No results\": \"Sen resultados\", Objects: \"Obxectos\", offline: \"desconectado\", online: \"conectado\", \"Open contact menu\": \"Abrir o menú de contactos\", 'Open link to \"{resourceName}\"': \"Abrir a ligazón a «{resourceName}»\", \"Open menu\": \"Abrir o menú\", \"Open navigation\": \"Abrir a navegación\", \"Open settings menu\": \"Abrir o menú de axustes\", \"Password is secure\": \"O contrasinal é seguro\", \"Pause slideshow\": \"Pausar o diaporama\", \"People & Body\": \"Persoas e corpo\", \"Pick a date\": \"Escolla unha data\", \"Pick a date and a time\": \"Escolle unha data e unha hora\", \"Pick a month\": \"Escolla un mes\", \"Pick a time\": \"Escolla unha hora\", \"Pick a week\": \"Escolla unha semana\", \"Pick a year\": \"Escolla un ano\", \"Pick an emoji\": \"Escolla un «emoji»\", \"Please select a time zone:\": \"Escolla un fuso horario:\", Previous: \"Anterir\", \"Provider icon\": \"Icona do provedor\", \"Raw link {options}\": \"Ligazón sen procesar {options}\", \"Related resources\": \"Recursos relacionados\", Search: \"Buscar\", \"Search emoji\": \"Buscar «emoji»\", \"Search results\": \"Resultados da busca\", \"sec. ago\": \"segs. atrás\", \"seconds ago\": \"segundos atrás\", \"Select a tag\": \"Seleccione unha etiqueta\", \"Select provider\": \"Seleccionar provedor\", Selected: \"Seleccionado\", Settings: \"Axustes\", \"Settings navigation\": \"Navegación polos axustes\", \"Show password\": \"Amosar o contrasinal\", \"Smart Picker\": \"Selector intelixente\", \"Smileys & Emotion\": \"Sorrisos e emocións\", \"Start slideshow\": \"Iniciar o diaporama\", \"Start typing to search\": \"Comece a escribir para buscar\", Submit: \"Enviar\", Symbols: \"Símbolos\", \"Travel & Places\": \"Viaxes e lugares\", \"Type to search time zone\": \"Escriba para buscar o fuso horario\", \"Unable to search the group\": \"Non foi posíbel buscar o grupo\", \"Undo changes\": \"Desfacer os cambios\", \"User status: {status}\": \"Estado do usuario: {status}\", \"Write a message …\": \"Escribir unha mensaxe…\" } }, { locale: \"he\", translations: { \"{tag} (invisible)\": \"{tag} (נסתר)\", \"{tag} (restricted)\": \"{tag} (מוגבל)\", \"a few seconds ago\": \"לפני מספר שניות\", Actions: \"פעולות\", 'Actions for item with name \"{name}\"': \"פעולות לפריט בשם „{name}”\", Activities: \"פעילויות\", \"Animals & Nature\": \"חיות וטבע\", \"Any link\": \"קישור כלשהו\", \"Anything shared with the same group of people will show up here\": \"כל מה שמשותף עם אותה קבוצת האנשים יופיע כאן\", \"Avatar of {displayName}\": \"תמונה ייצוגית של {displayName}\", \"Avatar of {displayName}, {status}\": \"תמונה ייצוגית של {displayName}, {status}\", Back: \"חזרה\", \"Back to provider selection\": \"חזרה לבחירת ספק\", \"Cancel changes\": \"ביטול שינויים\", \"Change name\": \"החלפת שם\", Choose: \"בחירה\", \"Clear search\": \"פינוי חיפוש\", \"Clear text\": \"פינוי טקסט\", Close: \"סגירה\", \"Close modal\": \"סגירת החלונית\", \"Close navigation\": \"סגירת הניווט\", \"Close sidebar\": \"סגירת סרגל הצד\", \"Close Smart Picker\": \"סגירת הבורר החכם\", \"Collapse menu\": \"צמצום התפריט\", \"Confirm changes\": \"אישור השינויים\", Custom: \"בהתאמה אישית\", \"Edit item\": \"עריכת פריט\", \"Enter link\": \"מילוי קישור\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"שגיאה בקבלת המשאבים הקשורים. נא ליצור קשר עם הנהלת המערכת אם יש לך שאלות.\", \"External documentation for {name}\": \"תיעוד חיצוני עבור {name}\", Favorite: \"למועדפים\", Flags: \"דגלים\", \"Food & Drink\": \"מזון ומשקאות\", \"Frequently used\": \"בשימוש תדיר\", Global: \"כללי\", \"Go back to the list\": \"חזרה לרשימה\", \"Hide password\": \"הסתרת סיסמה\", 'Load more \"{options}\"': \"\", \"Message limit of {count} characters reached\": \"הגעת למגבלה של {count} תווים\", \"More items …\": \"פריטים נוספים…\", \"More options\": \"אפשרויות נוספות\", Next: \"הבא\", \"No emoji found\": \"לא נמצא אמוג׳י\", \"No link provider found\": \"לא נמצא ספק קישורים\", \"No results\": \"אין תוצאות\", Objects: \"חפצים\", \"Open contact menu\": \"פתיחת תפריט קשר\", 'Open link to \"{resourceName}\"': \"פתיחת קישור אל „{resourceName}”\", \"Open menu\": \"פתיחת תפריט\", \"Open navigation\": \"פתיחת ניווט\", \"Open settings menu\": \"פתיחת תפריט הגדרות\", \"Password is secure\": \"הסיסמה מאובטחת\", \"Pause slideshow\": \"השהיית מצגת\", \"People & Body\": \"אנשים וגוף\", \"Pick a date\": \"נא לבחור תאריך\", \"Pick a date and a time\": \"נא לבחור תאריך ושעה\", \"Pick a month\": \"נא לבחור חודש\", \"Pick a time\": \"נא לבחור שעה\", \"Pick a week\": \"נא לבחור שבוע\", \"Pick a year\": \"נא לבחור שנה\", \"Pick an emoji\": \"נא לבחור אמוג׳י\", \"Please select a time zone:\": \"נא לבחור אזור זמן:\", Previous: \"הקודם\", \"Provider icon\": \"סמל ספק\", \"Raw link {options}\": \"קישור גולמי {options}\", \"Related resources\": \"משאבים קשורים\", Search: \"חיפוש\", \"Search emoji\": \"חיפוש אמוג׳י\", \"Search results\": \"תוצאות חיפוש\", \"sec. ago\": \"לפני מספר שניות\", \"seconds ago\": \"לפני מס׳ שניות\", \"Select a tag\": \"בחירת תגית\", \"Select provider\": \"בחירת ספק\", Selected: \"\", Settings: \"הגדרות\", \"Settings navigation\": \"ניווט בהגדרות\", \"Show password\": \"הצגת סיסמה\", \"Smart Picker\": \"בורר חכם\", \"Smileys & Emotion\": \"חייכנים ורגשונים\", \"Start slideshow\": \"התחלת המצגת\", \"Start typing to search\": \"התחלת הקלדה מחפשת\", Submit: \"הגשה\", Symbols: \"סמלים\", \"Travel & Places\": \"טיולים ומקומות\", \"Type to search time zone\": \"יש להקליד כדי לחפש אזור זמן\", \"Unable to search the group\": \"לא ניתן לחפש בקבוצה\", \"Undo changes\": \"ביטול שינויים\", \"Write a message …\": \"\" } }, { locale: \"hi_IN\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"hr\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"hsb\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"hu\", translations: { \"{tag} (invisible)\": \"{tag} (láthatatlan)\", \"{tag} (restricted)\": \"{tag} (korlátozott)\", \"a few seconds ago\": \"\", Actions: \"Műveletek\", 'Actions for item with name \"{name}\"': \"\", Activities: \"Tevékenységek\", \"Animals & Nature\": \"Állatok és természet\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"Minden, amit ugyanazzal a csoporttal oszt meg, itt fog megjelenni\", \"Avatar of {displayName}\": \"{displayName} profilképe\", \"Avatar of {displayName}, {status}\": \"{displayName} profilképe, {status}\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"Változtatások elvetése\", \"Change name\": \"\", Choose: \"Válassszon\", \"Clear search\": \"\", \"Clear text\": \"Szöveg törlése\", Close: \"Bezárás\", \"Close modal\": \"Ablak bezárása\", \"Close navigation\": \"Navigáció bezárása\", \"Close sidebar\": \"Oldalsáv bezárása\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"Változtatások megerősítése\", Custom: \"Egyéni\", \"Edit item\": \"Elem szerkesztése\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"Kedvenc\", Flags: \"Zászlók\", \"Food & Drink\": \"Étel és ital\", \"Frequently used\": \"Gyakran használt\", Global: \"Globális\", \"Go back to the list\": \"Ugrás vissza a listához\", \"Hide password\": \"Jelszó elrejtése\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"{count} karakteres üzenetkorlát elérve\", \"More items …\": \"További elemek...\", \"More options\": \"\", Next: \"Következő\", \"No emoji found\": \"Nem található emodzsi\", \"No link provider found\": \"\", \"No results\": \"Nincs találat\", Objects: \"Tárgyak\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"Navigáció megnyitása\", \"Open settings menu\": \"\", \"Password is secure\": \"A jelszó biztonságos\", \"Pause slideshow\": \"Diavetítés szüneteltetése\", \"People & Body\": \"Emberek és test\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"Válasszon egy emodzsit\", \"Please select a time zone:\": \"Válasszon időzónát:\", Previous: \"Előző\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"Kapcsolódó erőforrások\", Search: \"Keresés\", \"Search emoji\": \"\", \"Search results\": \"Találatok\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Válasszon címkét\", \"Select provider\": \"\", Settings: \"Beállítások\", \"Settings navigation\": \"Navigáció a beállításokban\", \"Show password\": \"Jelszó megjelenítése\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"Mosolyok és érzelmek\", \"Start slideshow\": \"Diavetítés indítása\", \"Start typing to search\": \"\", Submit: \"Beküldés\", Symbols: \"Szimbólumok\", \"Travel & Places\": \"Utazás és helyek\", \"Type to search time zone\": \"Gépeljen az időzóna kereséséhez\", \"Unable to search the group\": \"A csoport nem kereshető\", \"Undo changes\": \"Változtatások visszavonása\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"Írjon egy üzenetet, használja a „@”-ot valaki megemlítéséhet, illetve a „:”-ot az emodzsik automatikus kiegészítéséhez…\" } }, { locale: \"hy\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"ia\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"id\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"ig\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"is\", translations: { \"{tag} (invisible)\": \"{tag} (ósýnilegt)\", \"{tag} (restricted)\": \"{tag} (takmarkað)\", \"a few seconds ago\": \"\", Actions: \"Aðgerðir\", 'Actions for item with name \"{name}\"': \"\", Activities: \"Aðgerðir\", \"Animals & Nature\": \"Dýr og náttúra\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"Velja\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"Loka\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"Sérsniðið\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"Flögg\", \"Food & Drink\": \"Matur og drykkur\", \"Frequently used\": \"Oftast notað\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"Næsta\", \"No emoji found\": \"Ekkert tjáningartákn fannst\", \"No link provider found\": \"\", \"No results\": \"Engar niðurstöður\", Objects: \"Hlutir\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"Gera hlé á skyggnusýningu\", \"People & Body\": \"Fólk og líkami\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"Veldu tjáningartákn\", \"Please select a time zone:\": \"\", Previous: \"Fyrri\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"Leita\", \"Search emoji\": \"\", \"Search results\": \"Leitarniðurstöður\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Veldu merki\", \"Select provider\": \"\", Settings: \"Stillingar\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"Broskallar og tilfinningar\", \"Start slideshow\": \"Byrja skyggnusýningu\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"Tákn\", \"Travel & Places\": \"Staðir og ferðalög\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"Get ekki leitað í hópnum\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"it\", translations: { \"{tag} (invisible)\": \"{tag} (invisibile)\", \"{tag} (restricted)\": \"{tag} (limitato)\", \"a few seconds ago\": \"\", Actions: \"Azioni\", 'Actions for item with name \"{name}\"': \"\", Activities: \"Attività\", \"Animals & Nature\": \"Animali e natura\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"Tutto ciò che è stato condiviso con lo stesso gruppo di persone viene visualizzato qui\", \"Avatar of {displayName}\": \"Avatar di {displayName}\", \"Avatar of {displayName}, {status}\": \"Avatar di {displayName}, {status}\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"Annulla modifiche\", \"Change name\": \"\", Choose: \"Scegli\", \"Clear search\": \"\", \"Clear text\": \"Cancella il testo\", Close: \"Chiudi\", \"Close modal\": \"Chiudi il messaggio modale\", \"Close navigation\": \"Chiudi la navigazione\", \"Close sidebar\": \"Chiudi la barra laterale\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"Conferma modifiche\", Custom: \"Personalizzato\", \"Edit item\": \"Modifica l'elemento\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"Preferito\", Flags: \"Bandiere\", \"Food & Drink\": \"Cibo e bevande\", \"Frequently used\": \"Usati di frequente\", Global: \"Globale\", \"Go back to the list\": \"Torna all'elenco\", \"Hide password\": \"Nascondi la password\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"Limite dei messaggi di {count} caratteri raggiunto\", \"More items …\": \"Più elementi ...\", \"More options\": \"\", Next: \"Successivo\", \"No emoji found\": \"Nessun emoji trovato\", \"No link provider found\": \"\", \"No results\": \"Nessun risultato\", Objects: \"Oggetti\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"Apri la navigazione\", \"Open settings menu\": \"\", \"Password is secure\": \"La password è sicura\", \"Pause slideshow\": \"Presentazione in pausa\", \"People & Body\": \"Persone e corpo\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"Scegli un emoji\", \"Please select a time zone:\": \"Si prega di selezionare un fuso orario:\", Previous: \"Precedente\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"Risorse correlate\", Search: \"Cerca\", \"Search emoji\": \"\", \"Search results\": \"Risultati di ricerca\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Seleziona un'etichetta\", \"Select provider\": \"\", Settings: \"Impostazioni\", \"Settings navigation\": \"Navigazione delle impostazioni\", \"Show password\": \"Mostra la password\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"Faccine ed emozioni\", \"Start slideshow\": \"Avvia presentazione\", \"Start typing to search\": \"\", Submit: \"Invia\", Symbols: \"Simboli\", \"Travel & Places\": \"Viaggi e luoghi\", \"Type to search time zone\": \"Digita per cercare un fuso orario\", \"Unable to search the group\": \"Impossibile cercare il gruppo\", \"Undo changes\": \"Cancella i cambiamenti\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': 'Scrivi un messaggio, \"@\" per menzionare qualcuno, \":\" per il completamento automatico delle emoji ...' } }, { locale: \"ja\", translations: { \"{tag} (invisible)\": \"{タグ} (不可視)\", \"{tag} (restricted)\": \"{タグ} (制限付)\", \"a few seconds ago\": \"\", Actions: \"操作\", 'Actions for item with name \"{name}\"': \"\", Activities: \"アクティビティ\", \"Animals & Nature\": \"動物と自然\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"同じグループで共有しているものは、全てここに表示されます\", \"Avatar of {displayName}\": \"{displayName} のアバター\", \"Avatar of {displayName}, {status}\": \"{displayName}, {status} のアバター\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"変更をキャンセル\", \"Change name\": \"\", Choose: \"選択\", \"Clear search\": \"\", \"Clear text\": \"テキストをクリア\", Close: \"閉じる\", \"Close modal\": \"モーダルを閉じる\", \"Close navigation\": \"ナビゲーションを閉じる\", \"Close sidebar\": \"サイドバーを閉じる\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"変更を承認\", Custom: \"カスタム\", \"Edit item\": \"編集\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"お気に入り\", Flags: \"国旗\", \"Food & Drink\": \"食べ物と飲み物\", \"Frequently used\": \"よく使うもの\", Global: \"全体\", \"Go back to the list\": \"リストに戻る\", \"Hide password\": \"パスワードを非表示\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"{count} 文字のメッセージ上限に達しています\", \"More items …\": \"他のアイテム\", \"More options\": \"\", Next: \"次\", \"No emoji found\": \"絵文字が見つかりません\", \"No link provider found\": \"\", \"No results\": \"なし\", Objects: \"物\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"ナビゲーションを開く\", \"Open settings menu\": \"\", \"Password is secure\": \"パスワードは保護されています\", \"Pause slideshow\": \"スライドショーを一時停止\", \"People & Body\": \"様々な人と体の部位\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"絵文字を選択\", \"Please select a time zone:\": \"タイムゾーンを選んで下さい:\", Previous: \"前\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"関連リソース\", Search: \"検索\", \"Search emoji\": \"\", \"Search results\": \"検索結果\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"タグを選択\", \"Select provider\": \"\", Settings: \"設定\", \"Settings navigation\": \"ナビゲーション設定\", \"Show password\": \"パスワードを表示\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"感情表現\", \"Start slideshow\": \"スライドショーを開始\", \"Start typing to search\": \"\", Submit: \"提出\", Symbols: \"記号\", \"Travel & Places\": \"旅行と場所\", \"Type to search time zone\": \"タイムゾーン検索のため入力してください\", \"Unable to search the group\": \"グループを検索できません\", \"Undo changes\": \"変更を取り消し\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': 'メッセージを記入、\"@\"でメンション、\":\"で絵文字の自動補完 ...' } }, { locale: \"ka\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"ka_GE\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"kab\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"kk\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"km\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"kn\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"ko\", translations: { \"{tag} (invisible)\": \"{tag}(숨김)\", \"{tag} (restricted)\": \"{tag}(제한)\", \"a few seconds ago\": \"방금 전\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"활동\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"la\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"lb\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"lo\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"lt_LT\", translations: { \"{tag} (invisible)\": \"{tag} (nematoma)\", \"{tag} (restricted)\": \"{tag} (apribota)\", \"a few seconds ago\": \"\", Actions: \"Veiksmai\", 'Actions for item with name \"{name}\"': \"\", Activities: \"Veiklos\", \"Animals & Nature\": \"Gyvūnai ir gamta\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"Pasirinkti\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"Užverti\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"Tinkinti\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"Vėliavos\", \"Food & Drink\": \"Maistas ir gėrimai\", \"Frequently used\": \"Dažniausiai naudoti\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"Pasiekta {count} simbolių žinutės riba\", \"More items …\": \"\", \"More options\": \"\", Next: \"Kitas\", \"No emoji found\": \"Nerasta jaustukų\", \"No link provider found\": \"\", \"No results\": \"Nėra rezultatų\", Objects: \"Objektai\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"Pristabdyti skaidrių rodymą\", \"People & Body\": \"Žmonės ir kūnas\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"Pasirinkti jaustuką\", \"Please select a time zone:\": \"\", Previous: \"Ankstesnis\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"Ieškoti\", \"Search emoji\": \"\", \"Search results\": \"Paieškos rezultatai\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Pasirinkti žymę\", \"Select provider\": \"\", Settings: \"Nustatymai\", \"Settings navigation\": \"Naršymas nustatymuose\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"Šypsenos ir emocijos\", \"Start slideshow\": \"Pradėti skaidrių rodymą\", \"Start typing to search\": \"\", Submit: \"Pateikti\", Symbols: \"Simboliai\", \"Travel & Places\": \"Kelionės ir vietos\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"Nepavyko atlikti paiešką grupėje\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"lv\", translations: { \"{tag} (invisible)\": \"{tag} (neredzams)\", \"{tag} (restricted)\": \"{tag} (ierobežots)\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"Izvēlēties\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"Aizvērt\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"Nākamais\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"Nav rezultātu\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"Pauzēt slaidrādi\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"Iepriekšējais\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Izvēlēties birku\", \"Select provider\": \"\", Settings: \"Iestatījumi\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"Sākt slaidrādi\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"mk\", translations: { \"{tag} (invisible)\": \"{tag} (невидливо)\", \"{tag} (restricted)\": \"{tag} (ограничено)\", \"a few seconds ago\": \"\", Actions: \"Акции\", 'Actions for item with name \"{name}\"': \"\", Activities: \"Активности\", \"Animals & Nature\": \"Животни & Природа\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"Аватар на {displayName}\", \"Avatar of {displayName}, {status}\": \"Аватар на {displayName}, {status}\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"Откажи ги промените\", \"Change name\": \"\", Choose: \"Избери\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"Затвори\", \"Close modal\": \"Затвори модал\", \"Close navigation\": \"Затвори навигација\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"Потврди ги промените\", Custom: \"Прилагодени\", \"Edit item\": \"Уреди\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"Фаворити\", Flags: \"Знамиња\", \"Food & Drink\": \"Храна & Пијалоци\", \"Frequently used\": \"Најчесто користени\", Global: \"Глобално\", \"Go back to the list\": \"Врати се на листата\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"Ограничувањето на должината на пораката од {count} карактери е надминато\", \"More items …\": \"\", \"More options\": \"\", Next: \"Следно\", \"No emoji found\": \"Не се пронајдени емотикони\", \"No link provider found\": \"\", \"No results\": \"Нема резултати\", Objects: \"Објекти\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"Отвори навигација\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"Пузирај слајдшоу\", \"People & Body\": \"Луѓе & Тело\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"Избери емотикон\", \"Please select a time zone:\": \"Изберете временска зона:\", Previous: \"Предходно\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"Барај\", \"Search emoji\": \"\", \"Search results\": \"Резултати од барувањето\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Избери ознака\", \"Select provider\": \"\", Settings: \"Параметри\", \"Settings navigation\": \"Параметри за навигација\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"Смешковци & Емотикони\", \"Start slideshow\": \"Стартувај слајдшоу\", \"Start typing to search\": \"\", Submit: \"Испрати\", Symbols: \"Симболи\", \"Travel & Places\": \"Патувања & Места\", \"Type to search time zone\": \"Напишете за да пребарате временска зона\", \"Unable to search the group\": \"Неможе да се принајде групата\", \"Undo changes\": \"Врати ги промените\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"mn\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"mr\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"ms_MY\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"my\", translations: { \"{tag} (invisible)\": \"{tag} (ကွယ်ဝှက်ထား)\", \"{tag} (restricted)\": \"{tag} (ကန့်သတ်)\", \"a few seconds ago\": \"\", Actions: \"လုပ်ဆောင်ချက်များ\", 'Actions for item with name \"{name}\"': \"\", Activities: \"ပြုလုပ်ဆောင်တာများ\", \"Animals & Nature\": \"တိရစ္ဆာန်များနှင့် သဘာဝ\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"{displayName} ၏ ကိုယ်ပွား\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"ပြောင်းလဲမှုများ ပယ်ဖျက်ရန်\", \"Change name\": \"\", Choose: \"ရွေးချယ်ရန်\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"ပိတ်ရန်\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"ပြောင်းလဲမှုများ အတည်ပြုရန်\", Custom: \"အလိုကျချိန်ညှိမှု\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"အလံများ\", \"Food & Drink\": \"အစားအသောက်\", \"Frequently used\": \"မကြာခဏအသုံးပြုသော\", Global: \"ကမ္ဘာလုံးဆိုင်ရာ\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"ကန့်သတ် စာလုံးရေ {count} လုံး ပြည့်ပါပြီ\", \"More items …\": \"\", \"More options\": \"\", Next: \"နောက်သို့ဆက်ရန်\", \"No emoji found\": \"အီမိုဂျီ ရှာဖွေမတွေ့နိုင်ပါ\", \"No link provider found\": \"\", \"No results\": \"ရလဒ်မရှိပါ\", Objects: \"အရာဝတ္ထုများ\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"စလိုက်ရှိုး ခေတ္တရပ်ရန်\", \"People & Body\": \"လူပုဂ္ဂိုလ်များနှင့် ခန္ဓာကိုယ်\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"အီမိုဂျီရွေးရန်\", \"Please select a time zone:\": \"ဒေသစံတော်ချိန် ရွေးချယ်ပေးပါ\", Previous: \"ယခင်\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"ရှာဖွေရန်\", \"Search emoji\": \"\", \"Search results\": \"ရှာဖွေမှု ရလဒ်များ\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"tag ရွေးချယ်ရန်\", \"Select provider\": \"\", Settings: \"ချိန်ညှိချက်များ\", \"Settings navigation\": \"ချိန်ညှိချက်အညွှန်း\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"စမိုင်လီများနှင့် အီမိုရှင်း\", \"Start slideshow\": \"စလိုက်ရှိုးအား စတင်ရန်\", \"Start typing to search\": \"\", Submit: \"တင်သွင်းရန်\", Symbols: \"သင်္ကေတများ\", \"Travel & Places\": \"ခရီးသွားလာခြင်းနှင့် နေရာများ\", \"Type to search time zone\": \"ဒေသစံတော်ချိန်များ ရှာဖွေရန် စာရိုက်ပါ\", \"Unable to search the group\": \"အဖွဲ့အား ရှာဖွေ၍ မရနိုင်ပါ\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"nb\", translations: { \"{tag} (invisible)\": \"{tag} (usynlig)\", \"{tag} (restricted)\": \"{tag} (beskyttet)\", \"a few seconds ago\": \"\", Actions: \"Handlinger\", 'Actions for item with name \"{name}\"': \"\", Activities: \"Aktiviteter\", \"Animals & Nature\": \"Dyr og natur\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"Alt som er delt med den samme gruppen vil vises her\", \"Avatar of {displayName}\": \"Avataren til {displayName}\", \"Avatar of {displayName}, {status}\": \"{displayName}'s avatar, {status}\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"Avbryt endringer\", \"Change name\": \"\", Choose: \"Velg\", \"Clear search\": \"\", \"Clear text\": \"Fjern tekst\", Close: \"Lukk\", \"Close modal\": \"Lukk modal\", \"Close navigation\": \"Lukk navigasjon\", \"Close sidebar\": \"Lukk sidepanel\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"Bekreft endringer\", Custom: \"Tilpasset\", \"Edit item\": \"Rediger\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"Favoritt\", Flags: \"Flagg\", \"Food & Drink\": \"Mat og drikke\", \"Frequently used\": \"Ofte brukt\", Global: \"Global\", \"Go back to the list\": \"Gå tilbake til listen\", \"Hide password\": \"Skjul passord\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"Karakter begrensing {count} nådd i melding\", \"More items …\": \"Flere gjenstander...\", \"More options\": \"\", Next: \"Neste\", \"No emoji found\": \"Fant ingen emoji\", \"No link provider found\": \"\", \"No results\": \"Ingen resultater\", Objects: \"Objekter\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"Åpne navigasjon\", \"Open settings menu\": \"\", \"Password is secure\": \"Passordet er sikkert\", \"Pause slideshow\": \"Pause lysbildefremvisning\", \"People & Body\": \"Mennesker og kropp\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"Velg en emoji\", \"Please select a time zone:\": \"Vennligst velg tidssone\", Previous: \"Forrige\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"Relaterte ressurser\", Search: \"Søk\", \"Search emoji\": \"\", \"Search results\": \"Søkeresultater\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Velg en merkelapp\", \"Select provider\": \"\", Settings: \"Innstillinger\", \"Settings navigation\": \"Navigasjonsinstillinger\", \"Show password\": \"Vis passord\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"Smilefjes og følelser\", \"Start slideshow\": \"Start lysbildefremvisning\", \"Start typing to search\": \"\", Submit: \"Send\", Symbols: \"Symboler\", \"Travel & Places\": \"Reise og steder\", \"Type to search time zone\": \"Tast for å søke etter tidssone\", \"Unable to search the group\": \"Kunne ikke søke i gruppen\", \"Undo changes\": \"Tilbakestill endringer\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': 'Skriv melding, bruk \"@\" for å nevne noen, bruk \":\" for autofullføring av emoji...' } }, { locale: \"ne\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"nl\", translations: { \"{tag} (invisible)\": \"{tag} (onzichtbaar)\", \"{tag} (restricted)\": \"{tag} (beperkt)\", \"a few seconds ago\": \"enkele seconden terug\", Actions: \"Acties\", 'Actions for item with name \"{name}\"': 'Actie voor item met naam \"{name}\"', Activities: \"Activiteiten\", \"Animals & Nature\": \"Dieren & Natuur\", \"Any link\": \"Elke link\", \"Anything shared with the same group of people will show up here\": \"Alles dat gedeeld is met dezelfde groep mensen zal hier getoond worden\", \"Avatar of {displayName}\": \"Avatar van {displayName}\", \"Avatar of {displayName}, {status}\": \"Avatar van {displayName}, {status}\", away: \"weg\", Back: \"Terug\", \"Back to provider selection\": \"Terug naar provider selectie\", \"Cancel changes\": \"Wijzigingen annuleren\", \"Change name\": \"Verander naam\", Choose: \"Kies\", \"Clear search\": \"Wis zoekopdracht\", \"Clear text\": \"Wis tekst\", Close: \"Sluiten\", \"Close modal\": \"Sluit modal\", \"Close navigation\": \"Navigatie sluiten\", \"Close sidebar\": \"Sluit sidebar\", \"Close Smart Picker\": \"Sluit Slimme Kiezer\", \"Collapse menu\": \"Klap menu in\", \"Confirm changes\": \"Wijzigingen bevestigen\", Custom: \"Aangepast\", \"do not disturb\": \"niet storen\", \"Edit item\": \"Item bewerken\", \"Enter link\": \"Voer link in\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"Fout bij het verkrijgen van resources. Neem a.u.b. contact op met uw systeembeheerder als u vragen heeft.\", \"External documentation for {name}\": \"Externe documentatie voor {name}\", Favorite: \"Favoriet\", Flags: \"Vlaggen\", \"Food & Drink\": \"Eten & Drinken\", \"Frequently used\": \"Vaak gebruikt\", Global: \"Globaal\", \"Go back to the list\": \"Ga terug naar de lijst\", \"Hide password\": \"Verberg wachtwoord\", 'Load more \"{options}\"': 'Laad meer \"{options}\"', \"Message limit of {count} characters reached\": \"Berichtlimiet van {count} karakters bereikt\", \"More items …\": \"Meer items...\", \"More options\": \"Meer opties\", Next: \"Volgende\", \"No emoji found\": \"Geen emoji gevonden\", \"No link provider found\": \"Geen link provider gevonden\", \"No results\": \"Geen resultaten\", Objects: \"Objecten\", offline: \"offline\", online: \"online\", \"Open contact menu\": \"Open contactenmenu\", 'Open link to \"{resourceName}\"': 'Open link naar \"{resourceName}\"', \"Open menu\": \"Open menu\", \"Open navigation\": \"Navigatie openen\", \"Open settings menu\": \"Open instellingenmenu\", \"Password is secure\": \"Wachtwoord is veilig\", \"Pause slideshow\": \"Pauzeer diavoorstelling\", \"People & Body\": \"Mensen & Lichaam\", \"Pick a date\": \"Selecteer een datum\", \"Pick a date and a time\": \"Selecteer een datum en tijd\", \"Pick a month\": \"Selecteer een maand\", \"Pick a time\": \"Selecteer een tijd\", \"Pick a week\": \"Selecteer een week\", \"Pick a year\": \"Selecteer een jaar\", \"Pick an emoji\": \"Kies een emoji\", \"Please select a time zone:\": \"Selecteer een tijdzone:\", Previous: \"Vorige\", \"Provider icon\": \"Provider icon\", \"Raw link {options}\": \"Basis link {options}\", \"Related resources\": \"Gerelateerde bronnen\", Search: \"Zoeken\", \"Search emoji\": \"Zoek emoji\", \"Search results\": \"Zoekresultaten\", \"sec. ago\": \"sec. geleden\", \"seconds ago\": \"seconden geleden\", \"Select a tag\": \"Selecteer een label\", \"Select provider\": \"Selecteer provider\", Selected: \"Geselecteerd\", Settings: \"Instellingen\", \"Settings navigation\": \"Instellingen navigatie\", \"Show password\": \"Toon wachtwoord\", \"Smart Picker\": \"Slimme Kiezer\", \"Smileys & Emotion\": \"Smileys & Emotie\", \"Start slideshow\": \"Start diavoorstelling\", \"Start typing to search\": \"Start met typen om te zoeken\", Submit: \"Verwerken\", Symbols: \"Symbolen\", \"Travel & Places\": \"Reizen & Plaatsen\", \"Type to search time zone\": \"Type om een tijdzone te zoeken\", \"Unable to search the group\": \"Kan niet zoeken in de groep\", \"Undo changes\": \"Wijzigingen ongedaan maken\", \"User status: {status}\": \"Gebruikers status: {status}\", \"Write a message …\": \"Schrijf een bericht...\" } }, { locale: \"nn_NO\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"oc\", translations: { \"{tag} (invisible)\": \"{tag} (invisible)\", \"{tag} (restricted)\": \"{tag} (limit)\", \"a few seconds ago\": \"\", Actions: \"Accions\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"Causir\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"Tampar\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"Seguent\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"Cap de resultat\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"Metre en pausa lo diaporama\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"Precedent\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Seleccionar una etiqueta\", \"Select provider\": \"\", Settings: \"Paramètres\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"Lançar lo diaporama\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"pl\", translations: { \"{tag} (invisible)\": \"{tag} (niewidoczna)\", \"{tag} (restricted)\": \"{tag} (ograniczona)\", \"a few seconds ago\": \"\", Actions: \"Działania\", 'Actions for item with name \"{name}\"': \"\", Activities: \"Aktywność\", \"Animals & Nature\": \"Zwierzęta i natura\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"Tutaj pojawi się wszystko, co zostało udostępnione tej samej grupie osób\", \"Avatar of {displayName}\": \"Awatar {displayName}\", \"Avatar of {displayName}, {status}\": \"Awatar {displayName}, {status}\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"Anuluj zmiany\", \"Change name\": \"\", Choose: \"Wybierz\", \"Clear search\": \"\", \"Clear text\": \"Wyczyść tekst\", Close: \"Zamknij\", \"Close modal\": \"Zamknij modal\", \"Close navigation\": \"Zamknij nawigację\", \"Close sidebar\": \"Zamknij pasek boczny\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"Potwierdź zmiany\", Custom: \"Zwyczajne\", \"Edit item\": \"Edytuj element\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"Ulubiony\", Flags: \"Flagi\", \"Food & Drink\": \"Jedzenie i picie\", \"Frequently used\": \"Często używane\", Global: \"Globalnie\", \"Go back to the list\": \"Powrót do listy\", \"Hide password\": \"Ukryj hasło\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"Przekroczono limit wiadomości wynoszący {count} znaków\", \"More items …\": \"Więcej pozycji…\", \"More options\": \"\", Next: \"Następny\", \"No emoji found\": \"Nie znaleziono emoji\", \"No link provider found\": \"\", \"No results\": \"Brak wyników\", Objects: \"Obiekty\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"Otwórz nawigację\", \"Open settings menu\": \"\", \"Password is secure\": \"Hasło jest bezpieczne\", \"Pause slideshow\": \"Wstrzymaj pokaz slajdów\", \"People & Body\": \"Ludzie i ciało\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"Wybierz emoji\", \"Please select a time zone:\": \"Wybierz strefę czasową:\", Previous: \"Poprzedni\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"Powiązane zasoby\", Search: \"Szukaj\", \"Search emoji\": \"\", \"Search results\": \"Wyniki wyszukiwania\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Wybierz etykietę\", \"Select provider\": \"\", Settings: \"Ustawienia\", \"Settings navigation\": \"Ustawienia nawigacji\", \"Show password\": \"Pokaż hasło\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"Buźki i emotikony\", \"Start slideshow\": \"Rozpocznij pokaz slajdów\", \"Start typing to search\": \"\", Submit: \"Wyślij\", Symbols: \"Symbole\", \"Travel & Places\": \"Podróże i miejsca\", \"Type to search time zone\": \"Wpisz, aby wyszukać strefę czasową\", \"Unable to search the group\": \"Nie można przeszukać grupy\", \"Undo changes\": \"Cofnij zmiany\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': 'Napisz wiadomość, \"@\" aby o kimś wspomnieć, \":\" dla autouzupełniania emoji…' } }, { locale: \"ps\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"pt_BR\", translations: { \"{tag} (invisible)\": \"{tag} (invisível)\", \"{tag} (restricted)\": \"{tag} (restrito) \", \"a few seconds ago\": \"\", Actions: \"Ações\", 'Actions for item with name \"{name}\"': \"\", Activities: \"Atividades\", \"Animals & Nature\": \"Animais & Natureza\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"Qualquer coisa compartilhada com o mesmo grupo de pessoas aparecerá aqui\", \"Avatar of {displayName}\": \"Avatar de {displayName}\", \"Avatar of {displayName}, {status}\": \"Avatar de {displayName}, {status}\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"Cancelar alterações\", \"Change name\": \"\", Choose: \"Escolher\", \"Clear search\": \"\", \"Clear text\": \"Limpar texto\", Close: \"Fechar\", \"Close modal\": \"Fechar modal\", \"Close navigation\": \"Fechar navegação\", \"Close sidebar\": \"Fechar barra lateral\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"Confirmar alterações\", Custom: \"Personalizado\", \"Edit item\": \"Editar item\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"Favorito\", Flags: \"Bandeiras\", \"Food & Drink\": \"Comida & Bebida\", \"Frequently used\": \"Mais usados\", Global: \"Global\", \"Go back to the list\": \"Volte para a lista\", \"Hide password\": \"Ocultar a senha\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"Limite de mensagem de {count} caracteres atingido\", \"More items …\": \"Mais itens …\", \"More options\": \"\", Next: \"Próximo\", \"No emoji found\": \"Nenhum emoji encontrado\", \"No link provider found\": \"\", \"No results\": \"Sem resultados\", Objects: \"Objetos\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"Abrir navegação\", \"Open settings menu\": \"\", \"Password is secure\": \"A senha é segura\", \"Pause slideshow\": \"Pausar apresentação de slides\", \"People & Body\": \"Pessoas & Corpo\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"Escolha um emoji\", \"Please select a time zone:\": \"Selecione um fuso horário: \", Previous: \"Anterior\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"Recursos relacionados\", Search: \"Pesquisar\", \"Search emoji\": \"\", \"Search results\": \"Resultados da pesquisa\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Selecionar uma tag\", \"Select provider\": \"\", Settings: \"Configurações\", \"Settings navigation\": \"Navegação de configurações\", \"Show password\": \"Mostrar senha\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"Smiles & Emoções\", \"Start slideshow\": \"Iniciar apresentação de slides\", \"Start typing to search\": \"\", Submit: \"Enviar\", Symbols: \"Símbolo\", \"Travel & Places\": \"Viagem & Lugares\", \"Type to search time zone\": \"Digite para pesquisar o fuso horário \", \"Unable to search the group\": \"Não foi possível pesquisar o grupo\", \"Undo changes\": \"Desfazer modificações\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': 'Escreva mensagens, use \"@\" para mencionar algum, use \":\" for autocompletar emoji …' } }, { locale: \"pt_PT\", translations: { \"{tag} (invisible)\": \"{tag} (invisivel)\", \"{tag} (restricted)\": \"{tag} (restrito)\", \"a few seconds ago\": \"alguns segundos atrás\", Actions: \"Ações\", 'Actions for item with name \"{name}\"': 'Ações para objeto com o nome \"[name]\"', Activities: \"Atividades\", \"Animals & Nature\": \"Animais e Natureza\", \"Any link\": \"Qualquer link\", \"Anything shared with the same group of people will show up here\": \"Qualquer coisa compartilhada com o mesmo grupo de pessoas aparecerá aqui\", \"Avatar of {displayName}\": \"Avatar de {displayName}\", \"Avatar of {displayName}, {status}\": \"Avatar de {displayName}, {status}\", Back: \"Voltar atrás\", \"Back to provider selection\": \"Voltar à seleção de fornecedor\", \"Cancel changes\": \"Cancelar alterações\", \"Change name\": \"Alterar nome\", Choose: \"Escolher\", \"Clear search\": \"Limpar a pesquisa\", \"Clear text\": \"Limpar texto\", Close: \"Fechar\", \"Close modal\": \"Fechar modal\", \"Close navigation\": \"Fechar navegação\", \"Close sidebar\": \"Fechar barra lateral\", \"Close Smart Picker\": 'Fechar \"Smart Picker\"', \"Collapse menu\": \"Comprimir menu\", \"Confirm changes\": \"Confirmar alterações\", Custom: \"Personalizado\", \"Edit item\": \"Editar item\", \"Enter link\": \"Introduzir link\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"Erro em obter info relacionadas. Por favor contacte o administrador do sistema para esclarecimentos adicionais.\", \"External documentation for {name}\": \"Documentação externa para {name}\", Favorite: \"Favorito\", Flags: \"Bandeiras\", \"Food & Drink\": \"Comida e Bebida\", \"Frequently used\": \"Mais utilizados\", Global: \"Global\", \"Go back to the list\": \"Voltar para a lista\", \"Hide password\": \"Ocultar a senha\", 'Load more \"{options}\"': \"\", \"Message limit of {count} characters reached\": \"Atingido o limite de {count} carateres da mensagem.\", \"More items …\": \"Mais itens …\", \"More options\": \"Mais opções\", Next: \"Seguinte\", \"No emoji found\": \"Nenhum emoji encontrado\", \"No link provider found\": \"Nenhum fornecedor de link encontrado\", \"No results\": \"Sem resultados\", Objects: \"Objetos\", \"Open contact menu\": \"Abrir o menu de contato\", 'Open link to \"{resourceName}\"': 'Abrir link para \"{resourceName}\"', \"Open menu\": \"Abrir menu\", \"Open navigation\": \"Abrir navegação\", \"Open settings menu\": \"Abrir menu de configurações\", \"Password is secure\": \"A senha é segura\", \"Pause slideshow\": \"Pausar diaporama\", \"People & Body\": \"Pessoas e Corpo\", \"Pick a date\": \"Escolha uma data\", \"Pick a date and a time\": \"Escolha uma data e um horário\", \"Pick a month\": \"Escolha um mês\", \"Pick a time\": \"Escolha um horário\", \"Pick a week\": \"Escolha uma semana\", \"Pick a year\": \"Escolha um ano\", \"Pick an emoji\": \"Escolha um emoji\", \"Please select a time zone:\": \"Por favor, selecione um fuso horário: \", Previous: \"Anterior\", \"Provider icon\": \"Icon do fornecedor\", \"Raw link {options}\": \"Link inicial {options}\", \"Related resources\": \"Recursos relacionados\", Search: \"Pesquisar\", \"Search emoji\": \"Pesquisar emoji\", \"Search results\": \"Resultados da pesquisa\", \"sec. ago\": \"seg. atrás\", \"seconds ago\": \"segundos atrás\", \"Select a tag\": \"Selecionar uma etiqueta\", \"Select provider\": \"Escolha de fornecedor\", Selected: \"\", Settings: \"Definições\", \"Settings navigation\": \"Navegação de configurações\", \"Show password\": \"Mostrar senha\", \"Smart Picker\": \"Smart Picker\", \"Smileys & Emotion\": \"Sorrisos e Emoções\", \"Start slideshow\": \"Iniciar diaporama\", \"Start typing to search\": \"Comece a digitar para pesquisar\", Submit: \"Submeter\", Symbols: \"Símbolos\", \"Travel & Places\": \"Viagem e Lugares\", \"Type to search time zone\": \"Digite para pesquisar o fuso horário \", \"Unable to search the group\": \"Não é possível pesquisar o grupo\", \"Undo changes\": \"Anular alterações\", \"Write a message …\": \"\" } }, { locale: \"ro\", translations: { \"{tag} (invisible)\": \"{tag} (invizibil)\", \"{tag} (restricted)\": \"{tag} (restricționat)\", \"a few seconds ago\": \"\", Actions: \"Acțiuni\", 'Actions for item with name \"{name}\"': \"\", Activities: \"Activități\", \"Animals & Nature\": \"Animale și natură\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"Tot ceea ce este partajat cu același grup de persoane va fi afișat aici\", \"Avatar of {displayName}\": \"Avatarul lui {displayName}\", \"Avatar of {displayName}, {status}\": \"Avatarul lui {displayName}, {status}\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"Anulează modificările\", \"Change name\": \"\", Choose: \"Alegeți\", \"Clear search\": \"\", \"Clear text\": \"Șterge textul\", Close: \"Închideți\", \"Close modal\": \"Închideți modulul\", \"Close navigation\": \"Închideți navigarea\", \"Close sidebar\": \"Închide bara laterală\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"Confirmați modificările\", Custom: \"Personalizat\", \"Edit item\": \"Editați elementul\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"Favorit\", Flags: \"Marcaje\", \"Food & Drink\": \"Alimente și băuturi\", \"Frequently used\": \"Utilizate frecvent\", Global: \"Global\", \"Go back to the list\": \"Întoarceți-vă la listă\", \"Hide password\": \"Ascunde parola\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"Limita mesajului de {count} caractere a fost atinsă\", \"More items …\": \"Mai multe articole ...\", \"More options\": \"\", Next: \"Următorul\", \"No emoji found\": \"Nu s-a găsit niciun emoji\", \"No link provider found\": \"\", \"No results\": \"Nu există rezultate\", Objects: \"Obiecte\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"Deschideți navigația\", \"Open settings menu\": \"\", \"Password is secure\": \"Parola este sigură\", \"Pause slideshow\": \"Pauză prezentare de diapozitive\", \"People & Body\": \"Oameni și corp\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"Alege un emoji\", \"Please select a time zone:\": \"Vă rugăm să selectați un fus orar:\", Previous: \"Anterior\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"Resurse legate\", Search: \"Căutare\", \"Search emoji\": \"\", \"Search results\": \"Rezultatele căutării\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Selectați o etichetă\", \"Select provider\": \"\", Settings: \"Setări\", \"Settings navigation\": \"Navigare setări\", \"Show password\": \"Arată parola\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"Zâmbete și emoții\", \"Start slideshow\": \"Începeți prezentarea de diapozitive\", \"Start typing to search\": \"\", Submit: \"Trimiteți\", Symbols: \"Simboluri\", \"Travel & Places\": \"Călătorii și locuri\", \"Type to search time zone\": \"Tastați pentru a căuta fusul orar\", \"Unable to search the group\": \"Imposibilitatea de a căuta în grup\", \"Undo changes\": \"Anularea modificărilor\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': 'Scrie un mesaj, folosește \"@\" pentru a menționa pe cineva, folosește \":\" pentru autocompletarea cu emoji ...' } }, { locale: \"ru\", translations: { \"{tag} (invisible)\": \"{tag} (невидимое)\", \"{tag} (restricted)\": \"{tag} (ограниченное)\", \"a few seconds ago\": \"несколько секунд назад\", Actions: \"Действия \", 'Actions for item with name \"{name}\"': 'Действия для элемента с названием \"{name}\"', Activities: \"События\", \"Animals & Nature\": \"Животные и природа \", \"Any link\": \"Любая ссылка\", \"Anything shared with the same group of people will show up here\": \"Всё, чем поделились с той же группой людей, будет отображаться здесь\", \"Avatar of {displayName}\": \"Аватар {displayName}\", \"Avatar of {displayName}, {status}\": \"Фотография {displayName}, {status}\", away: \"отсутствие\", Back: \"Назад\", \"Back to provider selection\": \"Вернуться к выбору провайдера\", \"Cancel changes\": \"Отменить изменения\", \"Change name\": \"Изменить имя\", Choose: \"Выберите\", \"Clear search\": \"Очистить поиск\", \"Clear text\": \"Очистить текст\", Close: \"Закрыть\", \"Close modal\": \"Закрыть модальное окно\", \"Close navigation\": \"Закрыть навигацию\", \"Close sidebar\": \"Закрыть сайдбар\", \"Close Smart Picker\": \"Закрыть интеллектуальный выбор\", \"Collapse menu\": \"Свернуть меню\", \"Confirm changes\": \"Подтвердить изменения\", Custom: \"Пользовательское\", \"do not disturb\": \"не беспокоить\", \"Edit item\": \"Изменить элемент\", \"Enter link\": \"Введите ссылку\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"Ошибка при получении связанных ресурсов. Если у вас есть какие-либо вопросы, обратитесь к системному администратору.\", \"External documentation for {name}\": \"Внешняя документация для {name}\", Favorite: \"Избранное\", Flags: \"Флаги\", \"Food & Drink\": \"Еда, напиток\", \"Frequently used\": \"Часто используемый\", Global: \"Глобальный\", \"Go back to the list\": \"Вернуться к списку\", \"Hide password\": \"Скрыть пароль\", 'Load more \"{options}\"': 'Загрузить больше \"{options}\"\"', \"Message limit of {count} characters reached\": \"Достигнуто ограничение на количество символов в {count}\", \"More items …\": \"Больше элементов...\", \"More options\": \"Больше опций\", Next: \"Следующее\", \"No emoji found\": \"Эмодзи не найдено\", \"No link provider found\": \"Поставщик ссылок не найден\", \"No results\": \"Результаты отсуствуют\", Objects: \"Объекты\", offline: \"офлайн\", online: \"онлайн\", \"Open contact menu\": \"Открыть меню контакта\", 'Open link to \"{resourceName}\"': 'Открыть ссылку на \"{resourceName}\"', \"Open menu\": \"Открыть меню\", \"Open navigation\": \"Открыть навигацию\", \"Open settings menu\": \"Открыть меню настроек\", \"Password is secure\": \"Пароль надежный\", \"Pause slideshow\": \"Приостановить показ слйдов\", \"People & Body\": \"Люди и тело\", \"Pick a date\": \"Выберите дату\", \"Pick a date and a time\": \"Выберите дату и время\", \"Pick a month\": \"Выберите месяц\", \"Pick a time\": \"Выберите время\", \"Pick a week\": \"Выберите неделю\", \"Pick a year\": \"Выберите год\", \"Pick an emoji\": \"Выберите эмодзи\", \"Please select a time zone:\": \"Пожалуйста, выберите часовой пояс:\", Previous: \"Предыдущее\", \"Provider icon\": \"Значок поставщика\", \"Raw link {options}\": \"Необработанная ссылка {options}\", \"Related resources\": \"Связанные ресурсы\", Search: \"Поиск\", \"Search emoji\": \"Поиск эмодзи\", \"Search results\": \"Результаты поиска\", \"sec. ago\": \"сек. назад\", \"seconds ago\": \"секунд назад\", \"Select a tag\": \"Выберите метку\", \"Select provider\": \"Выбрать поставщика\", Selected: \"Выбрано\", Settings: \"Параметры\", \"Settings navigation\": \"Навигация по настройкам\", \"Show password\": \"Показать пароль\", \"Smart Picker\": \"Умный выбор\", \"Smileys & Emotion\": \"Смайлики и эмоции\", \"Start slideshow\": \"Начать показ слайдов\", \"Start typing to search\": \"Начните вводить текст для поиска\", Submit: \"Утвердить\", Symbols: \"Символы\", \"Travel & Places\": \"Путешествия и места\", \"Type to search time zone\": \"Введите для поиска часового пояса\", \"Unable to search the group\": \"Невозможно найти группу\", \"Undo changes\": \"Отменить изменения\", \"User status: {status}\": \"Статус пользователя: {status}\", \"Write a message …\": \"Напиши сообщение …\" } }, { locale: \"sc\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"si\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"sk\", translations: { \"{tag} (invisible)\": \"{tag} (neviditeľný)\", \"{tag} (restricted)\": \"{tag} (obmedzený)\", \"a few seconds ago\": \"\", Actions: \"Akcie\", 'Actions for item with name \"{name}\"': \"\", Activities: \"Aktivity\", \"Animals & Nature\": \"Zvieratá a príroda\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"Avatar {displayName}\", \"Avatar of {displayName}, {status}\": \"Avatar {displayName}, {status}\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"Zrušiť zmeny\", \"Change name\": \"\", Choose: \"Vybrať\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"Zatvoriť\", \"Close modal\": \"\", \"Close navigation\": \"Zavrieť navigáciu\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"Potvrdiť zmeny\", Custom: \"Zvyk\", \"Edit item\": \"Upraviť položku\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"Vlajky\", \"Food & Drink\": \"Jedlo a nápoje\", \"Frequently used\": \"Často používané\", Global: \"Globálne\", \"Go back to the list\": \"Naspäť na zoznam\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"Limit správy na {count} znakov dosiahnutý\", \"More items …\": \"\", \"More options\": \"\", Next: \"Ďalší\", \"No emoji found\": \"Nenašli sa žiadne emodži\", \"No link provider found\": \"\", \"No results\": \"Žiadne výsledky\", Objects: \"Objekty\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"Otvoriť navigáciu\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"Pozastaviť prezentáciu\", \"People & Body\": \"Ľudia a telo\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"Vyberte si emodži\", \"Please select a time zone:\": \"Prosím vyberte časovú zónu:\", Previous: \"Predchádzajúci\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"Hľadať\", \"Search emoji\": \"\", \"Search results\": \"Výsledky vyhľadávania\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Vybrať štítok\", \"Select provider\": \"\", Settings: \"Nastavenia\", \"Settings navigation\": \"Navigácia v nastaveniach\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"Smajlíky a emócie\", \"Start slideshow\": \"Začať prezentáciu\", \"Start typing to search\": \"\", Submit: \"Odoslať\", Symbols: \"Symboly\", \"Travel & Places\": \"Cestovanie a miesta\", \"Type to search time zone\": \"Začníte písať pre vyhľadávanie časovej zóny\", \"Unable to search the group\": \"Skupinu sa nepodarilo nájsť\", \"Undo changes\": \"Vrátiť zmeny\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"sl\", translations: { \"{tag} (invisible)\": \"{tag} (nevidno)\", \"{tag} (restricted)\": \"{tag} (omejeno)\", \"a few seconds ago\": \"\", Actions: \"Dejanja\", 'Actions for item with name \"{name}\"': \"\", Activities: \"Dejavnosti\", \"Animals & Nature\": \"Živali in Narava\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"Podoba {displayName}\", \"Avatar of {displayName}, {status}\": \"Prikazna slika {displayName}, {status}\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"Prekliči spremembe\", \"Change name\": \"\", Choose: \"Izbor\", \"Clear search\": \"\", \"Clear text\": \"Počisti besedilo\", Close: \"Zapri\", \"Close modal\": \"Zapri pojavno okno\", \"Close navigation\": \"Zapri krmarjenje\", \"Close sidebar\": \"Zapri stransko vrstico\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"Potrdi spremembe\", Custom: \"Po meri\", \"Edit item\": \"Uredi predmet\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"Priljubljeno\", Flags: \"Zastavice\", \"Food & Drink\": \"Hrana in Pijača\", \"Frequently used\": \"Pogostost uporabe\", Global: \"Splošno\", \"Go back to the list\": \"Vrni se na seznam\", \"Hide password\": \"Skrij geslo\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"Dosežena omejitev {count} znakov na sporočilo.\", \"More items …\": \"Več predmetov ...\", \"More options\": \"\", Next: \"Naslednji\", \"No emoji found\": \"Ni najdenih izraznih ikon\", \"No link provider found\": \"\", \"No results\": \"Ni zadetkov\", Objects: \"Predmeti\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"Odpri krmarjenje\", \"Open settings menu\": \"\", \"Password is secure\": \"Geslo je varno\", \"Pause slideshow\": \"Ustavi predstavitev\", \"People & Body\": \"Ljudje in Telo\", \"Pick a date\": \"Izbor datuma\", \"Pick a date and a time\": \"Izbor datuma in časa\", \"Pick a month\": \"Izbor meseca\", \"Pick a time\": \"Izbor časa\", \"Pick a week\": \"Izbor tedna\", \"Pick a year\": \"Izbor leta\", \"Pick an emoji\": \"Izbor izrazne ikone\", \"Please select a time zone:\": \"Izbor časovnega pasu:\", Previous: \"Predhodni\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"Povezani viri\", Search: \"Iskanje\", \"Search emoji\": \"\", \"Search results\": \"Zadetki iskanja\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"Izbor oznake\", \"Select provider\": \"\", Settings: \"Nastavitve\", \"Settings navigation\": \"Krmarjenje nastavitev\", \"Show password\": \"Pokaži geslo\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"Izrazne ikone\", \"Start slideshow\": \"Začni predstavitev\", \"Start typing to search\": \"\", Submit: \"Pošlji\", Symbols: \"Simboli\", \"Travel & Places\": \"Potovanja in Kraji\", \"Type to search time zone\": \"Vpišite niz za iskanje časovnega pasu\", \"Unable to search the group\": \"Ni mogoče iskati po skupini\", \"Undo changes\": \"Razveljavi spremembe\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"sq\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"sr\", translations: { \"{tag} (invisible)\": \"{tag} (nevidljivo)\", \"{tag} (restricted)\": \"{tag} (ograničeno)\", \"a few seconds ago\": \"пре неколико секунди\", Actions: \"Radnje\", 'Actions for item with name \"{name}\"': \"Радње за ставку под називом „{name}”\", Activities: \"Aktivnosti\", \"Animals & Nature\": \"Životinje i Priroda\", \"Any link\": \"Било који линк\", \"Anything shared with the same group of people will show up here\": \"Све што се дели са истом групом људи ће се појавити овде\", \"Avatar of {displayName}\": \"Avatar za {displayName}\", \"Avatar of {displayName}, {status}\": \"Avatar za {displayName}, {status}\", away: \"одсутан\", Back: \"Назад\", \"Back to provider selection\": \"Назад на избор пружаоца\", \"Cancel changes\": \"Otkaži izmene\", \"Change name\": \"Измени назив\", Choose: \"Изаберите\", \"Clear search\": \"Обриши претрагу\", \"Clear text\": \"Обриши текст\", Close: \"Затвори\", \"Close modal\": \"Zatvori modal\", \"Close navigation\": \"Zatvori navigaciju\", \"Close sidebar\": \"Zatvori bočnu traku\", \"Close Smart Picker\": \"Затвори паметни бирач\", \"Collapse menu\": \"Сажми мени\", \"Confirm changes\": \"Potvrdite promene\", Custom: \"Po meri\", \"do not disturb\": \"не узнемиравај\", \"Edit item\": \"Uredi stavku\", \"Enter link\": \"Унесите линк\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"Грешка код прибављања везаних ресурса. Молимо вас да се обратите администратору ако имате питања.\", \"External documentation for {name}\": \"Спољна документација за {name}\", Favorite: \"Omiljeni\", Flags: \"Zastave\", \"Food & Drink\": \"Hrana i Piće\", \"Frequently used\": \"Često korišćeno\", Global: \"Globalno\", \"Go back to the list\": \"Natrag na listu\", \"Hide password\": \"Сакриј лозинку\", 'Load more \"{options}\"': \"Учитај још „{options}”\", \"Message limit of {count} characters reached\": \"Dostignuto je ograničenje za poruke od {count} znakova\", \"More items …\": \"Још ставки...\", \"More options\": \"Још опција\", Next: \"Следеће\", \"No emoji found\": \"Nije pronađen nijedan emodži\", \"No link provider found\": \"Није пронађен ниједан пружалац линка\", \"No results\": \"Нема резултата\", Objects: \"Objekti\", offline: \"ван мреже\", online: \"на мрежи\", \"Open contact menu\": \"Отвори мени контаката\", 'Open link to \"{resourceName}\"': \"Отвори линк на „{resourceName}”\", \"Open menu\": \"Отвори мени\", \"Open navigation\": \"Otvori navigaciju\", \"Open settings menu\": \"Отвори мени подешавања\", \"Password is secure\": \"Лозинка је безбедна\", \"Pause slideshow\": \"Паузирај слајд шоу\", \"People & Body\": \"Ljudi i Telo\", \"Pick a date\": \"Изаберите датум\", \"Pick a date and a time\": \"Изаберите датум и време\", \"Pick a month\": \"Изаберите месец\", \"Pick a time\": \"Изаберите време\", \"Pick a week\": \"Изаберите недељу\", \"Pick a year\": \"Изаберите годину\", \"Pick an emoji\": \"Izaberi emodži\", \"Please select a time zone:\": \"Molimo izaberite vremensku zonu:\", Previous: \"Претходно\", \"Provider icon\": \"Икона пружаоца\", \"Raw link {options}\": \"Сирови линк {options}\", \"Related resources\": \"Повезани ресурси\", Search: \"Pretraži\", \"Search emoji\": \"Претражи емођи\", \"Search results\": \"Rezultati pretrage\", \"sec. ago\": \"сек. раније\", \"seconds ago\": \"секунди раније\", \"Select a tag\": \"Изаберите ознаку\", \"Select provider\": \"Изаберите пружаоца\", Selected: \"Изабрано\", Settings: \"Поставке\", \"Settings navigation\": \"Navigacija u podešavanjima\", \"Show password\": \"Прикажи лозинку\", \"Smart Picker\": \"Паметни бирач\", \"Smileys & Emotion\": \"Smajli i Emocije\", \"Start slideshow\": \"Покрени слајд шоу\", \"Start typing to search\": \"Покрените претрагу куцањем\", Submit: \"Prihvati\", Symbols: \"Simboli\", \"Travel & Places\": \"Putovanja i Mesta\", \"Type to search time zone\": \"Ukucaj da pretražiš vremenske zone\", \"Unable to search the group\": \"Nije moguće pretražiti grupu\", \"Undo changes\": \"Poništi promene\", \"User status: {status}\": \"Статус корисника: {status}\", \"Write a message …\": \"Напишите поруку…\" } }, { locale: \"sr@latin\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"sv\", translations: { \"{tag} (invisible)\": \"{tag} (osynlig)\", \"{tag} (restricted)\": \"{tag} (begränsad)\", \"a few seconds ago\": \"några sekunder sedan\", Actions: \"Åtgärder\", 'Actions for item with name \"{name}\"': 'Åtgärder för objekt med namn \"{name}\"', Activities: \"Aktiviteter\", \"Animals & Nature\": \"Djur & Natur\", \"Any link\": \"Vilken länk som helst\", \"Anything shared with the same group of people will show up here\": \"Något som delats med samma grupp av personer kommer att visas här\", \"Avatar of {displayName}\": \"{displayName}s avatar\", \"Avatar of {displayName}, {status}\": \"{displayName}s avatar, {status}\", away: \"borta\", Back: \"Tillbaka\", \"Back to provider selection\": \"Tillbaka till leverantörsval\", \"Cancel changes\": \"Avbryt ändringar\", \"Change name\": \"Ändra namn\", Choose: \"Välj\", \"Clear search\": \"Rensa sökning\", \"Clear text\": \"Ta bort text\", Close: \"Stäng\", \"Close modal\": \"Stäng modal\", \"Close navigation\": \"Stäng navigering\", \"Close sidebar\": \"Stäng sidopanel\", \"Close Smart Picker\": \"Stäng Smart Picker\", \"Collapse menu\": \"Komprimera menyn\", \"Confirm changes\": \"Bekräfta ändringar\", Custom: \"Anpassad\", \"do not disturb\": \"stör ej\", \"Edit item\": \"Ändra\", \"Enter link\": \"Ange länk\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"Det gick inte att hämta relaterade resurser. Kontakta din systemadministratör om du har några frågor.\", \"External documentation for {name}\": \"Extern dokumentation för {name}\", Favorite: \"Favorit\", Flags: \"Flaggor\", \"Food & Drink\": \"Mat & Dryck\", \"Frequently used\": \"Används ofta\", Global: \"Global\", \"Go back to the list\": \"Gå tillbaka till listan\", \"Hide password\": \"Göm lössenordet\", 'Load more \"{options}\"': 'Ladda fler \"{options}\"', \"Message limit of {count} characters reached\": \"Meddelandegräns {count} tecken används\", \"More items …\": \"Fler objekt\", \"More options\": \"Fler alternativ\", Next: \"Nästa\", \"No emoji found\": \"Hittade inga emojis\", \"No link provider found\": \"Ingen länkleverantör hittades\", \"No results\": \"Inga resultat\", Objects: \"Objekt\", offline: \"offline\", online: \"online\", \"Open contact menu\": \"Öppna kontaktmenyn\", 'Open link to \"{resourceName}\"': 'Öppna länken till \"{resourceName}\"', \"Open menu\": \"Öppna menyn\", \"Open navigation\": \"Öppna navigering\", \"Open settings menu\": \"Öppna inställningsmenyn\", \"Password is secure\": \"Lössenordet är säkert\", \"Pause slideshow\": \"Pausa bildspelet\", \"People & Body\": \"Kropp & Själ\", \"Pick a date\": \"Välj datum\", \"Pick a date and a time\": \"Välj datum och tid\", \"Pick a month\": \"Välj månad\", \"Pick a time\": \"Välj tid\", \"Pick a week\": \"Välj vecka\", \"Pick a year\": \"Välj år\", \"Pick an emoji\": \"Välj en emoji\", \"Please select a time zone:\": \"Välj tidszon:\", Previous: \"Föregående\", \"Provider icon\": \"Leverantörsikon\", \"Raw link {options}\": \"Oformaterad länk {options}\", \"Related resources\": \"Relaterade resurser\", Search: \"Sök\", \"Search emoji\": \"Sök emoji\", \"Search results\": \"Sökresultat\", \"sec. ago\": \"sek. sedan\", \"seconds ago\": \"sekunder sedan\", \"Select a tag\": \"Välj en tag\", \"Select provider\": \"Välj leverantör\", Selected: \"Vald\", Settings: \"Inställningar\", \"Settings navigation\": \"Inställningsmeny\", \"Show password\": \"Visa lössenordet\", \"Smart Picker\": \"Smart Picker\", \"Smileys & Emotion\": \"Selfies & Känslor\", \"Start slideshow\": \"Starta bildspelet\", \"Start typing to search\": \"Börja skriva för att söka\", Submit: \"Skicka\", Symbols: \"Symboler\", \"Travel & Places\": \"Resor & Sevärdigheter\", \"Type to search time zone\": \"Skriv för att välja tidszon\", \"Unable to search the group\": \"Kunde inte söka i gruppen\", \"Undo changes\": \"Ångra ändringar\", \"User status: {status}\": \"Användarstatus: {status}\", \"Write a message …\": \"Skriv ett meddelande …\" } }, { locale: \"sw\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"ta\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"th\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"tk\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"tr\", translations: { \"{tag} (invisible)\": \"{tag} (görünmez)\", \"{tag} (restricted)\": \"{tag} (kısıtlı)\", \"a few seconds ago\": \"birkaç saniye önce\", Actions: \"İşlemler\", 'Actions for item with name \"{name}\"': \"{name} adındaki öge için işlemler\", Activities: \"Etkinlikler\", \"Animals & Nature\": \"Hayvanlar ve Doğa\", \"Any link\": \"Herhangi bir bağlantı\", \"Anything shared with the same group of people will show up here\": \"Aynı kişi grubu ile paylaşılan herşey burada görüntülenir\", \"Avatar of {displayName}\": \"{displayName} avatarı\", \"Avatar of {displayName}, {status}\": \"{displayName}, {status} avatarı\", away: \"Uzakta\", Back: \"Geri\", \"Back to provider selection\": \"Sağlayıcı seçimine dön\", \"Cancel changes\": \"Değişiklikleri iptal et\", \"Change name\": \"Adı değiştir\", Choose: \"Seçin\", \"Clear search\": \"Aramayı temizle\", \"Clear text\": \"Metni temizle\", Close: \"Kapat\", \"Close modal\": \"Üste açılan pencereyi kapat\", \"Close navigation\": \"Gezinmeyi kapat\", \"Close sidebar\": \"Yan çubuğu kapat\", \"Close Smart Picker\": \"Akıllı seçimi kapat\", \"Collapse menu\": \"Menüyü daralt\", \"Confirm changes\": \"Değişiklikleri onayla\", Custom: \"Özel\", \"do not disturb\": \"Rahatsız etmeyin\", \"Edit item\": \"Ögeyi düzenle\", \"Enter link\": \"Bağlantıyı yazın\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"İlgili kaynaklara ulaşılırken sorun çıktı. Herhangi bir sorunuz varsa lütfen sistem yöneticiniz ile görüşün \", \"External documentation for {name}\": \"{name} için dış belgeler\", Favorite: \"Sık kullanılanlara ekle\", Flags: \"Bayraklar\", \"Food & Drink\": \"Yeme ve içme\", \"Frequently used\": \"Sık kullanılanlar\", Global: \"Evrensel\", \"Go back to the list\": \"Listeye dön\", \"Hide password\": \"Parolayı gizle\", 'Load more \"{options}\"': 'Diğer \"{options}\"', \"Message limit of {count} characters reached\": \"{count} karakter ileti sınırına ulaşıldı\", \"More items …\": \"Diğer ögeler…\", \"More options\": \"Diğer seçenekler\", Next: \"Sonraki\", \"No emoji found\": \"Herhangi bir emoji bulunamadı\", \"No link provider found\": \"Bağlantı sağlayıcısı bulunamadı\", \"No results\": \"Herhangi bir sonuç bulunamadı\", Objects: \"Nesneler\", offline: \"Çevrim dışı\", online: \"Çevrim içi\", \"Open contact menu\": \"İletişim menüsünü aç\", 'Open link to \"{resourceName}\"': \"{resourceName} bağlantısını aç\", \"Open menu\": \"Menüyü aç\", \"Open navigation\": \"Gezinmeyi aç\", \"Open settings menu\": \"Ayarlar menüsünü aç\", \"Password is secure\": \"Parola güvenli\", \"Pause slideshow\": \"Slayt sunumunu duraklat\", \"People & Body\": \"İnsanlar ve beden\", \"Pick a date\": \"Bir tarih seçin\", \"Pick a date and a time\": \"Bir tarih ve saat seçin\", \"Pick a month\": \"Bir ay seçin\", \"Pick a time\": \"Bir saat seçin\", \"Pick a week\": \"Bir hafta seçin\", \"Pick a year\": \"Bir yıl seçin\", \"Pick an emoji\": \"Bir emoji seçin\", \"Please select a time zone:\": \"Lütfen bir saat dilimi seçin:\", Previous: \"Önceki\", \"Provider icon\": \"Sağlayıcı simgesi\", \"Raw link {options}\": \"Ham bağlantı {options}\", \"Related resources\": \"İlgili kaynaklar\", Search: \"Arama\", \"Search emoji\": \"Emoji ara\", \"Search results\": \"Arama sonuçları\", \"sec. ago\": \"sn. önce\", \"seconds ago\": \"saniye önce\", \"Select a tag\": \"Bir etiket seçin\", \"Select provider\": \"Sağlayıcı seçin\", Selected: \"Seçilmiş\", Settings: \"Ayarlar\", \"Settings navigation\": \"Gezinme ayarları\", \"Show password\": \"Parolayı görüntüle\", \"Smart Picker\": \"Akıllı seçim\", \"Smileys & Emotion\": \"İfadeler ve duygular\", \"Start slideshow\": \"Slayt sunumunu başlat\", \"Start typing to search\": \"Aramak için yazmaya başlayın\", Submit: \"Gönder\", Symbols: \"Simgeler\", \"Travel & Places\": \"Gezi ve yerler\", \"Type to search time zone\": \"Saat dilimi aramak için yazmaya başlayın\", \"Unable to search the group\": \"Grupta arama yapılamadı\", \"Undo changes\": \"Değişiklikleri geri al\", \"User status: {status}\": \"Kullanıcı durumu: {status}\", \"Write a message …\": \"Bir ileti yazın…\" } }, { locale: \"ug\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"uk\", translations: { \"{tag} (invisible)\": \"{tag} (невидимий)\", \"{tag} (restricted)\": \"{tag} (обмежений)\", \"a few seconds ago\": \"декілька секунд тому\", Actions: \"Дії\", 'Actions for item with name \"{name}\"': `Дії для об'єкту \"{name}\"`, Activities: \"Діяльність\", \"Animals & Nature\": \"Тварини та природа\", \"Any link\": \"Будь-яке посилання\", \"Anything shared with the same group of people will show up here\": \"Будь-що доступне для цієї же групи людей буде показано тут\", \"Avatar of {displayName}\": \"Аватар {displayName}\", \"Avatar of {displayName}, {status}\": \"Аватар {displayName}, {status}\", Back: \"Назад\", \"Back to provider selection\": \"Назад до вибору постачальника\", \"Cancel changes\": \"Скасувати зміни\", \"Change name\": \"Змінити назву\", Choose: \"Виберіть\", \"Clear search\": \"Очистити пошук\", \"Clear text\": \"Очистити текст\", Close: \"Закрити\", \"Close modal\": \"Закрити модаль\", \"Close navigation\": \"Закрити навігацію\", \"Close sidebar\": \"Закрити бічну панель\", \"Close Smart Picker\": \"Закрити асистент вибору\", \"Collapse menu\": \"Згорнути меню\", \"Confirm changes\": \"Підтвердити зміни\", Custom: \"Власне\", \"Edit item\": \"Редагувати елемент\", \"Enter link\": \"Зазначте посилання\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"Помилка під час отримання пов'язаних ресурсів. Будь ласка, сконтактуйте з системним адміністратором, якщо у вас виникли запитання.\", \"External documentation for {name}\": \"Зовнішня документація для {name}\", Favorite: \"Із зірочкою\", Flags: \"Прапори\", \"Food & Drink\": \"Їжа та напої\", \"Frequently used\": \"Найчастіші\", Global: \"Глобальний\", \"Go back to the list\": \"Повернутися до списку\", \"Hide password\": \"Приховати пароль\", 'Load more \"{options}\"': \"\", \"Message limit of {count} characters reached\": \"Вичерпано ліміт у {count} символів для повідомлення\", \"More items …\": \"Більше об'єктів...\", \"More options\": \"Більше об'єктів\", Next: \"Вперед\", \"No emoji found\": \"Емоційки відсутні\", \"No link provider found\": \"Не наведено посилання\", \"No results\": \"Відсутні результати\", Objects: \"Об'єкти\", \"Open contact menu\": \"Відкрити меню контактів\", 'Open link to \"{resourceName}\"': 'Відкрити посилання на \"{resourceName}\"', \"Open menu\": \"Відкрити меню\", \"Open navigation\": \"Відкрити навігацію\", \"Open settings menu\": \"Відкрити меню налаштувань\", \"Password is secure\": \"Пароль безпечний\", \"Pause slideshow\": \"Пауза у показі слайдів\", \"People & Body\": \"Люди та жести\", \"Pick a date\": \"Вибрати дату\", \"Pick a date and a time\": \"Виберіть дату та час\", \"Pick a month\": \"Виберіть місяць\", \"Pick a time\": \"Виберіть час\", \"Pick a week\": \"Виберіть тиждень\", \"Pick a year\": \"Виберіть рік\", \"Pick an emoji\": \"Виберіть емоційку\", \"Please select a time zone:\": \"Виберіть часовий пояс:\", Previous: \"Назад\", \"Provider icon\": \"Піктограма постачальника\", \"Raw link {options}\": \"Пряме посилання {options}\", \"Related resources\": \"Пов'язані ресурси\", Search: \"Пошук\", \"Search emoji\": \"Шукати емоційки\", \"Search results\": \"Результати пошуку\", \"sec. ago\": \"с тому\", \"seconds ago\": \"с тому\", \"Select a tag\": \"Виберіть позначку\", \"Select provider\": \"Виберіть постачальника\", Selected: \"\", Settings: \"Налаштування\", \"Settings navigation\": \"Навігація у налаштуваннях\", \"Show password\": \"Показати пароль\", \"Smart Picker\": \"Асистент вибору\", \"Smileys & Emotion\": \"Смайли та емоції\", \"Start slideshow\": \"Почати показ слайдів\", \"Start typing to search\": \"Почніть вводити для пошуку\", Submit: \"Надіслати\", Symbols: \"Символи\", \"Travel & Places\": \"Поїздки та місця\", \"Type to search time zone\": \"Введіть для пошуку часовий пояс\", \"Unable to search the group\": \"Неможливо шукати в групі\", \"Undo changes\": \"Скасувати зміни\", \"Write a message …\": \"\" } }, { locale: \"ur_PK\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"uz\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"vi\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }, { locale: \"zh_CN\", translations: { \"{tag} (invisible)\": \"{tag} (不可见)\", \"{tag} (restricted)\": \"{tag} (受限)\", \"a few seconds ago\": \"\", Actions: \"行为\", 'Actions for item with name \"{name}\"': \"\", Activities: \"活动\", \"Animals & Nature\": \"动物 & 自然\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"与同组用户分享的所有内容都会显示于此\", \"Avatar of {displayName}\": \"{displayName}的头像\", \"Avatar of {displayName}, {status}\": \"{displayName}的头像,{status}\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"取消更改\", \"Change name\": \"\", Choose: \"选择\", \"Clear search\": \"\", \"Clear text\": \"清除文本\", Close: \"关闭\", \"Close modal\": \"关闭窗口\", \"Close navigation\": \"关闭导航\", \"Close sidebar\": \"关闭侧边栏\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"确认更改\", Custom: \"自定义\", \"Edit item\": \"编辑项目\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"喜爱\", Flags: \"旗帜\", \"Food & Drink\": \"食物 & 饮品\", \"Frequently used\": \"经常使用\", Global: \"全局\", \"Go back to the list\": \"返回至列表\", \"Hide password\": \"隐藏密码\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"已达到 {count} 个字符的消息限制\", \"More items …\": \"更多项目…\", \"More options\": \"\", Next: \"下一个\", \"No emoji found\": \"表情未找到\", \"No link provider found\": \"\", \"No results\": \"无结果\", Objects: \"物体\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"开启导航\", \"Open settings menu\": \"\", \"Password is secure\": \"密码安全\", \"Pause slideshow\": \"暂停幻灯片\", \"People & Body\": \"人 & 身体\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"选择一个表情\", \"Please select a time zone:\": \"请选择一个时区:\", Previous: \"上一个\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"相关资源\", Search: \"搜索\", \"Search emoji\": \"\", \"Search results\": \"搜索结果\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"选择一个标签\", \"Select provider\": \"\", Settings: \"设置\", \"Settings navigation\": \"设置向导\", \"Show password\": \"显示密码\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"笑脸 & 情感\", \"Start slideshow\": \"开始幻灯片\", \"Start typing to search\": \"\", Submit: \"提交\", Symbols: \"符号\", \"Travel & Places\": \"旅游 & 地点\", \"Type to search time zone\": \"打字以搜索时区\", \"Unable to search the group\": \"无法搜索分组\", \"Undo changes\": \"撤销更改\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': '写信息,使用\"@\"来提及某人,使用\":\"进行表情符号自动完成 ...' } }, { locale: \"zh_HK\", translations: { \"{tag} (invisible)\": \"{tag} (隱藏)\", \"{tag} (restricted)\": \"{tag} (受限)\", \"a few seconds ago\": \"幾秒前\", Actions: \"動作\", 'Actions for item with name \"{name}\"': \"名稱為「{name}」項目的操作\", Activities: \"活動\", \"Animals & Nature\": \"動物與自然\", \"Any link\": \"任何連結\", \"Anything shared with the same group of people will show up here\": \"與同一組人共享的任何內容都會顯示在此處\", \"Avatar of {displayName}\": \"{displayName} 的頭像\", \"Avatar of {displayName}, {status}\": \"{displayName} 的頭像,{status}\", away: \"離開\", Back: \"返回\", \"Back to provider selection\": \"回到提供者選擇\", \"Cancel changes\": \"取消更改\", \"Change name\": \"更改名稱\", Choose: \"選擇\", \"Clear search\": \"清除搜索\", \"Clear text\": \"清除文本\", Close: \"關閉\", \"Close modal\": \"關閉模態\", \"Close navigation\": \"關閉導航\", \"Close sidebar\": \"關閉側邊欄\", \"Close Smart Picker\": \"關閉 Smart Picker\", \"Collapse menu\": \"折疊選單\", \"Confirm changes\": \"確認更改\", Custom: \"自定義\", \"do not disturb\": \"請勿打擾\", \"Edit item\": \"編輯項目\", \"Enter link\": \"輸入連結\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"取得相關資源時發生錯誤。如果有任何問題,請聯絡系統管理員。\", \"External documentation for {name}\": \"{name} 的外部文件\", Favorite: \"喜愛\", Flags: \"旗幟\", \"Food & Drink\": \"食物與飲料\", \"Frequently used\": \"經常使用\", Global: \"全球的\", \"Go back to the list\": \"返回清單\", \"Hide password\": \"隱藏密碼\", 'Load more \"{options}\"': '載入更多 \"{options}\"', \"Message limit of {count} characters reached\": \"已達到訊息最多 {count} 字元限制\", \"More items …\": \"更多項目 …\", \"More options\": \"更多選項\", Next: \"下一個\", \"No emoji found\": \"未找到表情符號\", \"No link provider found\": \"找不到連結提供者\", \"No results\": \"無結果\", Objects: \"物件\", offline: \"離線\", online: \"在線\", \"Open contact menu\": \"開啟通訊錄選單\", 'Open link to \"{resourceName}\"': \"開啟到「{resourceName}」的連結\", \"Open menu\": \"開啟選單\", \"Open navigation\": \"開啟導航\", \"Open settings menu\": \"開啟設定選單\", \"Password is secure\": \"密碼是安全的\", \"Pause slideshow\": \"暫停幻燈片\", \"People & Body\": \"人物\", \"Pick a date\": \"挑選日期\", \"Pick a date and a time\": \"挑選日期與時間\", \"Pick a month\": \"挑選月份\", \"Pick a time\": \"挑選時間\", \"Pick a week\": \"挑選星期\", \"Pick a year\": \"挑選年份\", \"Pick an emoji\": \"選擇表情符號\", \"Please select a time zone:\": \"請選擇時區:\", Previous: \"上一個\", \"Provider icon\": \"提供者圖示\", \"Raw link {options}\": \"原始連結 {options}\", \"Related resources\": \"相關資源\", Search: \"搜尋\", \"Search emoji\": \"搜尋表情符號\", \"Search results\": \"搜尋結果\", \"sec. ago\": \"秒前\", \"seconds ago\": \"秒前\", \"Select a tag\": \"選擇標籤\", \"Select provider\": \"選擇提供者\", Selected: \"已選\", Settings: \"設定\", \"Settings navigation\": \"設定值導覽\", \"Show password\": \"顯示密碼\", \"Smart Picker\": \"Smart Picker\", \"Smileys & Emotion\": \"表情\", \"Start slideshow\": \"開始幻燈片\", \"Start typing to search\": \"開始輸入以進行搜尋\", Submit: \"提交\", Symbols: \"標誌\", \"Travel & Places\": \"旅遊與景點\", \"Type to search time zone\": \"鍵入以搜索時區\", \"Unable to search the group\": \"無法搜尋群組\", \"Undo changes\": \"取消更改\", \"User status: {status}\": \"用戶狀態:{status}\", \"Write a message …\": \"編寫訊息 …\" } }, { locale: \"zh_TW\", translations: { \"{tag} (invisible)\": \"{tag}(隱藏)\", \"{tag} (restricted)\": \"{tag}(受限)\", \"a few seconds ago\": \"幾秒前\", Actions: \"動作\", 'Actions for item with name \"{name}\"': \"名稱為「{name}」項目的動作\", Activities: \"活動\", \"Animals & Nature\": \"動物與自然\", \"Any link\": \"任何連結\", \"Anything shared with the same group of people will show up here\": \"與相同群組分享的所有內容都會顯示於此\", \"Avatar of {displayName}\": \"{displayName} 的大頭照\", \"Avatar of {displayName}, {status}\": \"{displayName}, {status} 的大頭照\", Back: \"返回\", \"Back to provider selection\": \"回到提供者選擇\", \"Cancel changes\": \"取消變更\", \"Change name\": \"變更名稱\", Choose: \"選擇\", \"Clear search\": \"清除搜尋\", \"Clear text\": \"清除文字\", Close: \"關閉\", \"Close modal\": \"關閉模式\", \"Close navigation\": \"關閉導航\", \"Close sidebar\": \"關閉側邊欄\", \"Close Smart Picker\": \"關閉智慧型挑選器\", \"Collapse menu\": \"折疊選單\", \"Confirm changes\": \"確認變更\", Custom: \"自定義\", \"Edit item\": \"編輯項目\", \"Enter link\": \"輸入連結\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"取得相關資源時發生錯誤。如果有任何問題,請聯絡系統管理員。\", \"External documentation for {name}\": \"{name} 的外部文件\", Favorite: \"最愛\", Flags: \"旗幟\", \"Food & Drink\": \"食物與飲料\", \"Frequently used\": \"最近使用\", Global: \"全域\", \"Go back to the list\": \"回到清單\", \"Hide password\": \"隱藏密碼\", 'Load more \"{options}\"': \"載入更多「{options}」\", \"Message limit of {count} characters reached\": \"已達到訊息最多 {count} 字元限制\", \"More items …\": \"更多項目……\", \"More options\": \"更多選項\", Next: \"下一個\", \"No emoji found\": \"未找到表情符號\", \"No link provider found\": \"找不到連結提供者\", \"No results\": \"無結果\", Objects: \"物件\", \"Open contact menu\": \"開啟通訊錄選單\", 'Open link to \"{resourceName}\"': \"開啟到「{resourceName}」的連結\", \"Open menu\": \"開啟選單\", \"Open navigation\": \"開啟導航\", \"Open settings menu\": \"開啟設定選單\", \"Password is secure\": \"密碼安全\", \"Pause slideshow\": \"暫停幻燈片\", \"People & Body\": \"人物\", \"Pick a date\": \"挑選日期\", \"Pick a date and a time\": \"挑選日期與時間\", \"Pick a month\": \"挑選月份\", \"Pick a time\": \"挑選時間\", \"Pick a week\": \"挑選星期\", \"Pick a year\": \"挑選年份\", \"Pick an emoji\": \"選擇表情符號\", \"Please select a time zone:\": \"請選取時區:\", Previous: \"上一個\", \"Provider icon\": \"提供者圖示\", \"Raw link {options}\": \"原始連結 {options}\", \"Related resources\": \"相關資源\", Search: \"搜尋\", \"Search emoji\": \"搜尋表情符號\", \"Search results\": \"搜尋結果\", \"sec. ago\": \"秒前\", \"seconds ago\": \"秒前\", \"Select a tag\": \"選擇標籤\", \"Select provider\": \"選取提供者\", Selected: \"已選取\", Settings: \"設定\", \"Settings navigation\": \"設定值導覽\", \"Show password\": \"顯示密碼\", \"Smart Picker\": \"智慧型挑選器\", \"Smileys & Emotion\": \"表情\", \"Start slideshow\": \"開始幻燈片\", \"Start typing to search\": \"開始輸入以進行搜尋\", Submit: \"遞交\", Symbols: \"標誌\", \"Travel & Places\": \"旅遊與景點\", \"Type to search time zone\": \"輸入以搜尋時區\", \"Unable to search the group\": \"無法搜尋群組\", \"Undo changes\": \"還原變更\", \"Write a message …\": \"編寫訊息……\" } }, { locale: \"zu_ZA\", translations: { \"{tag} (invisible)\": \"\", \"{tag} (restricted)\": \"\", \"a few seconds ago\": \"\", Actions: \"\", 'Actions for item with name \"{name}\"': \"\", Activities: \"\", \"Animals & Nature\": \"\", \"Any link\": \"\", \"Anything shared with the same group of people will show up here\": \"\", \"Avatar of {displayName}\": \"\", \"Avatar of {displayName}, {status}\": \"\", Back: \"\", \"Back to provider selection\": \"\", \"Cancel changes\": \"\", \"Change name\": \"\", Choose: \"\", \"Clear search\": \"\", \"Clear text\": \"\", Close: \"\", \"Close modal\": \"\", \"Close navigation\": \"\", \"Close sidebar\": \"\", \"Close Smart Picker\": \"\", \"Collapse menu\": \"\", \"Confirm changes\": \"\", Custom: \"\", \"Edit item\": \"\", \"Enter link\": \"\", \"Error getting related resources. Please contact your system administrator if you have any questions.\": \"\", \"External documentation for {name}\": \"\", Favorite: \"\", Flags: \"\", \"Food & Drink\": \"\", \"Frequently used\": \"\", Global: \"\", \"Go back to the list\": \"\", \"Hide password\": \"\", 'Load more \"{options}\"\"': \"\", \"Message limit of {count} characters reached\": \"\", \"More items …\": \"\", \"More options\": \"\", Next: \"\", \"No emoji found\": \"\", \"No link provider found\": \"\", \"No results\": \"\", Objects: \"\", \"Open contact menu\": \"\", 'Open link to \"{resourceName}\"': \"\", \"Open menu\": \"\", \"Open navigation\": \"\", \"Open settings menu\": \"\", \"Password is secure\": \"\", \"Pause slideshow\": \"\", \"People & Body\": \"\", \"Pick a date\": \"\", \"Pick a date and a time\": \"\", \"Pick a month\": \"\", \"Pick a time\": \"\", \"Pick a week\": \"\", \"Pick a year\": \"\", \"Pick an emoji\": \"\", \"Please select a time zone:\": \"\", Previous: \"\", \"Provider icon\": \"\", \"Raw link {options}\": \"\", \"Related resources\": \"\", Search: \"\", \"Search emoji\": \"\", \"Search results\": \"\", \"sec. ago\": \"\", \"seconds ago\": \"\", \"Select a tag\": \"\", \"Select provider\": \"\", Settings: \"\", \"Settings navigation\": \"\", \"Show password\": \"\", \"Smart Picker\": \"\", \"Smileys & Emotion\": \"\", \"Start slideshow\": \"\", \"Start typing to search\": \"\", Submit: \"\", Symbols: \"\", \"Travel & Places\": \"\", \"Type to search time zone\": \"\", \"Unable to search the group\": \"\", \"Undo changes\": \"\", 'Write message, use \"@\" to mention someone, use \":\" for emoji autocompletion …': \"\" } }].forEach((a) => {\n const t = {};\n for (const e in a.translations) {\n if (a.translations[e].pluralId) {\n t[e] = {\n msgid: e,\n msgid_plural: a.translations[e].pluralId,\n msgstr: a.translations[e].msgstr\n };\n continue;\n }\n t[e] = {\n msgid: e,\n msgstr: [\n a.translations[e]\n ]\n };\n }\n s.addTranslation(a.locale, {\n translations: {\n \"\": t\n }\n });\n});\nconst o = s.build(), r = o.ngettext.bind(o), l = o.gettext.bind(o);\nexport {\n r as n,\n l as t\n};\n","import { getLoggerBuilder as e } from \"@nextcloud/logger\";\n/**\n * @copyright 2021 Christoph Wurst \n *\n * @author 2021 Christoph Wurst \n *\n * @license AGPL-3.0-or-later\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 .\n */\nconst o = e().detectUser().setApp(\"@nextcloud/vue\").build();\nexport {\n o as l\n};\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","import ICAL from 'ical.js';\nimport { v4 } from 'uuid';\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class AbstractParser\n * @classdesc\n */\nclass AbstractParser {\n /**\n * @class\n *\n * @param {object=} options Object of options\n * @param {boolean=} options.extractGlobalProperties Whether or not to preserve properties from the VCALENDAR component (defaults to false)\n * @param {boolean=} options.removeRSVPForAttendees Whether or not to remove RSVP from attendees (defaults to false)\n * @param {boolean=} options.includeTimezones Whether or not to include timezones (defaults to false)\n * @param {boolean=} options.preserveMethod Whether or not to preserve the iCalendar method (defaults to false)\n * @param {boolean=} options.processFreeBusy Whether or not to process VFreeBusy components (defaults to false)\n */\n constructor(options = {}) {\n if (new.target === AbstractParser) {\n throw new TypeError('Cannot instantiate abstract class AbstractParser');\n }\n\n /**\n * Options for the parser\n *\n * @type {{removeRSVPForAttendees: boolean}}\n * @private\n */\n this._options = Object.assign({}, options);\n\n /**\n * A name extracted from the calendar-data\n *\n * @type {string | null}\n * @protected\n */\n this._name = null;\n\n /**\n * A color extracted from the calendar-data\n *\n * @type {string | null}\n * @protected\n */\n this._color = null;\n\n /**\n * Gets the url that this icalendar file can be updated from\n *\n * @type {string}\n * @protected\n */\n this._sourceURL = null;\n\n /**\n * Gets the update interval if this icalendar file can be updated from a source\n *\n * @type {string}\n * @protected\n */\n this._refreshInterval = null;\n\n /**\n * Gets the default timezone of this calendar\n *\n * @type {string}\n * @protected\n */\n this._calendarTimezone = null;\n\n /**\n * Error count during parsing\n *\n * @type {Array}\n * @protected\n */\n this._errors = [];\n }\n\n /**\n * Gets the name extracted from the calendar-data\n *\n * @return {string | null}\n */\n getName() {\n return this._name;\n }\n\n /**\n * Gets the color extracted from the calendar-data\n *\n * @return {string | null}\n */\n getColor() {\n return this._color;\n }\n\n /**\n * Gets whether this import can be converted into a webcal subscription\n *\n * @return {boolean}\n */\n offersWebcalFeed() {\n return this._sourceURL !== null;\n }\n\n /**\n * Gets the url pointing to the webcal source\n *\n * @return {string | null}\n */\n getSourceURL() {\n return this._sourceURL;\n }\n\n /**\n * Gets the recommended refresh rate to update this subscription\n *\n * @return {string | null}\n */\n getRefreshInterval() {\n return this._refreshInterval;\n }\n\n /**\n * Gets the default timezone of this calendar\n *\n * @return {string}\n */\n getCalendarTimezone() {\n return this._calendarTimezone;\n }\n\n /**\n * {String|Object} data\n *\n * @param {any} data The data to parse\n * @throws TypeError\n */\n parse(data) {\n throw new TypeError('Abstract method not implemented by subclass');\n }\n\n /**\n * Returns one CalendarComponent at a time\n */\n *getItemIterator() {\n // eslint-disable-line require-yield\n throw new TypeError('Abstract method not implemented by subclass');\n }\n\n /**\n * Get an array of all items\n *\n * @return {CalendarComponent[]}\n */\n getAllItems() {\n return Array.from(this.getItemIterator());\n }\n\n /**\n * Returns a boolean whether or not the parsed data contains vevents\n *\n * @return {boolean}\n */\n containsVEvents() {\n return false;\n }\n\n /**\n * Returns a boolean whether or not the parsed data contains vjournals\n *\n * @return {boolean}\n */\n containsVJournals() {\n return false;\n }\n\n /**\n * Returns a boolean whether or not the parsed data contains vtodos\n *\n * @return {boolean}\n */\n containsVTodos() {\n return false;\n }\n\n /**\n * Returns a boolean whether or not the parsed data contains vfreebusys\n *\n * @return {boolean}\n */\n containsVFreeBusy() {\n return false;\n }\n\n /**\n * Returns a boolean whether\n *\n * @return {boolean}\n */\n hasErrors() {\n return this._errors.length !== 0;\n }\n\n /**\n * Get a list of all errors that occurred\n *\n * @return {*[]}\n */\n getErrorList() {\n return this._errors.slice();\n }\n\n /**\n * Returns the number of calendar-objects in parser\n *\n * @return {number}\n */\n getItemCount() {\n return 0;\n }\n\n /**\n * Gets an option provided\n *\n * @param {string} name The name of the option to get\n * @param {*} defaultValue The default value to return if option not provided\n * @return {any}\n * @protected\n */\n _getOption(name, defaultValue) {\n return Object.prototype.hasOwnProperty.call(this._options, name) ? this._options[name] : defaultValue;\n }\n\n /**\n * Return list of supported mime types\n *\n * @static\n */\n static getMimeTypes() {\n throw new TypeError('Abstract method not implemented by subclass');\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\nclass ModificationNotAllowedError extends Error {}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n *\n * @param baseClass\n */\nfunction lockableTrait(baseClass) {\n /**\n * @class LockableTrait\n */\n return class extends baseClass {\n /**\n * Constructor\n *\n * @param {...any} args\n */\n constructor(...args) {\n super(...args);\n\n /**\n * Indicator whether this value was locked for changes\n *\n * @type {boolean}\n * @private\n */\n this._mutable = true;\n }\n\n /**\n * Returns whether or not this object is locked\n *\n * @return {boolean}\n */\n isLocked() {\n return !this._mutable;\n }\n\n /**\n * Marks this object is immutable\n * locks it against further modification\n */\n lock() {\n this._mutable = false;\n }\n\n /**\n * Marks this object as mutable\n * allowing further modification\n */\n unlock() {\n this._mutable = true;\n }\n\n /**\n * Check if modifications are allowed\n *\n * @throws {ModificationNotAllowedError} if this object is locked for modification\n * @protected\n */\n _modify() {\n if (!this._mutable) {\n throw new ModificationNotAllowedError();\n }\n }\n\n /**\n * Check if modification of content is allowed\n *\n * @throws {ModificationNotAllowedError} if this object is locked for modification\n * @protected\n */\n _modifyContent() {\n this._modify();\n }\n };\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\nclass ExpectedICalJSError extends Error {}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * Turns the entire string lowercase\n *\n * @param {string} str The string to turn lowercase\n * @return {string}\n */\nfunction lc(str) {\n return str.toLowerCase();\n}\n\n/**\n * Turns the entire string uppercase\n *\n * @param {string} str The string to turn uppercase\n * @return {string}\n */\nfunction uc(str) {\n return str.toUpperCase();\n}\n\n/**\n * Capitalizes the string\n *\n * @param {string} str The string of which the first character will be turned uppercase\n * @return {string}\n */\nfunction ucFirst(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * Makes sure that a string starts with a certain other string\n * This is mostly used in the attendeeProperty to assure the uri starts with mailto:\n *\n * @param {string} str The string to check for the prefix and prepend if necessary\n * @param {string} startWith The prefix to be added if necessary\n * @return {string}\n */\nfunction startStringWith(str, startWith) {\n if (!str.startsWith(startWith)) {\n str = startWith + str;\n }\n return str;\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @type {Map}\n */\nconst GLOBAL_CONFIG = new Map();\n\n/**\n * Sets a new config key\n *\n * @param {string} key The config-key to set\n * @param {*} value The value to set for given config-key\n */\nfunction setConfig(key, value) {\n GLOBAL_CONFIG.set(key, value);\n}\n\n/**\n * gets value of a config key\n *\n * @param {string} key The config-key to get\n * @param {*} defaultValue Default value of config does not exist\n * @return {*}\n */\nfunction getConfig(key, defaultValue) {\n return GLOBAL_CONFIG.get(key) || defaultValue;\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * creates a new ICAL.Component object\n *\n * @param {string} componentName The name of the component to create\n * @return {ICAL.Component}\n */\nfunction createComponent(componentName) {\n return new ICAL.Component(lc(componentName));\n}\n\n/**\n * creates a new ICAL.Property object\n *\n * @param {string} propertyName The name of the property to create\n * @return {ICAL.Property}\n */\nfunction createProperty(propertyName) {\n return new ICAL.Property(lc(propertyName));\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n *\n * @param baseClass\n */\nfunction observerTrait(baseClass) {\n /**\n * @class ObserverTrait\n */\n return class extends baseClass {\n /**\n * Constructor\n *\n * @param {...any} args\n */\n constructor(...args) {\n super(...args);\n\n /**\n * List of subscribers\n *\n * @type {Function[]}\n * @private\n */\n this._subscribers = [];\n }\n\n /**\n * Adds a new subscriber\n *\n * @param {Function} handler - Handler to be called when modification happens\n */\n subscribe(handler) {\n this._subscribers.push(handler);\n }\n\n /**\n * Removes a subscriber\n *\n * @param {Function} handler - Handler to be no longer called when modification happens\n */\n unsubscribe(handler) {\n const index = this._subscribers.indexOf(handler);\n if (index === -1) {\n return;\n }\n this._subscribers.splice(index, 1);\n }\n\n /**\n * Notify all subscribed handlers\n *\n * @param {...any} args\n * @protected\n */\n _notifySubscribers(...args) {\n for (const handler of this._subscribers) {\n handler(...args);\n }\n }\n };\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class Parameter\n * @classdesc This class represents a property parameters as defined in RFC 5545 Section 3.2\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.2\n * @url\n */\nclass Parameter extends observerTrait(lockableTrait(class {})) {\n /**\n * Constructor\n *\n * @param {string} name The name of the parameter\n * @param {string|Array|null} value The value of the parameter\n */\n constructor(name, value = null) {\n super();\n\n /**\n * Name of the parameter\n *\n * @type {string}\n * @private\n */\n this._name = uc(name);\n\n /**\n * Value of the parameter\n *\n * @type {string|Array|null}\n * @private\n */\n this._value = value;\n }\n\n /**\n * Get parameter name\n *\n * @readonly\n * @return {string}\n */\n get name() {\n return this._name;\n }\n\n /**\n * Get parameter value\n *\n * @return {string | Array}\n */\n get value() {\n return this._value;\n }\n\n /**\n * Set new parameter value\n *\n * @throws {ModificationNotAllowedError} if parameter is locked for modification\n * @param {string | Array} value The new value to set\n */\n set value(value) {\n this._modifyContent();\n this._value = value;\n }\n\n /**\n * Gets the first value of this parameter\n *\n * @return {string | null}\n */\n getFirstValue() {\n if (!this.isMultiValue()) {\n return this.value;\n } else {\n if (this.value.length > 0) {\n return this.value[0];\n }\n }\n return null;\n }\n\n /**\n * Gets an iterator for all values\n */\n *getValueIterator() {\n if (this.isMultiValue()) {\n yield* this.value.slice()[Symbol.iterator]();\n } else {\n yield this.value;\n }\n }\n\n /**\n * Returns whether or not the value is a multivalue\n *\n * @return {boolean}\n */\n isMultiValue() {\n return Array.isArray(this._value);\n }\n\n /**\n * Creates a copy of this parameter\n *\n * @return {Parameter}\n */\n clone() {\n const parameter = new this.constructor(this._name);\n if (this.isMultiValue()) {\n // only copy array values, don't copy array reference\n parameter.value = this._value.slice();\n } else {\n parameter.value = this._value;\n }\n\n // cloned parameters are always mutable\n return parameter;\n }\n\n /**\n * @inheritDoc\n */\n _modifyContent() {\n super._modifyContent();\n this._notifySubscribers();\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class AbstractValue\n * @classdesc BaseClass for all values\n */\nclass AbstractValue extends observerTrait(lockableTrait(class {})) {\n /**\n * Constructor\n *\n * @param {ICAL.Binary|ICAL.Duration|ICAL.Period|ICAL.Recur|ICAL.Time|ICAL.UtcOffset} icalValue The ICAL.JS object to wrap\n */\n constructor(icalValue) {\n if (new.target === AbstractValue) {\n throw new TypeError('Cannot instantiate abstract class AbstractValue');\n }\n super();\n\n /**\n * Wrapped ICAL.js value\n *\n * @type {ICAL.Binary|ICAL.Duration|ICAL.Period|ICAL.Recur|ICAL.Time|ICAL.UtcOffset}\n */\n this._innerValue = icalValue;\n }\n\n /**\n * Gets wrapped ICAL.JS object\n *\n * @return {*}\n */\n toICALJs() {\n return this._innerValue;\n }\n\n /**\n * @inheritDoc\n */\n _modifyContent() {\n super._modifyContent();\n this._notifySubscribers();\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class BinaryValue\n * @classdesc Wrapper for ICAL.Binary\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.1.3\n * @url https://github.com/mozilla-comm/ical.js/blob/master/lib/ical/binary.js\n */\nclass BinaryValue extends AbstractValue {\n /**\n * Sets the raw b64 encoded value\n *\n * @return {string}\n */\n get rawValue() {\n return this._innerValue.value;\n }\n\n /**\n * Gets the raw b64 encoded value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {string} value - The new raw value\n */\n set rawValue(value) {\n this._modifyContent();\n this._innerValue.value = value;\n }\n\n /**\n * Gets the decoded value\n *\n * @return {string}\n */\n get value() {\n return this._innerValue.decodeValue();\n }\n\n /**\n * Sets the decoded Value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {string} decodedValue - The new encoded value\n */\n set value(decodedValue) {\n this._modifyContent();\n this._innerValue.setEncodedValue(decodedValue);\n }\n\n /**\n * clones this value\n *\n * @return {BinaryValue}\n */\n clone() {\n return BinaryValue.fromRawValue(this._innerValue.value);\n }\n\n /**\n * Create a new BinaryValue object from an ICAL.Binary object\n *\n * @param {ICAL.Binary} icalValue - The ICAL.Binary object\n * @return {BinaryValue}\n */\n static fromICALJs(icalValue) {\n return new BinaryValue(icalValue);\n }\n\n /**\n * Create a new BinaryValue object from a raw b64 encoded value\n *\n * @param {string} rawValue - The raw value\n * @return {BinaryValue}\n */\n static fromRawValue(rawValue) {\n const icalBinary = new ICAL.Binary(rawValue);\n return BinaryValue.fromICALJs(icalBinary);\n }\n\n /**\n * Create a new BinaryValue object from decoded value\n *\n * @param {string} decodedValue - The encoded value\n * @return {BinaryValue}\n */\n static fromDecodedValue(decodedValue) {\n const icalBinary = new ICAL.Binary();\n icalBinary.setEncodedValue(decodedValue);\n return BinaryValue.fromICALJs(icalBinary);\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class DurationValue\n * @classdesc Wrapper for ICAL.Duration\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.3.6\n * @url https://github.com/mozilla-comm/ical.js/blob/master/lib/ical/duration.js\n */\nclass DurationValue extends AbstractValue {\n /**\n * Gets the weeks of the stored duration-value\n *\n * @return {number}\n */\n get weeks() {\n return this._innerValue.weeks;\n }\n\n /**\n * Sets the weeks of the stored duration-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @throws {TypeError} if value is negative\n * @param {number} weeks Amount of weeks\n */\n set weeks(weeks) {\n this._modifyContent();\n if (weeks < 0) {\n throw new TypeError('Weeks cannot be negative, use isNegative instead');\n }\n this._innerValue.weeks = weeks;\n }\n\n /**\n * Gets the days of the stored duration-value\n *\n * @return {number}\n */\n get days() {\n return this._innerValue.days;\n }\n\n /**\n * Sets the days of the stored duration-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @throws {TypeError} if value is negative\n * @param {number} days Amount of days\n */\n set days(days) {\n this._modifyContent();\n if (days < 0) {\n throw new TypeError('Days cannot be negative, use isNegative instead');\n }\n this._innerValue.days = days;\n }\n\n /**\n * Gets the hours of the stored duration-value\n *\n * @return {number}\n */\n get hours() {\n return this._innerValue.hours;\n }\n\n /**\n * Sets the weeks of the stored duration-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @throws {TypeError} if value is negative\n * @param {number} hours Amount of hours\n */\n set hours(hours) {\n this._modifyContent();\n if (hours < 0) {\n throw new TypeError('Hours cannot be negative, use isNegative instead');\n }\n this._innerValue.hours = hours;\n }\n\n /**\n * Gets the minutes of the stored duration-value\n *\n * @return {number}\n */\n get minutes() {\n return this._innerValue.minutes;\n }\n\n /**\n * Sets the minutes of the stored duration-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @throws {TypeError} if value is negative\n * @param {number} minutes Amount of minutes\n */\n set minutes(minutes) {\n this._modifyContent();\n if (minutes < 0) {\n throw new TypeError('Minutes cannot be negative, use isNegative instead');\n }\n this._innerValue.minutes = minutes;\n }\n\n /**\n * Gets the seconds of the stored duration-value\n *\n * @return {number}\n */\n get seconds() {\n return this._innerValue.seconds;\n }\n\n /**\n * Sets the seconds of the stored duration-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @throws {TypeError} if value is negative\n * @param {number} seconds Amount of seconds\n */\n set seconds(seconds) {\n this._modifyContent();\n if (seconds < 0) {\n throw new TypeError('Seconds cannot be negative, use isNegative instead');\n }\n this._innerValue.seconds = seconds;\n }\n\n /**\n * Gets the negative-indicator of the stored duration-value\n *\n * @return {boolean}\n */\n get isNegative() {\n return this._innerValue.isNegative;\n }\n\n /**\n * Gets the negative-indicator of the stored duration-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {boolean} isNegative Whether or not the duration is negative\n */\n set isNegative(isNegative) {\n this._modifyContent();\n this._innerValue.isNegative = !!isNegative;\n }\n\n /**\n * Gets the amount of total seconds of the stored duration-value\n *\n * @return {* | number}\n */\n get totalSeconds() {\n return this._innerValue.toSeconds();\n }\n\n /**\n * Sets the amount of total seconds of the stored duration-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {number} totalSeconds The total amounts of seconds to set\n */\n set totalSeconds(totalSeconds) {\n this._modifyContent();\n this._innerValue.fromSeconds(totalSeconds);\n }\n\n /**\n * Compares this duration to another one\n *\n * @param {DurationValue} otherDuration The duration to compare to\n * @return {number} -1, 0 or 1 for less/equal/greater\n */\n compare(otherDuration) {\n return this._innerValue.compare(otherDuration.toICALJs());\n }\n\n /**\n * Adds the value of another duration to this one\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {DurationValue} otherDuration The duration to add\n */\n addDuration(otherDuration) {\n this._modifyContent();\n this.totalSeconds += otherDuration.totalSeconds;\n this._innerValue.normalize();\n }\n\n /**\n * Subtract the value of another duration from this one\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {DurationValue} otherDuration The duration to subtract\n */\n subtractDuration(otherDuration) {\n this._modifyContent();\n this.totalSeconds -= otherDuration.totalSeconds;\n this._innerValue.normalize();\n }\n\n /**\n * clones this value\n *\n * @return {DurationValue}\n */\n clone() {\n return DurationValue.fromICALJs(this._innerValue.clone());\n }\n\n /**\n * Create a new DurationValue object from an ICAL.Duration object\n *\n * @param {ICAL.Duration} icalValue The ical.js duration value\n * @return {DurationValue}\n */\n static fromICALJs(icalValue) {\n return new DurationValue(icalValue);\n }\n\n /**\n * Create a new DurationValue object from a number of seconds\n *\n * @param {number} seconds Total amount of seconds\n * @return {DurationValue}\n */\n static fromSeconds(seconds) {\n const icalDuration = ICAL.Duration.fromSeconds(seconds);\n return new DurationValue(icalDuration);\n }\n\n /**\n * Create a new DurationValue object from data\n *\n * @param {object} data The destructuring object\n * @param {number=} data.weeks Number of weeks to set\n * @param {number=} data.days Number of days to set\n * @param {number=} data.hours Number of hours to set\n * @param {number=} data.minutes Number of minutes to set\n * @param {number=} data.seconds Number of seconds to set\n * @param {boolean=} data.isNegative Whether or not duration is negative\n * @return {DurationValue}\n */\n static fromData(data) {\n const icalDuration = ICAL.Duration.fromData(data);\n return new DurationValue(icalDuration);\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class DateTimeValue\n * @classdesc Wrapper for ICAL.Time\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.3.4\n * @url https://tools.ietf.org/html/rfc5545#section-3.3.5\n * @url https://tools.ietf.org/html/rfc5545#section-3.3.12\n * @url https://github.com/mozilla-comm/ical.js/blob/master/lib/ical/time.js\n */\nclass DateTimeValue extends AbstractValue {\n /**\n * Gets the year of the stored date-time-value\n *\n * @return {number}\n */\n get year() {\n return this._innerValue.year;\n }\n\n /**\n * Sets the year of the stored date-time-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {number} year Number of years to set\n */\n set year(year) {\n this._modifyContent();\n this._innerValue.year = year;\n }\n\n /**\n * Gets the month of the stored date-time-value\n *\n * @return {number}\n */\n get month() {\n return this._innerValue.month;\n }\n\n /**\n * Sets the month of the stored date-time-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {number} month Number of months to set\n */\n set month(month) {\n this._modifyContent();\n if (month < 1 || month > 12) {\n throw new TypeError('Month out of range');\n }\n this._innerValue.month = month;\n }\n\n /**\n * Gets the day of the stored date-time-value\n *\n * @return {number}\n */\n get day() {\n return this._innerValue.day;\n }\n\n /**\n * Sets the day of the stored date-time-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @throws {TypeError} if out of range\n * @param {number} day Number of days to set\n */\n set day(day) {\n this._modifyContent();\n if (day < 1 || day > 31) {\n throw new TypeError('Day out of range');\n }\n this._innerValue.day = day;\n }\n\n /**\n * Gets the hour of the stored date-time-value\n *\n * @return {number}\n */\n get hour() {\n return this._innerValue.hour;\n }\n\n /**\n * Sets the hour of the stored date-time-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @throws {TypeError} if out of range\n * @param {number} hour Number of hours to set\n */\n set hour(hour) {\n this._modifyContent();\n if (hour < 0 || hour > 23) {\n throw new TypeError('Hour out of range');\n }\n this._innerValue.hour = hour;\n }\n\n /**\n * Gets the minute of the stored date-time-value\n *\n * @return {number}\n */\n get minute() {\n return this._innerValue.minute;\n }\n\n /**\n * Sets the minute of the stored date-time-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @throws {TypeError} if out of range\n * @param {number} minute Number of minutes to set\n */\n set minute(minute) {\n this._modifyContent();\n if (minute < 0 || minute > 59) {\n throw new TypeError('Minute out of range');\n }\n this._innerValue.minute = minute;\n }\n\n /**\n * Gets the second of the stored date-time-value\n *\n * @return {number}\n */\n get second() {\n return this._innerValue.second;\n }\n\n /**\n * Sets the second of the stored date-time-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @throws {TypeError} if out of range\n * @param {number} second Number of seconds to set\n */\n set second(second) {\n this._modifyContent();\n if (second < 0 || second > 59) {\n throw new TypeError('Second out of range');\n }\n this._innerValue.second = second;\n }\n\n /**\n * Gets the timezone of this date-time-value\n *\n * @return {string | null}\n */\n get timezoneId() {\n // If zone.tzid is set and it's not 'floating' nor 'UTC', then it's a proper\n // timezone that we also have a timezone id for\n if (this._innerValue.zone.tzid && this._innerValue.zone.tzid !== 'floating' && this._innerValue.zone.tzid === 'UTC') {\n return this._innerValue.zone.tzid;\n }\n\n // If there is a timezone set, but we didn't have a zone.tzid in the previous if,\n // this means that the tzid does not have a definition stored along it.\n // we will keep this information anyway to not lose it\n if (this._innerValue.timezone) {\n return this._innerValue.timezone;\n }\n\n // this is the case when it's floating / UTC\n return this._innerValue.zone.tzid || null;\n }\n\n /**\n * Gets whether this date-time-value is a date or date-time\n *\n * @return {boolean}\n */\n get isDate() {\n return this._innerValue.isDate;\n }\n\n /**\n * Sets whether this date-time-value is a date or date-time\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {boolean} isDate Whether this is a date or date-time value\n */\n set isDate(isDate) {\n this._modifyContent();\n this._innerValue.isDate = !!isDate;\n if (isDate) {\n this._innerValue.hour = 0;\n this._innerValue.minute = 0;\n this._innerValue.second = 0;\n }\n }\n\n /**\n * Gets the unix-time\n *\n * @return {number}\n */\n get unixTime() {\n return this._innerValue.toUnixTime();\n }\n\n /**\n * returns vanilla javascript date object\n *\n * @return {Date}\n */\n get jsDate() {\n return this._innerValue.toJSDate();\n }\n\n /**\n * Adds a duration to this date-time-value\n *\n * @param {DurationValue} duration The duration to ad\n */\n addDuration(duration) {\n this._innerValue.addDuration(duration.toICALJs());\n }\n\n /**\n * Subtract another date excluding timezones\n *\n * @param {DateTimeValue} other The date-time value to subtract\n * @return {DurationValue}\n */\n subtractDateWithoutTimezone(other) {\n const icalDuration = this._innerValue.subtractDate(other.toICALJs());\n return DurationValue.fromICALJs(icalDuration);\n }\n\n /**\n * Subtract another date, taking timezones into account\n *\n * @param {DateTimeValue} other The date-time value to subtract\n * @return {DurationValue}\n */\n subtractDateWithTimezone(other) {\n const icalDuration = this._innerValue.subtractDateTz(other.toICALJs());\n return DurationValue.fromICALJs(icalDuration);\n }\n\n /**\n * Compares this DateTimeValue object with another one\n *\n * @param {DateTimeValue} other The date-time to compare to\n * @return {number} -1, 0 or 1 for less/equal/greater\n */\n compare(other) {\n return this._innerValue.compare(other.toICALJs());\n }\n\n /**\n * Compares only the date part in a given timezone\n *\n * @param {DateTimeValue} other The date-time to compare to\n * @param {Timezone} timezone The timezone to compare in\n * @return {number} -1, 0 or 1 for less/equal/greater\n */\n compareDateOnlyInGivenTimezone(other, timezone) {\n return this._innerValue.compareDateOnlyTz(other.toICALJs(), timezone.toICALTimezone());\n }\n\n /**\n * Returns a clone of this object which was converted to a different timezone\n *\n * @param {Timezone} timezone TimezoneId to convert to\n * @return {DateTimeValue}\n */\n getInTimezone(timezone) {\n const clonedICALTime = this._innerValue.convertToZone(timezone.toICALTimezone());\n return DateTimeValue.fromICALJs(clonedICALTime);\n }\n\n /**\n * Get the inner ICAL.Timezone\n *\n * @return {ICAL.Timezone}\n * @package\n */\n getICALTimezone() {\n return this._innerValue.zone;\n }\n\n /**\n * Returns a clone of this object which was converted to a different timezone\n *\n * @param {ICAL.Timezone} timezone TimezoneId to convert to\n * @return {DateTimeValue}\n * @package\n */\n getInICALTimezone(timezone) {\n const clonedICALTime = this._innerValue.convertToZone(timezone);\n return DateTimeValue.fromICALJs(clonedICALTime);\n }\n\n /**\n * Returns a clone of this object which was converted to UTC\n *\n * @return {DateTimeValue}\n */\n getInUTC() {\n const clonedICALTime = this._innerValue.convertToZone(ICAL.Timezone.utcTimezone);\n return DateTimeValue.fromICALJs(clonedICALTime);\n }\n\n /**\n * This silently replaces the inner timezone without converting the actual time\n *\n * @param {ICAL.Timezone} timezone The timezone to replace with\n * @package\n */\n silentlyReplaceTimezone(timezone) {\n this._modify();\n this._innerValue = new ICAL.Time({\n year: this.year,\n month: this.month,\n day: this.day,\n hour: this.hour,\n minute: this.minute,\n second: this.second,\n isDate: this.isDate,\n timezone\n });\n }\n\n /**\n * Replaces the inner timezone without converting the actual time\n *\n * @param {Timezone} timezone The timezone to replace with\n */\n replaceTimezone(timezone) {\n this._modifyContent();\n this._innerValue = ICAL.Time.fromData({\n year: this.year,\n month: this.month,\n day: this.day,\n hour: this.hour,\n minute: this.minute,\n second: this.second,\n isDate: this.isDate\n }, timezone.toICALTimezone());\n }\n\n /**\n * Calculates the UTC offset of the date-time-value in its timezone\n *\n * @return {number}\n */\n utcOffset() {\n return this._innerValue.utcOffset();\n }\n\n /**\n * Check if this is an event with floating time\n *\n * @return {boolean}\n */\n isFloatingTime() {\n return this._innerValue.zone.tzid === 'floating';\n }\n\n /**\n * clones this value\n *\n * @return {DateTimeValue}\n */\n clone() {\n return DateTimeValue.fromICALJs(this._innerValue.clone());\n }\n\n /**\n * Create a new DateTimeValue object from an ICAL.Time object\n *\n * @param {ICAL.Time} icalValue The ical.js Date value to initialise from\n * @return {DateTimeValue}\n */\n static fromICALJs(icalValue) {\n return new DateTimeValue(icalValue);\n }\n\n /**\n * Creates a new DateTimeValue object based on a vanilla javascript object\n *\n * @param {Date} jsDate The JavaScript date to initialise from\n * @param {boolean=} useUTC Whether or not to treat it as UTC\n * @return {DateTimeValue}\n */\n static fromJSDate(jsDate, useUTC = false) {\n const icalValue = ICAL.Time.fromJSDate(jsDate, useUTC);\n return DateTimeValue.fromICALJs(icalValue);\n }\n\n /**\n * Creates a new DateTimeValue object based on simple parameters\n *\n * @param {object} data The destructuring object\n * @param {number=} data.year Amount of years to set\n * @param {number=} data.month Amount of month to set (1-based)\n * @param {number=} data.day Amount of days to set\n * @param {number=} data.hour Amount of hours to set\n * @param {number=} data.minute Amount of minutes to set\n * @param {number=} data.second Amount of seconds to set\n * @param {boolean=} data.isDate Whether this is a date or date-time\n * @param {Timezone=} timezone The timezone of the DateTimeValue\n * @return {DateTimeValue}\n */\n static fromData(data, timezone) {\n const icalValue = ICAL.Time.fromData(data, timezone ? timezone.toICALTimezone() : undefined);\n return DateTimeValue.fromICALJs(icalValue);\n }\n}\nDateTimeValue.SUNDAY = ICAL.Time.SUNDAY;\nDateTimeValue.MONDAY = ICAL.Time.MONDAY;\nDateTimeValue.TUESDAY = ICAL.Time.TUESDAY;\nDateTimeValue.WEDNESDAY = ICAL.Time.WEDNESDAY;\nDateTimeValue.THURSDAY = ICAL.Time.THURSDAY;\nDateTimeValue.FRIDAY = ICAL.Time.FRIDAY;\nDateTimeValue.SATURDAY = ICAL.Time.SATURDAY;\nDateTimeValue.DEFAULT_WEEK_START = DateTimeValue.MONDAY;\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class PeriodValue\n * @classdesc Wrapper for ICAL.Period\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.3.9\n * @url https://github.com/mozilla-comm/ical.js/blob/master/lib/ical/period.js\n */\nclass PeriodValue extends AbstractValue {\n /**\n * @inheritDoc\n */\n constructor(...args) {\n super(...args);\n\n /**\n * DateTimeValue object for start\n *\n * @type {DateTimeValue}\n * @private\n */\n this._start = DateTimeValue.fromICALJs(this._innerValue.start);\n\n /**\n * DateTimeValue object for end\n *\n * @type {DateTimeValue|null}\n * @private\n */\n this._end = null;\n\n /**\n * DurationValue object for duration\n *\n * @type {DurationValue|null}\n * @private\n */\n this._duration = null;\n }\n\n /**\n * Gets the start of the period-value\n *\n * @return {DateTimeValue}\n */\n get start() {\n return this._start;\n }\n\n /**\n * Sets the start of the period-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {DateTimeValue} start The start of the period\n */\n set start(start) {\n this._modifyContent();\n this._start = start;\n this._innerValue.start = start.toICALJs();\n }\n\n /**\n * Gets the end of the period-value\n *\n * @return {DateTimeValue}\n */\n get end() {\n if (!this._end) {\n if (this._duration) {\n this._duration.lock();\n this._duration = null;\n }\n this._innerValue.end = this._innerValue.getEnd();\n this._end = DateTimeValue.fromICALJs(this._innerValue.end);\n this._innerValue.duration = null;\n if (this.isLocked()) {\n this._end.lock();\n }\n }\n return this._end;\n }\n\n /**\n * Sets the end of the period-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {DateTimeValue} end The end of the period\n */\n set end(end) {\n this._modifyContent();\n this._innerValue.duration = null;\n this._innerValue.end = end.toICALJs();\n this._end = end;\n }\n\n /**\n * Gets the duration of the period-value\n * The value is automatically locked.\n * If you want to edit the value, clone it and it as new duration\n *\n * @return {DurationValue}\n */\n get duration() {\n if (!this._duration) {\n if (this._end) {\n this._end.lock();\n this._end = null;\n }\n this._innerValue.duration = this._innerValue.getDuration();\n this._duration = DurationValue.fromICALJs(this._innerValue.duration);\n this._innerValue.end = null;\n if (this.isLocked()) {\n this._duration.lock();\n }\n }\n return this._duration;\n }\n\n /**\n * Sets the duration of the period-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {DurationValue} duration The duration to set\n */\n set duration(duration) {\n this._modifyContent();\n this._innerValue.end = null;\n this._innerValue.duration = duration.toICALJs();\n this._duration = duration;\n }\n\n /**\n * @inheritDoc\n */\n lock() {\n super.lock();\n this.start.lock();\n if (this._end) {\n this._end.lock();\n }\n if (this._duration) {\n this._duration.lock();\n }\n }\n\n /**\n * @inheritDoc\n */\n unlock() {\n super.unlock();\n this.start.unlock();\n if (this._end) {\n this._end.unlock();\n }\n if (this._duration) {\n this._duration.unlock();\n }\n }\n\n /**\n * clones this value\n *\n * @return {PeriodValue}\n */\n clone() {\n return PeriodValue.fromICALJs(this._innerValue.clone());\n }\n\n /**\n * Create a new PeriodValue object from a ICAL.Period object\n *\n * @param {ICAL.Period} icalValue The ical.js period value to initialise from\n * @return {PeriodValue}\n */\n static fromICALJs(icalValue) {\n return new PeriodValue(icalValue);\n }\n\n /**\n * Create a new PeriodValue object from start and end\n *\n * @param {object} data The destructuring object\n * @param {DateTimeValue} data.start The start of the period\n * @param {DateTimeValue} data.end The end of the period\n * @return {PeriodValue}\n */\n static fromDataWithEnd(data) {\n const icalPeriod = ICAL.Period.fromData({\n start: data.start.toICALJs(),\n end: data.end.toICALJs()\n });\n return PeriodValue.fromICALJs(icalPeriod);\n }\n\n /**\n * Create a new PeriodValue object from start and duration\n *\n * @param {object} data The destructuring object\n * @param {DateTimeValue} data.start The start of the period\n * @param {DurationValue} data.duration The duration of the period\n * @return {PeriodValue}\n */\n static fromDataWithDuration(data) {\n const icalPeriod = ICAL.Period.fromData({\n start: data.start.toICALJs(),\n duration: data.duration.toICALJs()\n });\n return PeriodValue.fromICALJs(icalPeriod);\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\nconst ALLOWED_FREQ = ['SECONDLY', 'MINUTELY', 'HOURLY', 'DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'];\n\n/**\n * @class RecurValue\n * @classdesc Wrapper for ICAL.Recur\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.3.10\n * @url https://github.com/mozilla-comm/ical.js/blob/master/lib/ical/recur.js\n */\nclass RecurValue extends AbstractValue {\n /**\n * Constructor\n *\n * @param {ICAL.Recur} icalValue The ical.js rrule value\n * @param {DateTimeValue?} until The Until date\n */\n constructor(icalValue, until) {\n super(icalValue);\n\n /**\n * DateTimeValue object for Until\n *\n * @type {DateTimeValue}\n * @private\n */\n this._until = until;\n }\n\n /**\n * Gets the stored interval of this recurrence rule\n *\n * @return {number}\n */\n get interval() {\n return this._innerValue.interval;\n }\n\n /**\n * Sets the stored interval of this recurrence rule\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {number} interval New Interval to set\n */\n set interval(interval) {\n this._modifyContent();\n this._innerValue.interval = parseInt(interval, 10);\n }\n\n /**\n * Gets the weekstart used to calculate the recurrence expansion\n *\n * @return {number}\n */\n get weekStart() {\n return this._innerValue.wkst;\n }\n\n /**\n * Sets the weekstart used to calculate the recurrence expansion\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @throws {TypeError} if weekstart out of range\n * @param {number} weekStart New start of week to set\n */\n set weekStart(weekStart) {\n this._modifyContent();\n if (weekStart < DateTimeValue.SUNDAY || weekStart > DateTimeValue.SATURDAY) {\n throw new TypeError('Weekstart out of range');\n }\n this._innerValue.wkst = weekStart;\n }\n\n /**\n * Gets the until value if set\n * The value is automatically locked.\n * If you want to edit the value, clone it and it as new until\n *\n * @return {null|DateTimeValue}\n */\n get until() {\n if (!this._until && this._innerValue.until) {\n this._until = DateTimeValue.fromICALJs(this._innerValue.until);\n }\n return this._until;\n }\n\n /**\n * Sets the until value, automatically removes count\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {DateTimeValue} until New until date to set\n */\n set until(until) {\n this._modifyContent();\n if (this._until) {\n this._until.lock();\n }\n this._until = until;\n this._innerValue.count = null;\n this._innerValue.until = until.toICALJs();\n }\n\n /**\n * Gets the count value if set\n *\n * @return {null | number}\n */\n get count() {\n return this._innerValue.count;\n }\n\n /**\n * Sets the count value, automatically removes until\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {number} count New occurrence limit to set\n */\n set count(count) {\n this._modifyContent();\n if (this._until) {\n this._until.lock();\n this._until = null;\n }\n this._innerValue.until = null;\n this._innerValue.count = parseInt(count, 10);\n }\n\n /**\n * Gets the frequency of the recurrence rule\n *\n * @return {string} see\n */\n get frequency() {\n return this._innerValue.freq;\n }\n\n /**\n * Sets the frequency of the recurrence rule\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @throws {TypeError} if frequency is unknown\n * @param {string} freq New frequency to set\n */\n set frequency(freq) {\n this._modifyContent();\n if (!ALLOWED_FREQ.includes(freq)) {\n throw new TypeError('Unknown frequency');\n }\n this._innerValue.freq = freq;\n }\n\n /**\n * Modifies this recurrence-value to unset count and until\n */\n setToInfinite() {\n this._modifyContent();\n if (this._until) {\n this._until.lock();\n this._until = null;\n }\n this._innerValue.until = null;\n this._innerValue.count = null;\n }\n\n /**\n * Checks whether the stored rule is finite\n *\n * @return {boolean}\n */\n isFinite() {\n return this._innerValue.isFinite();\n }\n\n /**\n * Checks whether the recurrence rule is limited by count\n *\n * @return {boolean}\n */\n isByCount() {\n return this._innerValue.isByCount();\n }\n\n /**\n * Adds a part to a component to the recurrence-rule\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {string} componentName The name of the recurrence-component to add\n * @param {string | number} value The value to add\n */\n addComponent(componentName, value) {\n this._modifyContent();\n this._innerValue.addComponent(componentName, value);\n }\n\n /**\n * Sets / overwrites a component to the recurrence-rule\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {string} componentName The name of the component to set\n * @param {number[] | string[]} value The value to set\n */\n setComponent(componentName, value) {\n this._modifyContent();\n if (value.length === 0) {\n delete this._innerValue.parts[componentName.toUpperCase()];\n } else {\n this._innerValue.setComponent(componentName, value);\n }\n }\n\n /**\n * Removes all parts of a component\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {string} componentName The name of the component to remove\n */\n removeComponent(componentName) {\n delete this._innerValue.parts[uc(componentName)];\n }\n\n /**\n * Gets all parts of a component\n *\n * @param {string} componentName The name of the component to get\n * @return {Array}\n */\n getComponent(componentName) {\n return this._innerValue.getComponent(componentName);\n }\n\n /**\n * Checks if this recurrence rule is valid according to RFC 5545\n *\n * @return {boolean}\n */\n isRuleValid() {\n return true;\n }\n\n /**\n * @inheritDoc\n */\n lock() {\n super.lock();\n if (this._until) {\n this._until.lock();\n }\n }\n\n /**\n * @inheritDoc\n */\n unlock() {\n super.unlock();\n if (this._until) {\n this._until.unlock();\n }\n }\n\n /**\n * clones this value\n *\n * @return {RecurValue}\n */\n clone() {\n return RecurValue.fromICALJs(this._innerValue.clone());\n }\n\n /**\n * Create a new RecurValue object from a ICAL.Recur object\n *\n * @param {ICAL.Recur} icalValue The ICAL.JS Recur value\n * @param {DateTimeValue?} until The Until date\n * @return {RecurValue}\n */\n static fromICALJs(icalValue, until = null) {\n return new RecurValue(icalValue, until);\n }\n\n /**\n * Create a new RecurValue object from a data object\n *\n * @param {object} data The destructuring object\n * @param {string=} data.freq FREQ part of RRULE\n * @param {number=} data.interval INTERVAL part of RRULE\n * @param {number=} data.wkst WEEKSTART part of RRULE\n * @param {DateTimeValue=} data.until UNTIL part of RRULE\n * @param {number=} data.count COUNT part of RRULE\n * @param {number[]=} data.bysecond BYSECOND part of RRULE\n * @param {number[]=} data.byminute BYMINUTE part of RRULE\n * @param {number[]=} data.byhour BYHOUR part of RRULE\n * @param {string[]=} data.byday BYDAY part of RRULE\n * @param {number[]=} data.bymonthday BYMONTHDAY part of RRULE\n * @param {number[]=} data.byyearday BYYEARDAY part of RRULE\n * @param {number[]=} data.byweekno BYWEEKNO part of RRULE\n * @param {number[]=} data.bymonth BYMONTH part of RRULE\n * @param {number[]=} data.bysetpos BYSETPOS part of RRULE\n * @return {RecurValue}\n */\n static fromData(data) {\n let until = null;\n if (data.until) {\n until = data.until;\n data.until = data.until.toICALJs();\n }\n const icalRecur = ICAL.Recur.fromData(data);\n return RecurValue.fromICALJs(icalRecur, until);\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class UTCOffsetValue\n * @classdesc Wrapper for ICAL.UtcOffset\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.3.14\n * @url https://github.com/mozilla-comm/ical.js/blob/master/lib/ical/utc_offset.js\n */\nclass UTCOffsetValue extends AbstractValue {\n /**\n * Gets the hour part of the offset-value\n *\n * @return {number}\n */\n get hours() {\n return this._innerValue.hours;\n }\n\n /**\n * Sets the hour part of the offset-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {number} hours - New hours to set\n */\n set hours(hours) {\n this._modifyContent();\n this._innerValue.hours = hours;\n }\n\n /**\n * Gets the minute part of the offset-value\n *\n * @return {number}\n */\n get minutes() {\n return this._innerValue.minutes;\n }\n\n /**\n * Sets the minute part of the offset-value\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {number} minutes - New minutes to set\n */\n set minutes(minutes) {\n this._modifyContent();\n this._innerValue.minutes = minutes;\n }\n\n /**\n * Gets the factor\n *\n * @return {number}\n */\n get factor() {\n return this._innerValue.factor;\n }\n\n /**\n * Sets the factor\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @throws {TypeError} if factor is neither 1 nor -1\n * @param {number} factor - New factor to set, 1 for positive, -1 for negative\n */\n set factor(factor) {\n this._modifyContent();\n if (factor !== 1 && factor !== -1) {\n throw new TypeError('Factor may only be set to 1 or -1');\n }\n this._innerValue.factor = factor;\n }\n\n /**\n * Gets the total amount of seconds\n *\n * @return {number}\n */\n get totalSeconds() {\n return this._innerValue.toSeconds();\n }\n\n /**\n * Sets the total amount of seconds\n *\n * @throws {ModificationNotAllowedError} if value is locked for modification\n * @param {number} totalSeconds - New number of total seconds to set\n */\n set totalSeconds(totalSeconds) {\n this._modifyContent();\n this._innerValue.fromSeconds(totalSeconds);\n }\n\n /**\n * Compares this UTCOffset to another one\n *\n * @param {UTCOffsetValue} other - The other UTCOffsetValue to compare with\n * @return {number} -1, 0 or 1 for less/equal/greater\n */\n compare(other) {\n return this._innerValue.compare(other.toICALJs());\n }\n\n /**\n * Clones this value\n *\n * @return {UTCOffsetValue}\n */\n clone() {\n return UTCOffsetValue.fromICALJs(this._innerValue.clone());\n }\n\n /**\n * Create a new UTCOffsetValue object from a ICAL.UTCOffset object\n *\n * @param {ICAL.UtcOffset} icalValue - The ICAL.UtcOffset object to initialize this object from\n * @return {UTCOffsetValue}\n */\n static fromICALJs(icalValue) {\n return new UTCOffsetValue(icalValue);\n }\n\n /**\n * Create a new UTCOffsetValue object from a data object\n *\n * @param {object} data - Object with data to create UTCOffsetValue object from\n * @param {number=} data.hours - The number of hours to set\n * @param {number=} data.minutes - The number of minutes to set\n * @param {number=} data.factor - The factor to use, 1 for positive, -1 for negative\n * @return {UTCOffsetValue}\n */\n static fromData(data) {\n const icalUTCOffset = new ICAL.UtcOffset();\n icalUTCOffset.fromData(data);\n return UTCOffsetValue.fromICALJs(icalUTCOffset);\n }\n\n /**\n * Create a new UTCOffsetValue object from an amount of seconds\n *w\n *\n * @param {number} seconds - The total number of seconds to create the UTCOffsetValue object from\n * @return {UTCOffsetValue}\n */\n static fromSeconds(seconds) {\n const icalUTCOffset = ICAL.UtcOffset.fromSeconds(seconds);\n return UTCOffsetValue.fromICALJs(icalUTCOffset);\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\nclass UnknownICALTypeError extends Error {}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @author Richard Steinmetz \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n *\n * @param {string} icaltype The icaltype to get a Value constructor for\n * @return {RecurValue|PeriodValue|BinaryValue|DurationValue|UTCOffsetValue|DateTimeValue}\n */\nfunction getConstructorForICALType(icaltype) {\n switch (lc(icaltype)) {\n case 'binary':\n return BinaryValue;\n case 'date':\n case 'date-time':\n return DateTimeValue;\n case 'duration':\n return DurationValue;\n case 'period':\n return PeriodValue;\n case 'recur':\n return RecurValue;\n case 'utc-offset':\n return UTCOffsetValue;\n default:\n throw new UnknownICALTypeError();\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class Property\n * @classdesc This class represents a property as defined in RFC 5545 Section 3.5\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.5\n * @url https://github.com/mozilla-comm/ical.js/blob/master/lib/ical/property.js\n */\nclass Property extends observerTrait(lockableTrait(class {})) {\n /**\n * Constructor\n *\n * @param {string} name The name of the property\n * @param {string | number | AbstractValue | string[] | number[] | AbstractValue[] | null} value The value of the property\n * @param {Parameter[] | [string][]} parameters Array of parameters\n * @param {CalendarComponent|null} root The root of the calendar-document\n * @param {AbstractComponent|null} parent The parent-element of this property\n */\n constructor(name, value = null, parameters = [], root = null, parent = null) {\n super();\n\n /**\n * Name of the property\n *\n * @type {string}\n * @protected\n */\n this._name = uc(name);\n\n /**\n * Value of the property\n *\n * @type {string | number | AbstractValue | string[] | number[] | AbstractValue[] | null}\n * @protected\n */\n this._value = value;\n\n /**\n * List of parameters associated with this parameter\n *\n * @type {Map}\n */\n this._parameters = new Map();\n\n /**\n * Root node of ical document\n *\n * @type {CalendarComponent|null}\n * @protected\n */\n this._root = root;\n\n /**\n * Parent node\n *\n * @type {AbstractComponent|null}\n * @protected\n */\n this._parent = parent;\n this._setParametersFromConstructor(parameters);\n if (value instanceof AbstractValue) {\n value.subscribe(() => this._notifySubscribers());\n }\n }\n\n /**\n * Get property name\n *\n * @readonly\n * @return {string}\n */\n get name() {\n return this._name;\n }\n\n /**\n * Get parameter value\n *\n * @return {string | number | AbstractValue | string[] | number[] | AbstractValue[] | null}\n */\n get value() {\n return this._value;\n }\n\n /**\n * Set new parameter value\n *\n * @param {string | number | AbstractValue | string[] | number[] | AbstractValue[] | null} value The value of the property\n * @throws {ModificationNotAllowedError} if property is locked for modification\n */\n set value(value) {\n this._modifyContent();\n this._value = value;\n if (value instanceof AbstractValue) {\n value.subscribe(() => this._notifySubscribers());\n }\n }\n\n /**\n * Gets the root of this property\n *\n * @return {CalendarComponent|null}\n */\n get root() {\n return this._root;\n }\n\n /**\n * Sets the root of this property\n *\n * @param {CalendarComponent|null} root The root of the calendar-document\n * @throws {ModificationNotAllowedError} if property is locked for modification\n */\n set root(root) {\n this._modify();\n this._root = root;\n }\n\n /**\n * Gets the direct parent element of this property\n *\n * @return {AbstractComponent}\n */\n get parent() {\n return this._parent;\n }\n\n /**\n * Sets the direct parent element of this property\n *\n * @param {AbstractComponent|null} parent The parent element of this property\n * @throws {ModificationNotAllowedError} if property is locked for modification\n */\n set parent(parent) {\n this._modify();\n this._parent = parent;\n }\n\n /**\n * Gets the first value of this property\n *\n * @return {null | string | number | AbstractValue}\n */\n getFirstValue() {\n if (!this.isMultiValue()) {\n return this.value;\n } else {\n if (this.value.length > 0) {\n return this.value[0];\n }\n }\n return null;\n }\n\n /**\n * Gets an iterator over all values\n */\n *getValueIterator() {\n if (this.isMultiValue()) {\n yield* this.value.slice()[Symbol.iterator]();\n } else {\n yield this.value;\n }\n }\n\n /**\n * Adds a value to the multi-value property\n *\n * @param {string | AbstractValue} value Value to add\n */\n addValue(value) {\n if (!this.isMultiValue()) {\n throw new TypeError('This is not a multivalue property');\n }\n this._modifyContent();\n this.value.push(value);\n }\n\n /**\n * Checks if a value is inside this multi-value property\n *\n * @param {string | AbstractValue} value Value to check for\n * @return {boolean}\n */\n hasValue(value) {\n if (!this.isMultiValue()) {\n throw new TypeError('This is not a multivalue property');\n }\n return this.value.includes(value);\n }\n\n /**\n * Removes a value from this multi-value property\n *\n * @param {string | AbstractValue} value Value to remove\n */\n removeValue(value) {\n if (!this.hasValue(value)) {\n return;\n }\n this._modifyContent();\n const index = this.value.indexOf(value);\n this.value.splice(index, 1);\n }\n\n /**\n * Sets a parameter on this property\n *\n * @param {Parameter} parameter The parameter to set\n * @throws {ModificationNotAllowedError} if property is locked for modification\n */\n setParameter(parameter) {\n this._modify();\n this._parameters.set(parameter.name, parameter);\n parameter.subscribe(() => this._notifySubscribers());\n }\n\n /**\n * Gets a parameter on this property by its name\n *\n * @param {string} parameterName Name of the parameter to get\n * @return {Parameter}\n */\n getParameter(parameterName) {\n return this._parameters.get(uc(parameterName));\n }\n\n /**\n * Gets an iterator over all available parameters\n */\n *getParametersIterator() {\n yield* this._parameters.values();\n }\n\n /**\n * Get first value of a parameter\n *\n * @param {string} parameterName Name of the parameter\n * @return {null | string}\n */\n getParameterFirstValue(parameterName) {\n const parameter = this.getParameter(parameterName);\n if (parameter instanceof Parameter) {\n if (parameter.isMultiValue()) {\n return parameter.value[0];\n } else {\n return parameter.value;\n }\n }\n return null;\n }\n\n /**\n * Returns whether a parameter exists on this property\n *\n * @param {string} parameterName Name of the parameter\n * @return {boolean}\n */\n hasParameter(parameterName) {\n return this._parameters.has(uc(parameterName));\n }\n\n /**\n * Deletes a parameter on this property\n *\n * @param {string} parameterName Name of the parameter\n * @throws {ModificationNotAllowedError} if property is locked for modification\n */\n deleteParameter(parameterName) {\n this._modify();\n this._parameters.delete(uc(parameterName));\n }\n\n /**\n * update a parameter if it exists,\n * create a new one if it doesn't\n *\n * @param {string} parameterName Name of the parameter\n * @param {string|Array|null} value Value to set\n * @throws {ModificationNotAllowedError} if property is locked for modification\n */\n updateParameterIfExist(parameterName, value) {\n this._modify();\n if (this.hasParameter(parameterName)) {\n const parameter = this.getParameter(parameterName);\n parameter.value = value;\n } else {\n const parameter = new Parameter(uc(parameterName), value);\n this.setParameter(parameter);\n }\n }\n\n /**\n * Returns whether or not the value is a multivalue\n *\n * @return {boolean}\n */\n isMultiValue() {\n return Array.isArray(this._value);\n }\n\n /**\n * Returns whether or not this valus is decorated\n *\n * @return {boolean}\n */\n isDecoratedValue() {\n if (this.isMultiValue()) {\n return this._value[0] instanceof AbstractValue;\n } else {\n return this._value instanceof AbstractValue;\n }\n }\n\n /**\n * Marks this parameter is immutable\n * locks it against further modification\n */\n lock() {\n super.lock();\n for (const parameter of this.getParametersIterator()) {\n parameter.lock();\n }\n if (this.isDecoratedValue()) {\n for (const value of this.getValueIterator()) {\n value.lock();\n }\n }\n }\n\n /**\n * Marks this parameter as mutable\n * allowing further modification\n */\n unlock() {\n super.unlock();\n for (const parameter of this.getParametersIterator()) {\n parameter.unlock();\n }\n if (this.isDecoratedValue()) {\n for (const value of this.getValueIterator()) {\n value.unlock();\n }\n }\n }\n\n /**\n * Creates a copy of this parameter\n *\n * @return {Property}\n */\n clone() {\n const parameters = [];\n for (const parameter of this.getParametersIterator()) {\n parameters.push(parameter.clone());\n }\n return new this.constructor(this.name, this._cloneValue(), parameters, this.root, this.parent);\n }\n\n /**\n * Copies the values of this property\n *\n * @return {string | number | AbstractValue | string[] | number[] | AbstractValue[] | null}\n * @protected\n */\n _cloneValue() {\n if (this.isDecoratedValue()) {\n if (this.isMultiValue()) {\n return this._value.map(val => val.clone());\n } else {\n return this._value.clone();\n }\n } else {\n if (this.isMultiValue()) {\n // only copy array values, don't copy array reference\n return this._value.slice();\n } else {\n return this._value;\n }\n }\n }\n\n /**\n * Sets parameters from the constructor\n *\n * @param {Parameter[] | [string][]} parameters Array of parameters to set\n * @private\n */\n _setParametersFromConstructor(parameters) {\n parameters.forEach(parameter => {\n if (!(parameter instanceof Parameter)) {\n parameter = new Parameter(parameter[0], parameter[1]);\n }\n this.setParameter(parameter);\n });\n }\n\n /**\n * Creates a new Component based on an ical object\n *\n * @param {ICAL.Property} icalProperty The ical.js property to initialise from\n * @param {CalendarComponent=} root The root of the calendar-document\n * @param {AbstractComponent=} parent The parent element of this property\n * @return {Property}\n */\n static fromICALJs(icalProperty, root = null, parent = null) {\n if (!(icalProperty instanceof ICAL.Property)) {\n throw new ExpectedICalJSError();\n }\n let value;\n if (icalProperty.isDecorated) {\n const constructor = getConstructorForICALType(icalProperty.getFirstValue().icaltype);\n if (icalProperty.isMultiValue) {\n value = icalProperty.getValues().map(val => constructor.fromICALJs(val));\n } else {\n value = constructor.fromICALJs(icalProperty.getFirstValue());\n }\n } else {\n if (icalProperty.isMultiValue) {\n value = icalProperty.getValues();\n } else {\n value = icalProperty.getFirstValue();\n }\n }\n const parameters = [];\n const paramNames = Object.keys(Object.assign({}, icalProperty.toJSON()[1]));\n paramNames.forEach(paramName => {\n // Timezone id is handled by DateTimeValue\n if (uc(paramName) === 'TZID') {\n return;\n }\n parameters.push([paramName, icalProperty.getParameter(paramName)]);\n });\n return new this(icalProperty.name, value, parameters, root, parent);\n }\n\n /**\n * Returns an ICAL.js property based on this Property\n *\n * @return {ICAL.Property}\n */\n toICALJs() {\n const icalProperty = createProperty(lc(this.name));\n if (this.isMultiValue()) {\n if (this.isDecoratedValue()) {\n icalProperty.setValues(this.value.map(val => val.toICALJs()));\n } else {\n icalProperty.setValues(this.value);\n }\n } else {\n if (this.isDecoratedValue()) {\n icalProperty.setValue(this.value.toICALJs());\n } else {\n icalProperty.setValue(this.value);\n }\n }\n for (const parameter of this.getParametersIterator()) {\n icalProperty.setParameter(lc(parameter.name), parameter.value);\n }\n const firstValue = this.getFirstValue();\n if (firstValue instanceof DateTimeValue && firstValue.timezoneId !== 'floating' && firstValue.timezoneId !== 'UTC' && !firstValue.isDate) {\n icalProperty.setParameter('tzid', firstValue.timezoneId);\n }\n return icalProperty;\n }\n\n /**\n * @inheritDoc\n */\n _modifyContent() {\n super._modifyContent();\n this._notifySubscribers();\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class AttachmentProperty\n * @classdesc This class represents an attachment property as defined in RFC 5545 Section 3.8.1.1\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.1\n */\nclass AttachmentProperty extends Property {\n /**\n * Gets the format-type of this attachment\n *\n * @return {string}\n */\n get formatType() {\n return this.getParameterFirstValue('FMTTYPE');\n }\n\n /**\n * Sets the format-type of this attachment\n *\n * @param {string} fmtType Mime-type of attachment\n */\n set formatType(fmtType) {\n this.updateParameterIfExist('FMTTYPE', fmtType);\n }\n\n /**\n * Gets the uri of this attachment\n *\n * @return {string | null}\n */\n get uri() {\n if (this._value instanceof BinaryValue) {\n return null;\n }\n return this._value;\n }\n\n /**\n * Sets the uri of this attachment\n *\n * @param {string} uri Link to attachment if applicable\n */\n set uri(uri) {\n this.value = uri;\n }\n\n /**\n * Gets the encoding of this attachment\n *\n * @return {string|null}\n */\n get encoding() {\n if (this._value instanceof BinaryValue) {\n return 'BASE64';\n }\n return null;\n }\n\n /**\n * Gets the data stored in this attachment\n *\n * @return {string | null}\n */\n get data() {\n if (this._value instanceof BinaryValue) {\n return this._value.value;\n }\n return null;\n }\n\n /**\n * Sets the data stored in this attachment\n *\n * @param {string} data The data of the attachment\n */\n set data(data) {\n if (this.value instanceof BinaryValue) {\n this.value.value = data;\n } else {\n this.value = BinaryValue.fromDecodedValue(data);\n }\n }\n\n /**\n * @inheritDoc\n */\n toICALJs() {\n const icalProperty = super.toICALJs();\n if (this._value instanceof BinaryValue && this.getParameterFirstValue('ENCODING') !== 'BASE64') {\n icalProperty.setParameter('ENCODING', 'BASE64');\n }\n return icalProperty;\n }\n\n /**\n * Creates a new AttachmentProperty based on data\n *\n * @param {string} data The data of the attachment\n * @param {string=} formatType The mime-type of the data\n * @return {AttachmentProperty}\n */\n static fromData(data, formatType = null) {\n const binaryValue = BinaryValue.fromDecodedValue(data);\n const property = new AttachmentProperty('ATTACH', binaryValue);\n if (formatType) {\n property.formatType = formatType;\n }\n return property;\n }\n\n /**\n * Creates a new AttachmentProperty based on a link\n *\n * @param {string} uri The URI for the attachment\n * @param {string=} formatType The mime-type of the uri\n * @return {AttachmentProperty}\n */\n static fromLink(uri, formatType = null) {\n const property = new AttachmentProperty('ATTACH', uri);\n if (formatType) {\n property.formatType = formatType;\n }\n return property;\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class AttendeeProperty\n * @classdesc This class represents an attendee property as defined in RFC 5545 Section 3.8.4.1\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.1\n */\nclass AttendeeProperty extends Property {\n /**\n * Returns the role of the attendee.\n *\n * @return {string}\n */\n get role() {\n const allowed = ['CHAIR', 'REQ-PARTICIPANT', 'OPT-PARTICIPANT', 'NON-PARTICIPANT'];\n const defaultValue = 'REQ-PARTICIPANT';\n if (this.hasParameter('ROLE')) {\n const value = this.getParameterFirstValue('ROLE');\n if (allowed.includes(value)) {\n return value;\n }\n }\n return defaultValue;\n }\n\n /**\n * Sets new role of the attendee\n *\n * @param {string} role The role of the attendee (e.g. CHAIR, REQ-PARTICIPANT)\n */\n set role(role) {\n this.updateParameterIfExist('ROLE', role);\n }\n\n /**\n * Returns the calendar-user-type of an attendee\n *\n * @return {string}\n */\n get userType() {\n const allowed = ['INDIVIDUAL', 'GROUP', 'RESOURCE', 'ROOM', 'UNKNOWN'];\n if (!this.hasParameter('CUTYPE')) {\n return 'INDIVIDUAL';\n } else {\n const value = this.getParameterFirstValue('CUTYPE');\n if (allowed.includes(value)) {\n return value;\n }\n return 'UNKNOWN';\n }\n }\n\n /**\n * Sets new calendar-user-type of attendee\n *\n * @param {string} userType The type of user (e.g. INDIVIDUAL, GROUP)\n */\n set userType(userType) {\n this.updateParameterIfExist('CUTYPE', userType);\n }\n\n /**\n * Returns the \"Répondez s'il vous plaît\" value for attendee\n *\n * @return {boolean}\n */\n get rsvp() {\n if (!this.hasParameter('RSVP')) {\n return false;\n } else {\n const value = this.getParameterFirstValue('RSVP');\n return uc(value) === 'TRUE';\n }\n }\n\n /**\n * Updates the \"Répondez s'il vous plaît\" value for attendee\n *\n * @param {boolean} rsvp Whether or not to send out an invitation\n */\n set rsvp(rsvp) {\n this.updateParameterIfExist('RSVP', rsvp ? 'TRUE' : 'FALSE');\n }\n\n /**\n * Returns the common-name of the attendee\n *\n * @return {string|null}\n */\n get commonName() {\n return this.getParameterFirstValue('CN');\n }\n\n /**\n * Sets a new common-name of the attendee\n *\n * @param {string} commonName The display name of the attendee\n */\n set commonName(commonName) {\n this.updateParameterIfExist('CN', commonName);\n }\n\n /**\n * Returns the participation-status of the attendee\n *\n * @return {string}\n */\n get participationStatus() {\n let vobjectType;\n if (this.parent) {\n vobjectType = this.parent.name;\n } else {\n // let's assume we are inside an event\n // if we don't know better\n vobjectType = 'VEVENT';\n }\n const allowed = {\n VEVENT: ['NEEDS-ACTION', 'ACCEPTED', 'DECLINED', 'TENTATIVE', 'DELEGATED'],\n VJOURNAL: ['NEEDS-ACTION', 'ACCEPTED', 'DECLINED'],\n VTODO: ['NEEDS-ACTION', 'ACCEPTED', 'DECLINED', 'TENTATIVE', 'DELEGATED', 'COMPLETED', 'IN-PROCESS']\n };\n if (!this.hasParameter('PARTSTAT')) {\n return 'NEEDS-ACTION';\n } else {\n const value = this.getParameterFirstValue('PARTSTAT');\n if (allowed[vobjectType].includes(value)) {\n return value;\n }\n return 'NEEDS-ACTION';\n }\n }\n\n /**\n * Sets a new participation-status of the attendee\n *\n * @param {string} participationStatus The participation status (e.g. ACCEPTED, DECLINED)\n */\n set participationStatus(participationStatus) {\n this.updateParameterIfExist('PARTSTAT', participationStatus);\n }\n\n /**\n * Gets this attendee's language\n *\n * @return {string}\n */\n get language() {\n return this.getParameterFirstValue('LANGUAGE');\n }\n\n /**\n * Sets this attendee's language\n * This can be used to influence the language of the invitation email\n *\n * @param {string} language The preferred language of the attendee\n */\n set language(language) {\n this.updateParameterIfExist('LANGUAGE', language);\n }\n\n /**\n * Gets the email of the attendee\n *\n * @return {string}\n */\n get email() {\n return this.value;\n }\n\n /**\n * Sets the email address of the attendee\n *\n * @param {string} email The e-email address of the attendee\n */\n set email(email) {\n this.value = startStringWith(email, 'mailto:');\n }\n\n /**\n * Is this attendee the organizer?\n *\n * @return {boolean}\n */\n isOrganizer() {\n return this._name === 'ORGANIZER';\n }\n\n /**\n * Creates a new AttendeeProperty from name and email\n *\n * @param {string} name The display name\n * @param {string} email The email address\n * @param {boolean=} isOrganizer Whether this is the organizer or an attendee\n * @return {AttendeeProperty}\n */\n static fromNameAndEMail(name, email, isOrganizer = false) {\n const propertyName = isOrganizer ? 'ORGANIZER' : 'ATTENDEE';\n email = startStringWith(email, 'mailto:');\n return new AttendeeProperty(propertyName, email, [['CN', name]]);\n }\n\n /**\n * Creates a new AttendeeProperty from name, email, role, userType and rsvp\n *\n * @param {string} name The display name\n * @param {string} email The email address\n * @param {string} role The role\n * @param {string} userType The type of user\n * @param {boolean} rsvp Whether to send out an invitation\n * @param {boolean=} isOrganizer Whether this is the organizer or an attendee\n * @return {AttendeeProperty}\n */\n static fromNameEMailRoleUserTypeAndRSVP(name, email, role, userType, rsvp, isOrganizer = false) {\n const propertyName = isOrganizer ? 'ORGANIZER' : 'ATTENDEE';\n email = startStringWith(email, 'mailto:');\n return new AttendeeProperty(propertyName, email, [['CN', name], ['ROLE', role], ['CUTYPE', userType], ['RSVP', rsvp ? 'TRUE' : 'FALSE']]);\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\nICAL.design.icalendar.property.conference = {\n defaultType: 'uri'\n};\nICAL.design.icalendar.param.feature = {\n valueType: 'cal-address',\n multiValue: ','\n};\n\n/**\n * @class ConferenceProperty\n *\n * @url https://tools.ietf.org/html/rfc7986#section-5.11\n */\nclass ConferenceProperty extends Property {\n /**\n * Iterator that iterates over all supported features\n * of the conference system\n */\n *getFeatureIterator() {\n if (!this.hasParameter('FEATURE')) {\n return;\n }\n const parameter = this.getParameter('FEATURE');\n yield* parameter.getValueIterator();\n }\n\n /**\n * Lists all supported features of the conference system\n *\n * @return {string[]}\n */\n listAllFeatures() {\n if (!this.hasParameter('FEATURE')) {\n return [];\n }\n return this.getParameter('FEATURE').value.slice();\n }\n\n /**\n * Adds a supported feature to the conference system\n *\n * @param {string} featureToAdd Feature to add\n */\n addFeature(featureToAdd) {\n this._modify();\n if (!this.hasParameter('FEATURE')) {\n this.updateParameterIfExist('FEATURE', [featureToAdd]);\n } else {\n if (this.hasFeature(featureToAdd)) {\n return;\n }\n const parameter = this.getParameter('FEATURE');\n parameter.value.push(featureToAdd);\n }\n }\n\n /**\n * Removes a supported feature\n *\n * @param {string} feature The feature to remove\n */\n removeFeature(feature) {\n this._modify();\n if (!this.hasFeature(feature)) {\n return;\n }\n const parameter = this.getParameter('FEATURE');\n const index = parameter.value.indexOf(feature);\n parameter.value.splice(index, 1);\n }\n\n /**\n * Removes all supported features from this conference system\n */\n clearAllFeatures() {\n this.deleteParameter('FEATURE');\n }\n\n /**\n * Check if this conference system supports a feature\n *\n * @param {string} feature The feature to check\n * @return {boolean}\n */\n hasFeature(feature) {\n if (!this.hasParameter('FEATURE')) {\n return false;\n }\n const parameter = this.getParameter('FEATURE');\n if (!Array.isArray(parameter.value)) {\n return false;\n }\n return parameter.value.includes(feature);\n }\n\n /**\n * Gets label for the conference system\n *\n * @return {string}\n */\n get label() {\n return this.getParameterFirstValue('LABEL');\n }\n\n /**\n * Updates the label for the conference system\n *\n * @param {string} label The label to set\n */\n set label(label) {\n this.updateParameterIfExist('LABEL', label);\n }\n\n /**\n * Gets the uri for this conference system\n */\n get uri() {\n return this.value;\n }\n\n /**\n * Sets the uri for this conference system\n *\n * @param {string} uri The URI to set\n */\n set uri(uri) {\n this.value = uri;\n }\n\n /**\n * @inheritDoc\n */\n toICALJs() {\n const icalProperty = super.toICALJs();\n icalProperty.setParameter('value', 'URI');\n return icalProperty;\n }\n\n /**\n * Creates a new ConferenceProperty based on URI, label and features\n *\n * @param {string} uri URI of the Conference\n * @param {string=} label Label of the conference\n * @param {string[]=} features Features of the conference\n * @return {ConferenceProperty}\n */\n static fromURILabelAndFeatures(uri, label = null, features = null) {\n const property = new ConferenceProperty('CONFERENCE', uri);\n if (label) {\n property.updateParameterIfExist('label', label);\n }\n if (features) {\n property.updateParameterIfExist('feature', features);\n }\n return property;\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class FreeBusyProperty\n * @classdesc\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.2.6\n */\nclass FreeBusyProperty extends Property {\n /**\n * Gets the type of this FreeBusyProperty\n *\n * @return {string}\n */\n get type() {\n const allowed = ['FREE', 'BUSY', 'BUSY-UNAVAILABLE', 'BUSY-TENTATIVE'];\n const defaultValue = 'BUSY';\n if (this.hasParameter('FBTYPE')) {\n const value = this.getParameterFirstValue('FBTYPE');\n if (allowed.includes(value)) {\n return value;\n }\n }\n return defaultValue;\n }\n\n /**\n * Sets the type of this FreeBusyProperty\n *\n * @param {string} type The type of information (e.g. FREE, BUSY, etc.)\n */\n set type(type) {\n this.updateParameterIfExist('FBTYPE', type);\n }\n\n /**\n * Creates a new FreeBusyProperty based on period and type\n *\n * @param {PeriodValue} period The period for FreeBusy Information\n * @param {string} type The type of the period\n * @return {FreeBusyProperty}\n */\n static fromPeriodAndType(period, type) {\n return new FreeBusyProperty('FREEBUSY', period, [['fbtype', type]]);\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class GeoProperty\n * @classdesc\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.6\n */\nclass GeoProperty extends Property {\n /**\n * @inheritDoc\n */\n constructor(name, value = [0, 0], parameters = [], root = null, parent = null) {\n super(name, value, parameters, root, parent);\n }\n\n /**\n * Gets the latitude stored in this property\n *\n * @return {number}\n */\n get latitude() {\n return this._value[0];\n }\n\n /**\n * Sets the latitude stored in this property\n *\n * @param {string | number} lat Latitude\n */\n set latitude(lat) {\n this._modifyContent();\n if (typeof lat !== 'number') {\n lat = parseFloat(lat);\n }\n this._value[0] = lat;\n }\n\n /**\n * Gets the longitude stored in this property\n */\n get longitude() {\n return this._value[1];\n }\n\n /**\n * Sets the longitude stored in this property\n *\n * @param {string | number} long Longitude\n */\n set longitude(long) {\n this._modifyContent();\n if (typeof long !== 'number') {\n long = parseFloat(long);\n }\n this._value[1] = long;\n }\n\n /**\n * @inheritDoc\n *\n * TODO: this is an ugly hack right now.\n * As soon as the value is an array, we assume it's multivalue\n * but GEO is a (the one and only besides request-status) structured value and is also\n * stored inside an array.\n *\n * Calling icalProperty.setValues will throw an error\n */\n toICALJs() {\n const icalProperty = createProperty(lc(this.name));\n icalProperty.setValue(this.value);\n this._parameters.forEach(parameter => {\n icalProperty.setParameter(lc(parameter.name), parameter.value);\n });\n return icalProperty;\n }\n\n /**\n * Creates a new GeoProperty based on a latitude and a longitude value\n *\n * @param {number} lat Latitude\n * @param {number} long Longitude\n * @return {GeoProperty}\n */\n static fromPosition(lat, long) {\n return new GeoProperty('GEO', [lat, long]);\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class ImageProperty\n *\n * @url https://tools.ietf.org/html/rfc7986#section-5.10\n */\nclass ImageProperty extends AttachmentProperty {\n /**\n * Gets the image-type\n */\n get display() {\n return this.getParameterFirstValue('DISPLAY') || 'BADGE';\n }\n\n /**\n * Gets the image-type\n *\n * @param {string} display The display-type image is optimized for\n */\n set display(display) {\n this.updateParameterIfExist('DISPLAY', display);\n }\n\n /**\n * Creates a new ImageProperty based on data\n *\n * @param {string} data The data of the image\n * @param {string=} display The display-type it's optimized for\n * @param {string=} formatType The mime-type of the image\n * @return {ImageProperty}\n */\n static fromData(data, display = null, formatType = null) {\n const binaryValue = BinaryValue.fromDecodedValue(data);\n const property = new ImageProperty('IMAGE', binaryValue);\n if (display) {\n property.display = display;\n }\n if (formatType) {\n property.formatType = formatType;\n }\n return property;\n }\n\n /**\n * Creates a new ImageProperty based on a link\n *\n * @param {string} uri The uri of the image\n * @param {string=} display The display-type it's optimized for\n * @param {string=} formatType The mime-type of the image\n * @return {ImageProperty}\n */\n static fromLink(uri, display = null, formatType = null) {\n const property = new ImageProperty('IMAGE', uri);\n if (display) {\n property.display = display;\n }\n if (formatType) {\n property.formatType = formatType;\n }\n return property;\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class RelationProperty\n * @classdesc\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.5\n */\nclass RelationProperty extends Property {\n /**\n * Get's the relation-type of this related-to property\n *\n * @return {string}\n */\n get relationType() {\n const allowed = ['PARENT', 'CHILD', 'SIBLING'];\n const defaultValue = 'PARENT';\n if (!this.hasParameter('RELTYPE')) {\n return defaultValue;\n } else {\n const value = this.getParameterFirstValue('RELTYPE');\n if (allowed.includes(value)) {\n return value;\n }\n return defaultValue;\n }\n }\n\n /**\n * Sets a new relation type\n *\n * @param {string} relationType The type of relation (e.g. SIBLING, PARENT, etc.)\n */\n set relationType(relationType) {\n this.updateParameterIfExist('RELTYPE', relationType);\n }\n\n /**\n * Gets Id of related object\n *\n * @return {string}\n */\n get relatedId() {\n return this.value;\n }\n\n /**\n * Sets a new related id\n *\n * @param {string} relatedId The Id of the related document\n */\n set relatedId(relatedId) {\n this.value = relatedId;\n }\n\n /**\n * Creates a new RELATED-TO property based on a relation-type and id\n *\n * @param {string} relType The type of the relation (e.g. SIBLING, CHILD)\n * @param {string} relId The Id of the related document\n * @return {RelationProperty}\n */\n static fromRelTypeAndId(relType, relId) {\n return new RelationProperty('RELATED-TO', relId, [['RELTYPE', relType]]);\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class RequestStatusProperty\n * @classdesc\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.8.3\n */\nclass RequestStatusProperty extends Property {\n /**\n * @inheritDoc\n */\n constructor(name, value = ['1', 'Pending'], parameters = [], root = null, parent = null) {\n super(name, value, parameters, root, parent);\n }\n\n /**\n * Gets the status code of the request status\n *\n * @return {number}\n */\n get statusCode() {\n return parseFloat(this.value[0]);\n }\n\n /**\n * Sets the status code of the request status\n *\n * @param {number} statusCode The statusCode of the request\n */\n set statusCode(statusCode) {\n this._modifyContent();\n this.value[0] = statusCode.toString();\n\n // This makes sure 2.0 is actually saved as 2.0, not 2\n if (statusCode === Math.floor(statusCode)) {\n this.value[0] += '.0';\n }\n }\n\n /**\n * Gets the status message of the request status\n *\n * @return {string}\n */\n get statusMessage() {\n return this.value[1];\n }\n\n /**\n * Sets the status message of the request status\n *\n * @param {string} statusMessage The message of the request\n */\n set statusMessage(statusMessage) {\n this._modifyContent();\n this.value[1] = statusMessage;\n }\n\n /**\n * Gets the exception data of the request status if available\n *\n * @return {null | string}\n */\n get exceptionData() {\n if (!this.value[2]) {\n return null;\n }\n return this.value[2];\n }\n\n /**\n * Sets the exception dtat of the request status\n *\n * @param {string} exceptionData The additional exception-data\n */\n set exceptionData(exceptionData) {\n this._modifyContent();\n this.value[2] = exceptionData;\n }\n\n /**\n * Check if request is pending\n *\n * @return {boolean}\n */\n isPending() {\n return this.statusCode >= 1 && this.statusCode < 2;\n }\n\n /**\n * Check if request was successful\n *\n * @return {boolean}\n */\n isSuccessful() {\n return this.statusCode >= 2 && this.statusCode < 3;\n }\n\n /**\n * Check if a client error occurred\n *\n * @return {boolean}\n */\n isClientError() {\n return this.statusCode >= 3 && this.statusCode < 4;\n }\n\n /**\n * Check if a scheduling error occurred\n *\n * @return {boolean}\n */\n isSchedulingError() {\n return this.statusCode >= 4 && this.statusCode < 5;\n }\n\n /**\n * @inheritDoc\n *\n * TODO: this is an ugly hack right now.\n * As soon as the value is an array, we assume it's multivalue\n * but REQUEST-STATUS is a (the one and only besides GEO) structured value and is also\n * stored inside an array.\n *\n * Calling icalProperty.setValues will throw an error\n */\n toICALJs() {\n const icalProperty = createProperty(lc(this.name));\n icalProperty.setValue(this.value);\n this._parameters.forEach(parameter => {\n icalProperty.setParameter(lc(parameter.name), parameter.value);\n });\n return icalProperty;\n }\n\n /**\n * Creates a new RequestStatusProperty from a code and a status message\n *\n * @param {number} code The status-code of the request\n * @param {string} message The message of the request\n * @return {RequestStatusProperty}\n */\n static fromCodeAndMessage(code, message) {\n return new RequestStatusProperty('REQUEST-STATUS', [code.toString(), message]);\n }\n}\n\n// All request statuses registered in RFC 5546\nRequestStatusProperty.SUCCESS = [2.0, 'Success'];\nRequestStatusProperty.SUCCESS_FALLBACK = [2.1, 'Success, but fallback taken on one or more property values.'];\nRequestStatusProperty.SUCCESS_PROP_IGNORED = [2.2, 'Success; invalid property ignored.'];\nRequestStatusProperty.SUCCESS_PROPPARAM_IGNORED = [2.3, 'Success; invalid property parameter ignored.'];\nRequestStatusProperty.SUCCESS_NONSTANDARD_PROP_IGNORED = [2.4, 'Success; unknown, non-standard property ignored.'];\nRequestStatusProperty.SUCCESS_NONSTANDARD_PROPPARAM_IGNORED = [2.5, 'Success; unknown, non-standard property value ignored.'];\nRequestStatusProperty.SUCCESS_COMP_IGNORED = [2.6, 'Success; invalid calendar component ignored.'];\nRequestStatusProperty.SUCCESS_FORWARDED = [2.7, 'Success; request forwarded to Calendar User.'];\nRequestStatusProperty.SUCCESS_REPEATING_IGNORED = [2.8, 'Success; repeating event ignored. Scheduled as a single component.'];\nRequestStatusProperty.SUCCESS_TRUNCATED_END = [2.9, 'Success; truncated end date time to date boundary.'];\nRequestStatusProperty.SUCCESS_REPEATING_VTODO_IGNORED = [2.10, 'Success; repeating VTODO ignored. Scheduled as a single VTODO.'];\nRequestStatusProperty.SUCCESS_UNBOUND_RRULE_CLIPPED = [2.11, 'Success; unbounded RRULE clipped at some finite number of instances.'];\nRequestStatusProperty.CLIENT_INVALID_PROPNAME = [3.0, 'Invalid property name.'];\nRequestStatusProperty.CLIENT_INVALID_PROPVALUE = [3.1, 'Invalid property value.'];\nRequestStatusProperty.CLIENT_INVALID_PROPPARAM = [3.2, 'Invalid property parameter.'];\nRequestStatusProperty.CLIENT_INVALID_PROPPARAMVALUE = [3.3, 'Invalid property parameter value.'];\nRequestStatusProperty.CLIENT_INVALUD_CALENDAR_COMP_SEQ = [3.4, 'Invalid calendar component sequence.'];\nRequestStatusProperty.CLIENT_INVALID_DATE_TIME = [3.5, 'Invalid date or time.'];\nRequestStatusProperty.CLIENT_INVALID_RRULE = [3.6, 'Invalid rule.'];\nRequestStatusProperty.CLIENT_INVALID_CU = [3.7, 'Invalid Calendar User.'];\nRequestStatusProperty.CLIENT_NO_AUTHORITY = [3.8, 'No authority.'];\nRequestStatusProperty.CLIENT_UNSUPPORTED_VERSION = [3.9, 'Unsupported version.'];\nRequestStatusProperty.CLIENT_TOO_LARGE = [3.10, 'Request entity too large.'];\nRequestStatusProperty.CLIENT_REQUIRED_COMP_OR_PROP_MISSING = [3.11, 'Required component or property missing.'];\nRequestStatusProperty.CLIENT_UNKNOWN_COMP_OR_PROP = [3.12, 'Unknown component or property found.'];\nRequestStatusProperty.CLIENT_UNSUPPORTED_COMP_OR_PROP = [3.13, 'Unsupported component or property found.'];\nRequestStatusProperty.CLIENT_UNSUPPORTED_CAPABILITY = [3.14, 'Unsupported capability.'];\nRequestStatusProperty.SCHEDULING_EVENT_CONFLICT = [4.0, 'Event conflict. Date/time is busy.'];\nRequestStatusProperty.SERVER_REQUEST_NOT_SUPPORTED = [5.0, 'Request not supported.'];\nRequestStatusProperty.SERVER_SERVICE_UNAVAILABLE = [5.1, 'Service unavailable.'];\nRequestStatusProperty.SERVER_INVALID_CALENDAR_SERVICE = [5.2, 'Invalid calendar service.'];\nRequestStatusProperty.SERVER_NO_SCHEDULING_FOR_USER = [5.3, 'No scheduling support for user.'];\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class TextProperty\n * @classdesc\n */\nclass TextProperty extends Property {\n /**\n * Gets the alternate text\n *\n * @return {string}\n */\n get alternateText() {\n return this.getParameterFirstValue('ALTREP');\n }\n\n /**\n * Sets the alternate text\n *\n * @param {string} altRep The alternative text\n */\n set alternateText(altRep) {\n this.updateParameterIfExist('ALTREP', altRep);\n }\n\n /**\n * Gets language of this property\n *\n * @return {string}\n */\n get language() {\n return this.getParameterFirstValue('LANGUAGE');\n }\n\n /**\n * Sets language of this property\n *\n * @param {string} language The language of the text\n */\n set language(language) {\n this.updateParameterIfExist('LANGUAGE', language);\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class TriggerProperty\n * @classdesc\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.6.3\n */\nclass TriggerProperty extends Property {\n /**\n * Gets the related parameter\n *\n * @return {string}\n */\n get related() {\n if (!this.hasParameter('RELATED')) {\n return 'START';\n }\n return this.getParameterFirstValue('RELATED');\n }\n\n /**\n * Sets the related parameter\n *\n * @param {string} related Either START or END\n */\n set related(related) {\n this.updateParameterIfExist('RELATED', related);\n }\n\n /**\n * Gets the value of this trigger\n * (If you override the setter, you also have to override the getter or\n * it will simply be undefined)\n *\n * @return {string | number | AbstractValue | string[] | number[] | AbstractValue[]}\n */\n get value() {\n return super.value;\n }\n\n /**\n * Set the value of this trigger\n *\n * @param {DurationValue|DateTimeValue} value The time of trigger\n */\n set value(value) {\n super.value = value;\n\n // If it's not a duration, remove related parameter\n if (value instanceof DateTimeValue) {\n this.deleteParameter('RELATED');\n super.value = value.getInUTC();\n }\n }\n\n /**\n * Gets whether this alarm trigger is relative\n *\n * @return {boolean}\n */\n isRelative() {\n return this.getFirstValue() instanceof DurationValue;\n }\n\n /**\n * Creates a new absolute trigger\n *\n * @param {DateTimeValue} alarmTime Time to create Trigger from\n * @return {TriggerProperty}\n */\n static fromAbsolute(alarmTime) {\n return new TriggerProperty('TRIGGER', alarmTime);\n }\n\n /**\n * Creates a new relative trigger\n *\n * @param {DurationValue} alarmOffset Duration to create Trigger from\n * @param {boolean=} relatedToStart Related to Start or end?\n * @return {TriggerProperty}\n */\n static fromRelativeAndRelated(alarmOffset, relatedToStart = true) {\n return new TriggerProperty('TRIGGER', alarmOffset, [['RELATED', relatedToStart ? 'START' : 'END']]);\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @author Richard Steinmetz \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n *\n * @param {string} propName Name of the prop to get constructor for\n * @return {AttendeeProperty|GeoProperty|ConferenceProperty|Property|AttachmentProperty|ImageProperty|RelationProperty|RequestStatusProperty}\n */\nfunction getConstructorForPropertyName(propName) {\n switch (uc(propName)) {\n case 'ATTACH':\n return AttachmentProperty;\n case 'ATTENDEE':\n case 'ORGANIZER':\n return AttendeeProperty;\n case 'CONFERENCE':\n return ConferenceProperty;\n case 'FREEBUSY':\n return FreeBusyProperty;\n case 'GEO':\n return GeoProperty;\n case 'IMAGE':\n return ImageProperty;\n case 'RELATED-TO':\n return RelationProperty;\n case 'REQUEST-STATUS':\n return RequestStatusProperty;\n case 'TRIGGER':\n return TriggerProperty;\n case 'COMMENT':\n case 'CONTACT':\n case 'DESCRIPTION':\n case 'LOCATION':\n case 'SUMMARY':\n return TextProperty;\n default:\n return Property;\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class AbstractComponent\n */\nclass AbstractComponent extends observerTrait(lockableTrait(class {})) {\n /**\n * Constructor\n *\n * @param {string} name - Name of component\n * @param {Property[]} properties - Array of properties stored inside the component\n * @param {AbstractComponent[]} components - Array of subcomponents stored inside this component\n * @param {CalendarComponent|null} root - The root of this calendar document\n * @param {AbstractComponent|null} parent - The parent component of this element\n */\n constructor(name, properties = [], components = [], root = null, parent = null) {\n super();\n\n /**\n * Name of component\n *\n * @type {string}\n * @private\n */\n this._name = uc(name);\n\n /**\n * All properties in this component\n *\n * @type {Map}\n * @private\n */\n this._properties = new Map();\n\n /**\n * All subcomponents of this component\n *\n * @type {Map}\n * @private\n */\n this._components = new Map();\n\n /**\n * Root node of ical document\n *\n * @type {CalendarComponent|null}\n * @private\n */\n this._root = root;\n\n /**\n * Parent node\n *\n * @type {AbstractComponent|null}\n * @private\n */\n this._parent = parent;\n this._setPropertiesFromConstructor(properties);\n this._setComponentsFromConstructor(components);\n }\n\n /**\n * Get the component's name\n *\n * @return {string}\n */\n get name() {\n return this._name;\n }\n\n /**\n * Gets the root of this calendar-document\n *\n * @return {CalendarComponent}\n */\n get root() {\n return this._root;\n }\n\n /**\n * Sets the root of this calendar-document\n *\n * @param {CalendarComponent} root The new root element\n */\n set root(root) {\n this._modify();\n this._root = root;\n for (const property of this.getPropertyIterator()) {\n property.root = root;\n }\n for (const component of this.getComponentIterator()) {\n component.root = root;\n }\n }\n\n /**\n * Gets the parent component\n *\n * @return {AbstractComponent}\n */\n get parent() {\n return this._parent;\n }\n\n /**\n * Sets the parent component\n *\n * @param {AbstractComponent} parent The new parent element\n */\n set parent(parent) {\n this._modify();\n this._parent = parent;\n }\n\n /**\n * Gets the first property that matches the given propertyName\n *\n * @param {string} propertyName Name of the property to get\n * @return {Property|null}\n */\n getFirstProperty(propertyName) {\n if (!this._properties.has(uc(propertyName))) {\n return null;\n }\n return this._properties.get(uc(propertyName))[0];\n }\n\n /**\n * Gets the first value of the first property matching that name\n *\n * @param {string} propertyName Name of the property to get first value of\n * @return {string | number | AbstractValue | string[] | number[] | AbstractValue[] | null}\n */\n getFirstPropertyFirstValue(propertyName) {\n const property = this.getFirstProperty(propertyName);\n if (!property) {\n return null;\n }\n return property.getFirstValue();\n }\n\n /**\n * update a property if it exists,\n * create a new one if it doesn't\n *\n * @param {string} propertyName Name of the property to update / create\n * @param {string | number | AbstractValue | string[] | number[] | AbstractValue[] | null} value The value to set\n */\n updatePropertyWithValue(propertyName, value) {\n this._modify();\n const property = this.getFirstProperty(propertyName);\n if (property) {\n property.value = value;\n } else {\n const constructor = getConstructorForPropertyName(propertyName);\n const newProperty = new constructor(propertyName, value, [], this, this.root);\n this.addProperty(newProperty);\n }\n }\n\n /**\n * Returns iterator for all properties of a given propertyName\n * or if no propertyName was given over all available properties\n *\n * @param {string=} propertyName Name of the property to get an iterator for\n */\n *getPropertyIterator(propertyName = null) {\n if (propertyName) {\n if (!this.hasProperty(propertyName)) {\n return;\n }\n\n // this._properties.get() returns an array\n // [Symbol.iterator]() creates an iterator from that array\n yield* this._properties.get(uc(propertyName)).slice()[Symbol.iterator]();\n } else {\n for (const key of this._properties.keys()) {\n yield* this.getPropertyIterator(key);\n }\n }\n }\n\n /**\n * Get all properties by name that match the given LANG parameter\n *\n * @param {string} propertyName The name of the property\n * @param {string | null} lang The lang to query\n * @private\n */\n *_getAllOfPropertyByLang(propertyName, lang) {\n for (const property of this.getPropertyIterator(propertyName)) {\n // getParameterFirstValue will return null if language not set, so no language parameter will match lang=null\n if (property.getParameterFirstValue('LANGUAGE') === lang) {\n yield property;\n }\n }\n }\n\n /**\n * Get the first property by name that matches the given LANG parameter\n *\n * @param {string} propertyName The name of the property\n * @param {string | null} lang The lang to query\n * @return {Property|null}\n * @private\n */\n _getFirstOfPropertyByLang(propertyName, lang) {\n const iterator = this._getAllOfPropertyByLang(propertyName, lang);\n return iterator.next().value || null;\n }\n\n /**\n * Adds a property\n *\n * @param {Property} property The property to add\n * @return {boolean}\n */\n addProperty(property) {\n this._modify();\n property.root = this.root;\n property.parent = this;\n if (this._properties.has(property.name)) {\n const arr = this._properties.get(property.name);\n if (arr.indexOf(property) !== -1) {\n // If the property is already part of this component,\n // return false to indicate an error\n return false;\n }\n arr.push(property);\n } else {\n this._properties.set(property.name, [property]);\n }\n property.subscribe(() => this._notifySubscribers());\n return true;\n }\n\n /**\n * Checks if this component has a property of the given name\n *\n * @param {string} propertyName The name of the property\n * @return {boolean}\n */\n hasProperty(propertyName) {\n return this._properties.has(uc(propertyName));\n }\n\n /**\n * Removes the given property from this component\n *\n * @param {Property} property The property to delete\n * @return {boolean}\n */\n deleteProperty(property) {\n this._modify();\n if (!this._properties.has(property.name)) {\n return false;\n }\n const arr = this._properties.get(property.name);\n const index = arr.indexOf(property);\n if (index === -1) {\n return false;\n }\n if (index !== -1 && arr.length === 1) {\n // If this is the last property of the given name,\n // remove the entire array from _properties\n // This is required for hasProperty to work properly\n this._properties.delete(property.name);\n } else {\n arr.splice(index, 1);\n }\n return true;\n }\n\n /**\n * Removes all properties of a given name\n *\n * @param {string} propertyName The name of the property\n * @return {boolean}\n */\n deleteAllProperties(propertyName) {\n this._modify();\n return this._properties.delete(uc(propertyName));\n }\n\n /**\n * Gets the first component of a given name\n *\n * @param {string} componentName The name of the component\n * @return {AbstractComponent|null}\n */\n getFirstComponent(componentName) {\n if (!this.hasComponent(componentName)) {\n return null;\n }\n return this._components.get(uc(componentName))[0];\n }\n\n /**\n * Returns iterator for all components of a given componentName\n * or if no componentName was given over all available components\n *\n * @param {string=} componentName The name of the component\n */\n *getComponentIterator(componentName) {\n if (componentName) {\n if (!this.hasComponent(componentName)) {\n return;\n }\n\n // this._components.get() returns an array\n // [Symbol.iterator]() creates an iterator from that array\n yield* this._components.get(uc(componentName)).slice()[Symbol.iterator]();\n } else {\n for (const key of this._components.keys()) {\n yield* this.getComponentIterator(key);\n }\n }\n }\n\n /**\n * Adds a new component to this component\n *\n * @param {AbstractComponent} component The component to add\n * @return {boolean}\n */\n addComponent(component) {\n this._modify();\n component.root = this.root;\n component.parent = this;\n if (this._components.has(component.name)) {\n const arr = this._components.get(component.name);\n if (arr.indexOf(component) !== -1) {\n // If the property is already part of this component,\n // return false to indicate an error\n return false;\n }\n arr.push(component);\n } else {\n this._components.set(component.name, [component]);\n }\n component.subscribe(() => this._notifySubscribers());\n return true;\n }\n\n /**\n * Checks if this component has a component of the given name\n *\n * @param {string} componentName The name of the component\n * @return {boolean}\n */\n hasComponent(componentName) {\n return this._components.has(uc(componentName));\n }\n\n /**\n * Removes the given component from this component\n *\n * @param {AbstractComponent} component The component to delete\n * @return {boolean}\n */\n deleteComponent(component) {\n this._modify();\n if (!this._components.has(component.name)) {\n return false;\n }\n const arr = this._components.get(component.name);\n const index = arr.indexOf(component);\n if (index === -1) {\n return false;\n }\n if (index !== -1 && arr.length === 1) {\n // If this is the last component of the given name,\n // remove the entire array from _components\n // This is required for hasComponent to work properly\n this._components.delete(component.name);\n } else {\n arr.splice(index, 1);\n }\n return true;\n }\n\n /**\n * Removes all components of a given name\n *\n * @param {string} componentName The name of the component\n * @return {boolean}\n */\n deleteAllComponents(componentName) {\n this._modify();\n return this._components.delete(uc(componentName));\n }\n\n /**\n * Marks this parameter is immutable\n * locks it against further modification\n */\n lock() {\n super.lock();\n for (const property of this.getPropertyIterator()) {\n property.lock();\n }\n for (const component of this.getComponentIterator()) {\n component.lock();\n }\n }\n\n /**\n * Marks this parameter as mutable\n * allowing further modification\n */\n unlock() {\n super.unlock();\n for (const property of this.getPropertyIterator()) {\n property.unlock();\n }\n for (const component of this.getComponentIterator()) {\n component.unlock();\n }\n }\n\n /**\n * Creates a copy of this parameter\n *\n * @return {AbstractComponent}\n */\n clone() {\n const properties = [];\n for (const property of this.getPropertyIterator()) {\n properties.push(property.clone());\n }\n const components = [];\n for (const component of this.getComponentIterator()) {\n components.push(component.clone());\n }\n return new this.constructor(this.name, properties, components, this.root, this.parent);\n }\n\n /**\n * Adds properties from constructor to this._properties\n *\n * @param {Property[]} properties Array of properties\n * @private\n */\n _setPropertiesFromConstructor(properties) {\n for (let property of properties) {\n if (Array.isArray(property)) {\n const constructor = getConstructorForPropertyName(property[0]);\n property = new constructor(property[0], property[1]);\n }\n this.addProperty(property);\n }\n }\n\n /**\n * Adds components from constructor to this._components\n *\n * @param {AbstractComponent[]} components Array of components\n * @private\n */\n _setComponentsFromConstructor(components) {\n for (const component of components) {\n this.addComponent(component);\n }\n }\n\n /**\n * Creates a new Component based on an ical object\n *\n * @param {ICAL.Component} icalValue The ical.js component to initialise from\n * @param {CalendarComponent=} root The root of the Calendar Document\n * @param {AbstractComponent=} parent The parent element of this component\n * @return {AbstractComponent}\n */\n static fromICALJs(icalValue, root = null, parent = null) {\n if (!(icalValue instanceof ICAL.Component)) {\n throw new ExpectedICalJSError();\n }\n const name = icalValue.name;\n const newComponent = new this(name, [], [], root, parent);\n for (const icalProp of icalValue.getAllProperties()) {\n const constructor = getConstructorForPropertyName(icalProp.name);\n const property = constructor.fromICALJs(icalProp, root, newComponent);\n newComponent.addProperty(property);\n }\n for (const icalComp of icalValue.getAllSubcomponents()) {\n const constructor = this._getConstructorForComponentName(icalComp.name);\n const component = constructor.fromICALJs(icalComp, root, newComponent);\n newComponent.addComponent(component);\n }\n return newComponent;\n }\n\n /**\n * Gets a constructor for a give component name\n *\n * @param {string} componentName The name of the component\n * @return {AbstractComponent}\n * @protected\n */\n static _getConstructorForComponentName(componentName) {\n return AbstractComponent;\n }\n\n /**\n * turns this Component into an ICAL.js component\n *\n * @return {ICAL.Component}\n */\n toICALJs() {\n const component = createComponent(lc(this.name));\n for (const prop of this.getPropertyIterator()) {\n component.addProperty(prop.toICALJs());\n }\n for (const comp of this.getComponentIterator()) {\n component.addSubcomponent(comp.toICALJs());\n }\n return component;\n }\n}\n\n/**\n * Advertise properties that may at most occur once\n *\n * Properties, which may at most occur once, get a simple getter and setter\n *\n * @param {object} prototype The object's prototype\n * @param {object} options The options for advertising properties\n * @param {boolean} advertiseValueOnly Whether to advertise the value only or the entire property\n */\nfunction advertiseSingleOccurrenceProperty(prototype, options, advertiseValueOnly = true) {\n options = getDefaultOncePropConfig(options);\n Object.defineProperty(prototype, options.name, {\n get() {\n const value = this.getFirstPropertyFirstValue(options.iCalendarName);\n if (!value) {\n return options.defaultValue;\n } else {\n if (Array.isArray(options.allowedValues) && !options.allowedValues.includes(value)) {\n return options.unknownValue;\n }\n return value;\n }\n },\n set(value) {\n this._modify();\n if (value === null) {\n this.deleteAllProperties(options.iCalendarName);\n return;\n }\n if (Array.isArray(options.allowedValues) && !options.allowedValues.includes(value)) {\n throw new TypeError('Illegal value');\n }\n this.updatePropertyWithValue(options.iCalendarName, value);\n }\n });\n}\n\n/**\n * Advertise properties that may occur more than once\n *\n * Properties, which may occur more than once, won't get simple getter / setter,\n * but rather a more advanced set of get{name}Iterator, get{name}List, add{name},\n * remove{name} and clearAll{name} methods\n *\n * @param {object} prototype The object's prototype\n * @param {object} options The options for advertising properties\n */\nfunction advertiseMultipleOccurrenceProperty(prototype, options) {\n options = getDefaultMultiplePropConfig(options);\n prototype['get' + ucFirst(options.name) + 'Iterator'] = function* () {\n yield* this.getPropertyIterator(options.iCalendarName);\n };\n prototype['get' + ucFirst(options.name) + 'List'] = function () {\n return Array.from(this['get' + ucFirst(options.name) + 'Iterator']());\n };\n prototype['remove' + ucFirst(options.name)] = function (property) {\n this.deleteProperty(property);\n };\n prototype['clearAll' + ucFirst(options.pluralName)] = function () {\n this.deleteAllProperties(options.iCalendarName);\n };\n}\n\n/**\n * advertises a multi-value string property enabling simple access by language\n * This is used for:\n * - CATEGORIES\n * - RESOURCES\n *\n * @param {object} prototype The object's prototype\n * @param {object} options The options for advertising properties\n */\nfunction advertiseMultiValueStringPropertySeparatedByLang(prototype, options) {\n options = getDefaultMultiplePropConfig(options);\n prototype['get' + ucFirst(options.name) + 'Iterator'] = function* (lang = null) {\n for (const property of this._getAllOfPropertyByLang(options.iCalendarName, lang)) {\n yield* property.getValueIterator();\n }\n };\n prototype['get' + ucFirst(options.name) + 'List'] = function (lang = null) {\n return Array.from(this['get' + ucFirst(options.name) + 'Iterator'](lang));\n };\n prototype['add' + ucFirst(options.name)] = function (value, lang = null) {\n const property = this._getFirstOfPropertyByLang(options.iCalendarName, lang);\n if (property) {\n property.addValue(value);\n } else {\n const newProperty = new Property(options.iCalendarName, [value]);\n if (lang) {\n const languageParameter = new Parameter('LANGUAGE', lang);\n newProperty.setParameter(languageParameter);\n }\n this.addProperty(newProperty);\n }\n };\n prototype['remove' + ucFirst(options.name)] = function (value, lang = null) {\n for (const property of this._getAllOfPropertyByLang(options.iCalendarName, lang)) {\n if (property.isMultiValue() && property.hasValue(value)) {\n if (property.value.length === 1) {\n this.deleteProperty(property);\n return true;\n }\n property.removeValue(value);\n return true;\n }\n }\n return false;\n };\n prototype['clearAll' + ucFirst(options.pluralName)] = function (lang = null) {\n for (const property of this._getAllOfPropertyByLang(options.iCalendarName, lang)) {\n this.deleteProperty(property);\n }\n };\n}\n\n/**\n * advertise a component\n *\n * @param {object} prototype The object's prototype\n * @param {object} options The options for advertising components\n */\nfunction advertiseComponent(prototype, options) {\n options = getDefaultMultipleCompConfig(options);\n prototype['get' + ucFirst(options.name) + 'Iterator'] = function* () {\n yield* this.getComponentIterator(options.iCalendarName);\n };\n prototype['get' + ucFirst(options.name) + 'List'] = function () {\n return Array.from(this['get' + ucFirst(options.name) + 'Iterator']());\n };\n prototype['remove' + ucFirst(options.name)] = function (component) {\n this.deleteComponent(component);\n };\n prototype['clearAll' + ucFirst(options.pluralName)] = function () {\n this.deleteAllComponents(options.iCalendarName);\n };\n}\n\n/**\n * Fill up the options object for advertiseProperty\n *\n * @param {object | string} options The options object\n * @param {string} options.name Advertised name of the property\n * @param {string=} options.iCalendarName The iCalendar name of the property\n * @param {string[]=} options.allowedValues A list of allowed values\n * @param {string | number=} options.defaultValue The default value if unset\n * @param {string | number=} options.unknownValue The fallback value if unknown value\n * @return {object}\n */\nfunction getDefaultOncePropConfig(options) {\n if (typeof options === 'string') {\n options = {\n name: options\n };\n }\n return Object.assign({}, {\n iCalendarName: uc(options.name),\n pluralName: options.name + 's',\n allowedValues: null,\n defaultValue: null,\n unknownValue: null\n }, options);\n}\n\n/**\n * Fill up the options object for advertiseProperty\n *\n * @param {object | string} options The options object\n * @param {string} options.name Advertised name of property\n * @param {string=} options.iCalendarName The iCalendar name of the property\n * @param {boolean=} options.customAddMethod Whether or not to use a custom add method\n * @return {object}\n */\nfunction getDefaultMultiplePropConfig(options) {\n if (typeof options === 'string') {\n options = {\n name: options\n };\n }\n return Object.assign({}, {\n iCalendarName: uc(options.name),\n pluralName: options.name + 's'\n }, options);\n}\n\n/**\n * Fill up the options object for advertiseComponent\n *\n * @param {object | string} options Options destructuring object\n * @param {string} options.name Advertised name of component\n * @param {string=} options.iCalendarName The iCalendar name of the component\n * @param {boolean=} options.customAddMethod Whether or not to use a custom add method\n * @return {object}\n */\nfunction getDefaultMultipleCompConfig(options) {\n if (typeof options === 'string') {\n options = {\n name: options\n };\n }\n return Object.assign({}, {\n iCalendarName: 'V' + uc(options.name),\n pluralName: options.name + 's'\n }, options);\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * Gets a new DateObject set to now\n *\n * @return {Date}\n */\nfunction dateFactory() {\n return new Date();\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\nclass RecurringWithoutDtStartError extends Error {}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class RecurrenceHelper\n * @classdesc\n *\n * TODO: This needs caching\n */\nclass RecurrenceManager {\n /**\n * Constructor\n *\n * @param {AbstractRecurringComponent} masterItem The master-item of the recurrence-set\n */\n constructor(masterItem) {\n /**\n *\n * @type {AbstractRecurringComponent}\n * @private\n */\n this._masterItem = masterItem;\n\n /**\n * Set of Recurrence exception items\n *\n * Number is the unix time representation of the recurrence ID\n *\n * @type {Map}\n * @private\n */\n this._recurrenceExceptionItems = new Map();\n\n /**\n * A sorted index of recurrence ids with range\n *\n * @type {number[]}\n * @private\n */\n this._rangeRecurrenceExceptionItemsIndex = [];\n\n /**\n * Cached difference of dtstart and recurrenceId for recurrence exceptions with range\n *\n * @type {Map}\n * @private\n */\n this._rangeRecurrenceExceptionItemsDiffCache = new Map();\n\n /**\n * Set of Recurrence exception items that have a RANGE of THISANDFUTURE\n *\n * Number is the unix time representation of the recurrence ID\n *\n * @type {Map}\n * @private\n */\n this._rangeRecurrenceExceptionItems = new Map();\n }\n\n /**\n *\n * @return {AbstractRecurringComponent}\n */\n get masterItem() {\n return this._masterItem;\n }\n\n /**\n *\n * @param {AbstractRecurringComponent} masterItem The master-item of the recurrence-set\n */\n set masterItem(masterItem) {\n this._masterItem = masterItem;\n }\n\n /**\n * Gets an iterator over all registered recurrence exceptions of this calendar-document\n */\n *getRecurrenceExceptionIterator() {\n yield* this._recurrenceExceptionItems.values();\n }\n\n /**\n * Gets a list of all registered recurrence-exceptions of this calendar-document\n *\n * @return {AbstractRecurringComponent[]}\n */\n getRecurrenceExceptionList() {\n return Array.from(this.getRecurrenceExceptionIterator());\n }\n\n /**\n * Checks if there is a recurrence Exception for a given recurrenceId\n *\n * @param {DateTimeValue | number} recurrenceId The recurrenceId to check\n * @return {boolean}\n */\n hasRecurrenceExceptionForId(recurrenceId) {\n if (recurrenceId instanceof DateTimeValue) {\n recurrenceId = recurrenceId.unixTime;\n } else if (recurrenceId instanceof ICAL.Time) {\n recurrenceId = recurrenceId.toUnixTime();\n }\n return this._recurrenceExceptionItems.has(recurrenceId);\n }\n\n /**\n * Gets the recurrence exception for a given recurrence Id\n *\n * @param {DateTimeValue | number} recurrenceId The recurrenceId to get\n * @return {AbstractRecurringComponent|null}\n */\n getRecurrenceException(recurrenceId) {\n if (recurrenceId instanceof DateTimeValue) {\n recurrenceId = recurrenceId.unixTime;\n } else if (recurrenceId instanceof ICAL.Time) {\n recurrenceId = recurrenceId.toUnixTime();\n }\n return this._recurrenceExceptionItems.get(recurrenceId) || null;\n }\n\n /**\n * Check if there is a recurrence-exception with a range for a given recurrence-id\n *\n * @param {DateTimeValue | number} recurrenceId The recurrenceId to check\n * @return {boolean}\n */\n hasRangeRecurrenceExceptionForId(recurrenceId) {\n if (recurrenceId instanceof DateTimeValue) {\n recurrenceId = recurrenceId.unixTime;\n } else if (recurrenceId instanceof ICAL.Time) {\n recurrenceId = recurrenceId.toUnixTime();\n }\n if (this._rangeRecurrenceExceptionItemsIndex.length === 0) {\n return false;\n }\n return this._rangeRecurrenceExceptionItemsIndex[0] < recurrenceId;\n }\n\n /**\n * Get recurrence-exception with range that's affecting the given recurrence-id\n *\n * @param {DateTimeValue | number} recurrenceId The recurrenceId to get\n * @return {AbstractRecurringComponent|null}\n */\n getRangeRecurrenceExceptionForId(recurrenceId) {\n if (recurrenceId instanceof DateTimeValue) {\n recurrenceId = recurrenceId.unixTime;\n } else if (recurrenceId instanceof ICAL.Time) {\n recurrenceId = recurrenceId.toUnixTime();\n }\n const index = ICAL.helpers.binsearchInsert(this._rangeRecurrenceExceptionItemsIndex, recurrenceId, (a, b) => a - b);\n if (index === 0) {\n return null;\n }\n const key = this._rangeRecurrenceExceptionItemsIndex[index - 1];\n return this._rangeRecurrenceExceptionItems.get(key);\n }\n\n /**\n * Gets the difference between recurrence-id and start\n * Mostly needed to handle recurrence-exceptions with range\n *\n * @param {DateTimeValue | number} recurrenceId The recurrenceId to get\n * @return {DurationValue|null}\n */\n getRangeRecurrenceExceptionDiff(recurrenceId) {\n if (recurrenceId instanceof DateTimeValue) {\n recurrenceId = recurrenceId.unixTime;\n } else if (recurrenceId instanceof ICAL.Time) {\n recurrenceId = recurrenceId.toUnixTime();\n }\n if (this._rangeRecurrenceExceptionItemsDiffCache.has(recurrenceId)) {\n return this._rangeRecurrenceExceptionItemsDiffCache.get(recurrenceId);\n }\n const recurrenceException = this.getRangeRecurrenceExceptionForId(recurrenceId);\n if (!recurrenceException) {\n return null;\n }\n const originalRecurrenceId = recurrenceException.recurrenceId;\n const originalModifiedStart = recurrenceException.startDate;\n const difference = originalModifiedStart.subtractDateWithTimezone(originalRecurrenceId);\n difference.lock();\n this._rangeRecurrenceExceptionItemsDiffCache.set(recurrenceId, difference);\n return difference;\n }\n\n /**\n * Adds a new recurrence-exception to this calendar-document\n *\n * @param {AbstractRecurringComponent} recurrenceExceptionItem The recurrence-exception-item to relate to recurrence-set\n */\n relateRecurrenceException(recurrenceExceptionItem) {\n this._modify();\n const key = this._getRecurrenceIdKey(recurrenceExceptionItem);\n this._recurrenceExceptionItems.set(key, recurrenceExceptionItem);\n if (recurrenceExceptionItem.modifiesFuture()) {\n this._rangeRecurrenceExceptionItems.set(key, recurrenceExceptionItem);\n const index = ICAL.helpers.binsearchInsert(this._rangeRecurrenceExceptionItemsIndex, key, (a, b) => a - b);\n this._rangeRecurrenceExceptionItemsIndex.splice(index, 0, key);\n }\n recurrenceExceptionItem.recurrenceManager = this;\n }\n\n /**\n * Removes a recurrence exception by the item itself\n *\n * @param {AbstractRecurringComponent} recurrenceExceptionItem The recurrence-exception remove\n */\n removeRecurrenceException(recurrenceExceptionItem) {\n const key = this._getRecurrenceIdKey(recurrenceExceptionItem);\n this.removeRecurrenceExceptionByRecurrenceId(key);\n }\n\n /**\n * Removes a recurrence exception by it's unix-time\n *\n * @param {number} recurrenceId The recurrence-exception to remove\n */\n removeRecurrenceExceptionByRecurrenceId(recurrenceId) {\n this._modify();\n this._recurrenceExceptionItems.delete(recurrenceId);\n this._rangeRecurrenceExceptionItems.delete(recurrenceId);\n this._rangeRecurrenceExceptionItemsDiffCache.delete(recurrenceId);\n const index = this._rangeRecurrenceExceptionItemsIndex.indexOf(recurrenceId);\n if (index !== -1) {\n this._rangeRecurrenceExceptionItemsIndex.splice(index, 1);\n }\n }\n\n /**\n *\n * @param {AbstractRecurringComponent} recurrenceExceptionItem Object to get key from\n * @return {number}\n * @private\n */\n _getRecurrenceIdKey(recurrenceExceptionItem) {\n return recurrenceExceptionItem.recurrenceId.unixTime;\n }\n\n /**\n * Gets an iterator over all recurrence rules\n */\n *getRecurrenceRuleIterator() {\n for (const property of this._masterItem.getPropertyIterator('RRULE')) {\n yield property.getFirstValue();\n }\n }\n\n /**\n * Gets a list of all recurrence rules\n *\n * @return {RecurValue[]}\n */\n getRecurrenceRuleList() {\n return Array.from(this.getRecurrenceRuleIterator());\n }\n\n /**\n * Adds a new recurrence rule\n *\n * @param {RecurValue} recurrenceRule The RRULE to add\n */\n addRecurrenceRule(recurrenceRule) {\n this._modify();\n this.resetCache();\n const property = new Property('RRULE', recurrenceRule);\n this._masterItem.addProperty(property);\n }\n\n /**\n * Removes a recurrence rule\n *\n * @param {RecurValue} recurrenceRule The RRULE to remove\n */\n removeRecurrenceRule(recurrenceRule) {\n this._modify();\n this.resetCache();\n for (const property of this._masterItem.getPropertyIterator('RRULE')) {\n if (property.getFirstValue() === recurrenceRule) {\n this._masterItem.deleteProperty(property);\n }\n }\n }\n\n /**\n * Removes all recurrence rules\n */\n clearAllRecurrenceRules() {\n this._modify();\n this.resetCache();\n this._masterItem.deleteAllProperties('RRULE');\n }\n\n /**\n * Gets an iterator over all recurrence\n *\n * @param {boolean} isNegative Whether or not to get EXDATES\n * @param {string} valueType Limit type of EXDATES\n */\n *getRecurrenceDateIterator(isNegative = false, valueType = null) {\n for (const property of this._getPropertiesForRecurrenceDate(isNegative, valueType)) {\n yield* property.getValueIterator();\n }\n }\n\n /**\n *\n * @param {boolean} isNegative Whether or not to get EXDATES\n * @param {string} valueType Limit type of EXDATES\n * @return {(DateTimeValue|PeriodValue)[]}\n */\n listAllRecurrenceDates(isNegative = false, valueType = null) {\n return Array.from(this.getRecurrenceDateIterator(isNegative, valueType));\n }\n\n /**\n * This adds a new recurrence-date value.\n * It automatically adds it to the first property of the same value-type\n * or creates a new one if necessary\n *\n * @param {boolean} isNegative Whether we are dealing with an EXDATE or RDATE\n * @param {DateTimeValue|PeriodValue} value EXDATE to add\n */\n addRecurrenceDate(isNegative = false, value) {\n this._modify();\n this.resetCache();\n\n // Only add DateTime Value if its of the same timezone\n let timezoneId = null;\n if (value instanceof DateTimeValue && !value.isDate) {\n timezoneId = value.timezoneId;\n }\n const valueType = this._getValueTypeByValue(value);\n const iterator = this._getPropertiesForRecurrenceDate(isNegative, valueType, timezoneId);\n const first = iterator.next.value;\n if (first instanceof Property) {\n const propertyValue = first.value;\n propertyValue.push(value);\n this.masterItem.markPropertyAsDirty(isNegative ? 'EXDATE' : 'RDATE');\n } else {\n const propertyName = this._getPropertyNameByIsNegative(isNegative);\n const property = new Property(propertyName, value);\n this._masterItem.addProperty(property);\n }\n }\n\n /**\n * Checks if a recurrenceID is an RDATE or EXDATE\n *\n * @param {boolean} isNegative Whether we are dealing with an EXDATE or RDATE\n * @param {DateTimeValue} recurrenceId Recurrence-Id to check\n * @return {boolean}\n */\n hasRecurrenceDate(isNegative = false, recurrenceId) {\n for (let value of this.getRecurrenceDateIterator(isNegative)) {\n if (value instanceof PeriodValue) {\n value = value.start;\n }\n if (value.compare(recurrenceId) === 0) {\n return true;\n }\n }\n return false;\n }\n\n /**\n *\n * @param {boolean} isNegative Whether we are dealing with an EXDATE or RDATE\n * @param {DateTimeValue} recurrenceId Recurrence-Id to get\n * @return {null|DateTimeValue|PeriodValue}\n */\n getRecurrenceDate(isNegative = false, recurrenceId) {\n for (const value of this.getRecurrenceDateIterator(isNegative)) {\n let valueToCheck = value;\n if (valueToCheck instanceof PeriodValue) {\n valueToCheck = valueToCheck.start;\n }\n if (valueToCheck.compare(recurrenceId) === 0) {\n return value;\n }\n }\n return null;\n }\n\n /**\n * This deletes a recurrence-date value from this recurrence-set\n *\n * @param {boolean} isNegative Whether we are dealing with an EXDATE or RDATE\n * @param {DateTimeValue|PeriodValue} value The EXDATE/RDATE to remove\n */\n removeRecurrenceDate(isNegative = false, value) {\n this._modify();\n this.resetCache();\n const valueType = this._getValueTypeByValue(value);\n for (const property of this._getPropertiesForRecurrenceDate(isNegative, valueType)) {\n for (const valueToCheck of property.getValueIterator()) {\n if (value === valueToCheck) {\n const allValues = property.value;\n if (allValues.length === 1) {\n this.masterItem.deleteProperty(property);\n continue;\n }\n const index = allValues.indexOf(value);\n allValues.splice(index, 1);\n this.masterItem.markPropertyAsDirty(isNegative ? 'EXDATE' : 'RDATE');\n }\n }\n }\n }\n\n /**\n * Clears all recurrence-date information\n *\n * @param {boolean} isNegative Whether we are dealing with an EXDATE or RDATE\n * @param {string} valueType The type of RDATEs/EXDATEs to remove\n */\n clearAllRecurrenceDates(isNegative = false, valueType = null) {\n this._modify();\n this.resetCache();\n for (const property of this._getPropertiesForRecurrenceDate(isNegative, valueType)) {\n this._masterItem.deleteProperty(property);\n }\n }\n\n /**\n * Gets the property name for recurrence dates based on the isNegative boolean\n *\n * @param {boolean} isNegative Whether we are dealing with an EXDATE or RDATE\n * @return {string}\n * @private\n */\n _getPropertyNameByIsNegative(isNegative) {\n return isNegative ? 'EXDATE' : 'RDATE';\n }\n\n /**\n * Gets the value type based on the provided value\n *\n * @param {PeriodValue|DateTimeValue} value The value to get type of property from\n * @return {string}\n * @private\n */\n _getValueTypeByValue(value) {\n if (value instanceof PeriodValue) {\n return 'PERIOD';\n } else if (value.isDate) {\n return 'DATE';\n } else {\n return 'DATETIME';\n }\n }\n\n /**\n *\n * @param {boolean} isNegative Whether we are dealing with an EXDATE or RDATE\n * @param {string | null} valueType The type of values to get\n * @param {ICAL.Timezone=} timezoneId Filter by timezone\n * @private\n */\n *_getPropertiesForRecurrenceDate(isNegative, valueType, timezoneId = null) {\n const propertyName = this._getPropertyNameByIsNegative(isNegative);\n for (const property of this._masterItem.getPropertyIterator(propertyName)) {\n if (valueType === null) {\n yield property;\n } else if (uc(valueType) === 'PERIOD' && property.getFirstValue() instanceof PeriodValue) {\n yield property;\n } else if (uc(valueType) === 'DATE' && property.getFirstValue().isDate) {\n yield property;\n } else if (uc(valueType) === 'DATETIME' && !property.getFirstValue().isDate) {\n if (timezoneId === null || property.getFirstValue().timezoneId === timezoneId) {\n yield property;\n }\n }\n }\n }\n\n /**\n * Checks if the entire set of recurrence rules is finite\n *\n * @return {boolean}\n */\n isFinite() {\n return this.getRecurrenceRuleList().every(rule => rule.isFinite());\n }\n\n /**\n * @return {boolean}\n */\n isEmptyRecurrenceSet() {\n return this._getRecurExpansionObject().next() === undefined;\n }\n\n /**\n * Gets the occurrence at the exact given recurrenceId\n *\n * @param {DateTimeValue} recurrenceId RecurrenceId to get\n * @return {AbstractRecurringComponent|null}\n */\n getOccurrenceAtExactly(recurrenceId) {\n if (!this.masterItem.isRecurring()) {\n if (this.masterItem.getReferenceRecurrenceId().compare(recurrenceId) === 0) {\n return this.masterItem;\n }\n return null;\n }\n const iterator = this._getRecurExpansionObject();\n const icalRecurrenceId = recurrenceId.toICALJs();\n let next;\n while (next = iterator.next()) {\n if (next.compare(icalRecurrenceId) === 0) {\n // It's a match 🔥\n return this._getOccurrenceAtRecurrenceId(DateTimeValue.fromICALJs(next));\n }\n if (next.compare(icalRecurrenceId) === 1) {\n // We hit an occurrence in the future, return null\n return null;\n }\n }\n return null;\n }\n\n /**\n * Gets the closest occurrence to the given recurrenceId.\n * That's either the closest in the future, or in case the\n * recurrence-set ends before recurrenceId, the last one\n *\n * This function works solely on the basis of recurrence-ids.\n * It ignores the actual date of recurrence-exceptions.\n * Ideally we should fix it and provide a similar implementation\n * like getAllOccurrencesBetweenIterator, but for now it's the\n * accepted behavior.\n *\n * @param {DateTimeValue} recurrenceId RecurrenceId to get\n * @return {AbstractRecurringComponent}\n */\n getClosestOccurrence(recurrenceId) {\n if (!this.masterItem.isRecurring()) {\n return this.masterItem;\n }\n const iterator = this._getRecurExpansionObject();\n recurrenceId = recurrenceId.toICALJs();\n let previous = null;\n let next;\n while (next = iterator.next()) {\n if (next.compare(recurrenceId) === -1) {\n previous = next;\n } else {\n // This is the case when it's either equal or in the future\n const dateTimeValue = DateTimeValue.fromICALJs(next);\n return this._getOccurrenceAtRecurrenceId(dateTimeValue);\n }\n }\n const dateTimeValue = DateTimeValue.fromICALJs(previous);\n return this._getOccurrenceAtRecurrenceId(dateTimeValue);\n }\n\n /**\n * Counts all occurrences in the given time-range.\n * This function works solely on the basis of recurrence-ids.\n * Start and end are inclusive.\n *\n * @param {DateTimeValue} queriedTimeRangeStart Start of time-range\n * @param {DateTimeValue} queriedTimeRangeEnd End of time-range\n * @return {number} Count of occurrences in the given time-range\n */\n countAllOccurrencesBetween(queriedTimeRangeStart, queriedTimeRangeEnd) {\n if (!this.masterItem.isRecurring()) {\n if (typeof this.masterItem.isInTimeFrame === 'function' && !this.masterItem.isInTimeFrame(queriedTimeRangeStart, queriedTimeRangeEnd)) {\n return 0;\n }\n return 1;\n }\n const iterator = this._getRecurExpansionObject();\n const queriedICALJsTimeRangeStart = queriedTimeRangeStart.toICALJs();\n const queriedICALJsTimeRangeEnd = queriedTimeRangeEnd.toICALJs();\n let count = 0;\n let next;\n while (next = iterator.next()) {\n if (next.compare(queriedICALJsTimeRangeStart) === -1) {\n continue;\n }\n if (next.compare(queriedICALJsTimeRangeEnd) === 1) {\n break;\n }\n count += 1;\n }\n return count;\n }\n\n /**\n * Get all occurrences between start and end\n * Start and End are inclusive\n *\n * @param {DateTimeValue} queriedTimeRangeStart Start of time-range\n * @param {DateTimeValue} queriedTimeRangeEnd End of time-range\n */\n *getAllOccurrencesBetweenIterator(queriedTimeRangeStart, queriedTimeRangeEnd) {\n if (!this.masterItem.isRecurring()) {\n if (typeof this.masterItem.isInTimeFrame !== 'function') {\n yield this.masterItem;\n }\n if (this.masterItem.isInTimeFrame(queriedTimeRangeStart, queriedTimeRangeEnd)) {\n yield this.masterItem;\n }\n return;\n }\n const iterator = this._getRecurExpansionObject();\n const queriedICALJsTimeRangeStart = queriedTimeRangeStart.toICALJs();\n const queriedICALJsTimeRangeEnd = queriedTimeRangeEnd.toICALJs();\n const recurrenceIdKeys = Array.from(this._recurrenceExceptionItems.keys());\n const maximumRecurrenceId = Math.max.apply(Math, recurrenceIdKeys);\n let next;\n while (next = iterator.next()) {\n // We have to get the real occurrence to resolve RECURRENCE-IDs\n const dateTimeValue = DateTimeValue.fromICALJs(next);\n const occurrence = this._getOccurrenceAtRecurrenceId(dateTimeValue);\n\n // Check what type of recurrence object we are dealing with\n // Depending on that, the time to compare to changes\n // If we are dealing events, we have to compare to the end-date\n // If we are dealing with tasks, we will have to compare to the due-date\n // etc.\n // For now we are only implementing events, other components will come later\n let compareDate = null;\n switch (uc(occurrence.name)) {\n case 'VEVENT':\n case 'VTODO':\n compareDate = occurrence.endDate.toICALJs();\n break;\n case 'VJOURNAL':\n default:\n compareDate = next;\n break;\n }\n\n // If the date we are comparing to is before our time-range,\n // we don't want to yield this event\n if (compareDate.compare(queriedICALJsTimeRangeStart) === -1) {\n continue;\n }\n\n // If we have an object that is:\n // 1. either\n // 1.1 - no recurrence exception\n // or\n // 1.2 - a recurrence-exception that modifies the future\n // and\n // 2. starts after the queried time-range ends, then we stop expanding\n const startDate = occurrence.startDate.toICALJs();\n if ((!occurrence.isRecurrenceException() || occurrence.modifiesFuture()) && startDate.compare(queriedICALJsTimeRangeEnd) === 1) {\n // Just break if there are no recurrence-exceptions\n if (this._recurrenceExceptionItems.size === 0) {\n break;\n }\n\n // Keep iterating until our currently checked recurrenceId\n // is bigger than the maximum recurrence-id that we have.\n if (next.toUnixTime() > maximumRecurrenceId) {\n break;\n } else {\n continue;\n }\n }\n if (typeof occurrence.isInTimeFrame !== 'function') {\n yield occurrence;\n }\n if (occurrence.isInTimeFrame(queriedTimeRangeStart, queriedTimeRangeEnd)) {\n yield occurrence;\n }\n }\n }\n\n /**\n * Get all occurrences between start and end\n *\n * @param {DateTimeValue} start Start of time-range\n * @param {DateTimeValue} end End of time-range\n * @return {(*|null)[]}\n */\n getAllOccurrencesBetween(start, end) {\n return Array.from(this.getAllOccurrencesBetweenIterator(start, end));\n }\n\n /**\n * Update the UID of all components in the recurrence set\n *\n * @param {string} newUID The new UID of the calendar-document\n */\n updateUID(newUID) {\n this._masterItem.updatePropertyWithValue('UID', newUID);\n for (const recurrenceExceptionItem of this.getRecurrenceExceptionIterator()) {\n recurrenceExceptionItem.updatePropertyWithValue('UID', newUID);\n }\n }\n\n /**\n * Updates the recurrence-information accordingly,\n * whenever the start-date of the master-item changes\n *\n * @param {DateTimeValue} newStartDate The new start-date\n * @param {DateTimeValue} oldStartDate The old start-date\n */\n updateStartDateOfMasterItem(newStartDate, oldStartDate) {\n const difference = newStartDate.subtractDateWithTimezone(oldStartDate);\n\n // update EXDATE\n for (const exdate of this.getRecurrenceDateIterator(true)) {\n // If this EXDATE matches an RDATE, don't update, because we don't update RDATEs\n if (this.hasRecurrenceDate(false, exdate)) {\n continue;\n }\n\n // EXDATE are always either DATE or DATETIME,\n // no need to check for PERIOD\n exdate.addDuration(difference);\n }\n for (const recurrenceException of this.getRecurrenceExceptionIterator()) {\n // We don't edit RDATES, so don't update recurrence-ids if they\n // are based on an RDATE\n if (this.hasRecurrenceDate(false, recurrenceException.recurrenceId)) {\n continue;\n }\n this.removeRecurrenceException(recurrenceException);\n recurrenceException.recurrenceId.addDuration(difference);\n this.relateRecurrenceException(recurrenceException);\n }\n\n // update UNTIL of recurrence-rules\n for (const rrule of this.getRecurrenceRuleIterator()) {\n if (rrule.until) {\n rrule.until.addDuration(difference);\n }\n }\n }\n\n /**\n * Gets an object for the given recurrenceId\n * It does not verify that the given recurrenceId\n * is actually a valid recurrence of this calendar-document\n *\n * @param {DateTimeValue} recurrenceId Recurrence-Id to get\n * @return {AbstractRecurringComponent}\n * @private\n */\n _getOccurrenceAtRecurrenceId(recurrenceId) {\n if (this.hasRecurrenceExceptionForId(recurrenceId)) {\n const recurrenceException = this.getRecurrenceException(recurrenceId);\n if (!recurrenceException.canCreateRecurrenceExceptions()) {\n return recurrenceException;\n }\n return recurrenceException.forkItem(recurrenceId);\n } else if (this.hasRangeRecurrenceExceptionForId(recurrenceId)) {\n const rangeRecurrenceException = this.getRangeRecurrenceExceptionForId(recurrenceId);\n const difference = this.getRangeRecurrenceExceptionDiff(recurrenceId);\n return rangeRecurrenceException.forkItem(recurrenceId, difference);\n } else if (recurrenceId.compare(this._masterItem.startDate) === 0) {\n if (!this._masterItem.canCreateRecurrenceExceptions()) {\n return this._masterItem;\n }\n return this._masterItem.forkItem(recurrenceId);\n } else {\n return this._masterItem.forkItem(recurrenceId);\n }\n }\n\n /**\n * Resets the internal recur-expansion object.\n * This is necessary after each modification of the\n * recurrence-information\n */\n resetCache() {\n // TODO - implement me\n }\n\n /**\n * Gets a new ICAL.RecurExpansion object\n *\n * Inspired by how ICAL.JS RecurExpansion\n * serialises and unserialises its state\n *\n * @return {ICAL.RecurExpansion}\n * @private\n */\n _getRecurExpansionObject() {\n if (this._masterItem.startDate === null) {\n throw new RecurringWithoutDtStartError();\n }\n const dtstart = this._masterItem.startDate.toICALJs();\n let last = dtstart.clone();\n const ruleIterators = [];\n let ruleDateInc;\n const ruleDates = [];\n let ruleDate = null;\n const exDates = [];\n const complete = false;\n for (const ruleValue of this.getRecurrenceRuleIterator()) {\n ruleIterators.push(ruleValue.toICALJs().iterator(dtstart));\n ruleIterators[ruleIterators.length - 1].next();\n }\n for (let rDateValue of this.getRecurrenceDateIterator()) {\n if (rDateValue instanceof PeriodValue) {\n rDateValue = rDateValue.start;\n }\n rDateValue = rDateValue.toICALJs();\n const index = ICAL.helpers.binsearchInsert(ruleDates, rDateValue, (a, b) => a.compare(b));\n ruleDates.splice(index, 0, rDateValue);\n }\n\n // Is the first RDATE prior to our current DTSTART?\n if (ruleDates.length > 0 && ruleDates[0].compare(dtstart) === -1) {\n ruleDateInc = 0;\n last = ruleDates[0].clone();\n } else {\n ruleDateInc = ICAL.helpers.binsearchInsert(ruleDates, dtstart, (a, b) => a.compare(b));\n ruleDate = exDates[ruleDateInc];\n }\n for (let exDateValue of this.getRecurrenceDateIterator(true)) {\n exDateValue = exDateValue.toICALJs();\n const index = ICAL.helpers.binsearchInsert(exDates, exDateValue, (a, b) => a.compare(b));\n exDates.splice(index, 0, exDateValue);\n }\n const exDateInc = ICAL.helpers.binsearchInsert(exDates, dtstart, (a, b) => a.compare(b));\n const exDate = exDates[exDateInc];\n return new ICAL.RecurExpansion({\n dtstart,\n last,\n ruleIterators,\n ruleDateInc,\n exDateInc,\n ruleDates,\n ruleDate,\n exDates,\n exDate,\n complete\n });\n }\n\n /**\n * @private\n */\n _modify() {\n if (this._masterItem.isLocked()) {\n throw new ModificationNotAllowedError();\n }\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class Timezone\n */\nclass Timezone {\n /**\n * Constructor\n *\n * @param {string | ICAL.Timezone | ICAL.Component} timezoneId Id of the timezone\n * @param {string?} ics The iCalendar timezone definition\n */\n constructor(timezoneId, ics) {\n /**\n * Id of the timezone, used before initialising\n *\n * @type {string}\n * @private\n */\n this._timezoneId = null;\n\n /**\n * ICS representation of the timezone, used before initialising\n *\n * @type {string}\n * @private\n */\n this._ics = null;\n\n /**\n * @type {ICAL.Timezone|null}\n */\n this._innerValue = null;\n\n /**\n *\n * @type {boolean}\n * @private\n */\n this._initialized = false;\n\n // If the first parameter is already\n // an instance of ICAL.Timezone,\n // skip lazy loading\n if (timezoneId instanceof ICAL.Timezone) {\n this._innerValue = timezoneId;\n this._initialized = true;\n } else if (timezoneId instanceof ICAL.Component) {\n this._innerValue = new ICAL.Timezone(timezoneId);\n this._initialized = true;\n } else {\n this._timezoneId = timezoneId;\n this._ics = ics;\n }\n }\n\n /**\n * Gets the timezone id\n *\n * @return {string}\n */\n get timezoneId() {\n if (this._initialized) {\n return this._innerValue.tzid;\n }\n return this._timezoneId;\n }\n\n /**\n * Gets the UTC Offset for a given date in this timezone\n *\n * @param {number} year Year of the date\n * @param {number} month Month of the date (1-based)\n * @param {number} day Day of the date\n * @param {number} hour Hour of the date\n * @param {number} minute Minute of the date\n * @param {number} second Second of the date\n * @return {number}\n */\n offsetForArray(year, month, day, hour, minute, second) {\n this._initialize();\n const time = new ICAL.Time({\n year,\n month,\n day,\n hour,\n minute,\n second,\n isDate: false\n });\n return this._innerValue.utcOffset(time);\n }\n\n /**\n * Converts a timestamp to an array of year, month, day, hour, minute, second.\n *\n * @param {number} ms Timestamp in milliseconds\n * @return {number[]}\n */\n timestampToArray(ms) {\n this._initialize();\n\n // just create a dummy object because fromUnixTime is not exposed on ICAL.Time\n const time = ICAL.Time.fromData({\n year: 1970,\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0\n });\n time.fromUnixTime(Math.floor(ms / 1000));\n const local = time.convertToZone(this._innerValue);\n return [local.year, local.month,\n // THIS is 1-based !\n local.day, local.hour, local.minute, local.second];\n }\n\n /**\n * Returns\n *\n * @return {ICAL.Timezone}\n */\n toICALTimezone() {\n this._initialize();\n return this._innerValue;\n }\n\n /**\n * Returns the corresponding ICAL.\n *\n * @return {ICAL.Component}\n */\n toICALJs() {\n this._initialize();\n return this._innerValue.component;\n }\n\n /**\n * Initialises the inner ICAL.Timezone component\n *\n * @private\n */\n _initialize() {\n if (!this._initialized) {\n const jCal = ICAL.parse(this._ics);\n const icalComp = new ICAL.Component(jCal);\n this._innerValue = new ICAL.Timezone(icalComp);\n this._initialized = true;\n }\n }\n}\nTimezone.utc = new Timezone(ICAL.Timezone.utcTimezone);\nTimezone.floating = new Timezone(ICAL.Timezone.localTimezone);\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class AlarmComponent\n * @classdesc\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.6.6\n */\nclass AlarmComponent extends AbstractComponent {\n /**\n * Adds a new attendee based on their name and email-address\n *\n * @param {string} name - Name of the attendee\n * @param {string} email - E-Mail address of the attendee\n * @return {boolean}\n */\n addAttendeeFromNameAndEMail(name, email) {\n const attendeeProperty = AttendeeProperty.fromNameAndEMail(name, email);\n return this.addProperty(attendeeProperty);\n }\n\n /**\n * Gets the trigger property\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.6.3\n *\n * @return {TriggerProperty}\n */\n get trigger() {\n return this.getFirstProperty('TRIGGER');\n }\n\n /**\n * Sets an absolute alarm\n *\n * @param {DateTimeValue} alarmTime - Absolute time for the trigger\n */\n setTriggerFromAbsolute(alarmTime) {\n const triggerProperty = TriggerProperty.fromAbsolute(alarmTime);\n this.deleteAllProperties('TRIGGER');\n this.addProperty(triggerProperty);\n }\n\n /**\n * Sets a relative trigger\n *\n * @param {DurationValue} alarmOffset - Relative time of the trigger, either related to start or end\n * @param {boolean=} relatedToStart - Related to Start or end?\n */\n setTriggerFromRelative(alarmOffset, relatedToStart = true) {\n const triggerProperty = TriggerProperty.fromRelativeAndRelated(alarmOffset, relatedToStart);\n this.deleteAllProperties('TRIGGER');\n this.addProperty(triggerProperty);\n }\n}\n\n/**\n * Action to be taken when this Alarm is due\n * Possible values:\n * - AUDIO\n * - DISPLAY\n * - EMAIL\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.6.1\n *\n * @name AlarmComponent#action\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(AlarmComponent.prototype, 'action');\n\n/**\n * Description for this alarm\n * Can only be used in combination with action DISPLAY and EMAIL\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.5\n *\n * @name AlarmComponent#description\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(AlarmComponent.prototype, 'description');\n\n/**\n * Summary for this alarm\n * Can only be used in combination with action EMAIL\n * Will be used as the EMAIL's subject\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.12\n *\n * @name AlarmComponent#summary\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(AlarmComponent.prototype, 'summary');\n\n/**\n * The duration specifies the delay period between repeated alarms.\n * This property must be specified along with the repeat property\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.2.5\n *\n * @name AlarmComponent#duration\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(AlarmComponent.prototype, 'duration');\n\n/**\n * The number of times an alarm should be repeated.\n * This property must be specified along with the duration property\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.6.2\n *\n * @name AlarmComponent#repeat\n * @type {number}\n */\nadvertiseSingleOccurrenceProperty(AlarmComponent.prototype, 'repeat');\n\n/**\n * This attachment points to a sound file, can only be used in combination\n * with ACTION AUDIO\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.1\n *\n * @name AlarmComponent#attachment\n * @type {AttachmentProperty}\n */\nadvertiseSingleOccurrenceProperty(AlarmComponent.prototype, {\n name: 'attachment',\n iCalendarName: 'ATTACH'\n});\n\n/**\n * Get an iterator over all attendees\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.1\n *\n * @name AlarmComponent#getAttendeeIterator\n * @function\n * @return {IterableIterator}\n */\n\n/**\n * Get a list of all attendees\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.1\n *\n * @name AlarmComponent#getAttendeeList\n * @function\n * @return {AttendeeProperty[]}\n */\n\n/**\n * Adds a new attendee to this alarm-component\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.1\n *\n * @name AlarmComponent#addAttendee\n * @function\n * @param {AttendeeProperty} attendee - The attendee object to add\n */\n\n/**\n * Removes an attendee from this alarm-component\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.1\n *\n * @name AlarmComponent#removeAttendee\n * @function\n * @param {AttendeeProperty} attendee - The attendee object to remove\n */\n\n/**\n * Removes all attendees from this alarm-component\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.1\n *\n * @name AlarmComponent#clearAllAttendees\n * @function\n */\nadvertiseMultipleOccurrenceProperty(AlarmComponent.prototype, 'attendee');\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * Gets the constructor for a component name\n * This will only return a constructor for components,\n * that can be nested inside other ones\n *\n * @param {string} compName - Component name to get default constructor for\n * @return {AlarmComponent|AbstractComponent}\n */\nfunction getConstructorForComponentName$1(compName) {\n switch (uc(compName)) {\n case 'VALARM':\n return AlarmComponent;\n default:\n return AbstractComponent;\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class AbstractRecurringComponent\n * @classdesc AbstractRecurringComponent is the basis for\n * EventComponent, JournalComponent and TodoComponent.\n *\n * It contains all the logic for recurrence-expansion and\n * recurrence-management plus all management for all\n * properties and all subcomponents that the three\n * components mentioned before have in common\n */\nclass AbstractRecurringComponent extends AbstractComponent {\n /**\n * @inheritDoc\n */\n constructor(...args) {\n super(...args);\n\n /**\n * In case this object is virtual, primary item refers to the master object\n * that this object was forked from.\n *\n * Otherwise primary item is null\n *\n * @type {AbstractRecurringComponent}\n * @private\n */\n this._primaryItem = null;\n\n /**\n * Indicator whether this is a direct fork of a primary item, representing\n * the very same recurrence id\n *\n * @type {boolean}\n * @private\n */\n this._isExactForkOfPrimary = false;\n\n /**\n * The original recurrence-id of this occurrence.\n * Mostly needed for range exceptions with a range\n *\n * @type {DateTimeValue|null}\n * @private\n */\n this._originalRecurrenceId = null;\n\n /**\n * Instance of the recurrence manager.\n * This object is shared among all instances\n * of a recurrence-set\n *\n * @type {RecurrenceManager}\n * @private\n */\n this._recurrenceManager = null;\n\n /**\n * Indicator whether this component was modified\n * In case it was, the last-modified property\n * needs to be updated before saving the event\n *\n * @type {boolean}\n * @private\n */\n this._dirty = false;\n\n /**\n * Indicator whether there have been significant changes\n * In case the changes are considered significant,\n * the sequence needs to be incremented\n *\n * @type {boolean}\n * @private\n */\n this._significantChange = false;\n\n /**\n * Id of this AbstractRecurringComponent\n *\n * @type {string | null}\n * @private\n */\n this._cachedId = null;\n }\n\n /**\n * Gets the primary-item of this recurring item\n *\n * @return {AbstractRecurringComponent}\n */\n get primaryItem() {\n return this._primaryItem;\n }\n\n /**\n * Sets the primary-item of this recurring item\n *\n * @param {AbstractRecurringComponent} primaryItem The new primary-item\n */\n set primaryItem(primaryItem) {\n this._modify();\n this._primaryItem = primaryItem;\n }\n\n /**\n * Gets whether or not this is a fork of the primary item\n * for the same recurrence-id\n *\n * @return {boolean}\n */\n get isExactForkOfPrimary() {\n return this._isExactForkOfPrimary;\n }\n\n /**\n * Sets the isExactForkOfPrimary indicator, see getter for description\n *\n * @param {boolean} isExactForkOfPrimary Whether or not this is an exact fork\n */\n set isExactForkOfPrimary(isExactForkOfPrimary) {\n this._isExactForkOfPrimary = isExactForkOfPrimary;\n }\n\n /**\n * Gets the original recurrence-id\n *\n * @return {DateTimeValue}\n */\n get originalRecurrenceId() {\n return this._originalRecurrenceId;\n }\n\n /**\n * Sets the original recurrence-id\n *\n * @param {DateTimeValue} originalRecurrenceId The new original recurrence-id\n */\n set originalRecurrenceId(originalRecurrenceId) {\n this._originalRecurrenceId = originalRecurrenceId;\n }\n\n /**\n * Gets the recurrence-manager of this recurrence-set\n *\n * @return {RecurrenceManager}\n */\n get recurrenceManager() {\n return this._recurrenceManager;\n }\n\n /**\n * Sets the recurrence-manager of this recurrence-set\n *\n * @param {RecurrenceManager} recurrenceManager The new recurrence-manager\n */\n set recurrenceManager(recurrenceManager) {\n this._recurrenceManager = recurrenceManager;\n }\n\n /**\n * Gets the master-item of this recurring item\n *\n * @return {AbstractRecurringComponent}\n */\n get masterItem() {\n return this.recurrenceManager.masterItem;\n }\n\n /**\n * Returns whether this item is the master item\n *\n * @return {boolean}\n */\n isMasterItem() {\n return this.masterItem === this;\n }\n\n /**\n * Gets a unique ID for this occurrence of the event\n *\n * Please note that if the same event occurs in multiple calendars,\n * this id will not be unique. Software using this library will have to\n * manually mix in the calendar id into this id\n *\n * @return {string}\n */\n get id() {\n if (this._cachedId) {\n return this._cachedId;\n }\n if (this.startDate === null) {\n this._cachedId = encodeURIComponent(this.uid);\n return this._cachedId;\n }\n this._cachedId = [encodeURIComponent(this.uid), encodeURIComponent(this.getReferenceRecurrenceId().unixTime.toString())].join('###');\n return this._cachedId;\n }\n\n /**\n * Gets the UID property\n *\n * @return {string | null}\n */\n get uid() {\n return this.getFirstPropertyFirstValue('UID');\n }\n\n /**\n * Sets the UID property and the UID property of all related exceptions\n *\n * @param {string} uid The new UID\n */\n set uid(uid) {\n this._recurrenceManager.updateUID(uid);\n }\n\n /**\n * Gets the start date of the event\n *\n * @return {DateTimeValue}\n */\n get startDate() {\n return this.getFirstPropertyFirstValue('dtstart');\n }\n\n /**\n * Sets the start date of the event\n *\n * @param {DateTimeValue} start The new start-date to set\n */\n set startDate(start) {\n const oldStartDate = this.startDate;\n this.updatePropertyWithValue('dtstart', start);\n if (this.isMasterItem()) {\n this._recurrenceManager.updateStartDateOfMasterItem(start, oldStartDate);\n }\n }\n\n /**\n * Checks whether this item is part of a recurring set\n *\n * @return {boolean}\n */\n isPartOfRecurrenceSet() {\n return this.masterItem.isRecurring();\n }\n\n /**\n * Checks whether this component is recurring\n *\n * @return {boolean}\n */\n isRecurring() {\n return this.hasProperty('RRULE') || this.hasProperty('RDATE');\n }\n\n /**\n * Checks whether this component is a recurrence-exception\n *\n * @return {boolean}\n */\n isRecurrenceException() {\n return this.hasProperty('RECURRENCE-ID');\n }\n\n /**\n * Checks wether this component is a recurrence-exception\n * and whether it's modifying the future\n *\n * @return {boolean}\n */\n modifiesFuture() {\n if (!this.isRecurrenceException()) {\n return false;\n }\n const property = this.getFirstProperty('RECURRENCE-ID');\n return property.getParameterFirstValue('RANGE') === 'THISANDFUTURE';\n }\n\n /**\n * Creates an occurrence at the given time\n *\n * This is an internal function for calendar-js, used by the recurrence-manager\n * Do not call from outside\n *\n * @param {DateTimeValue} recurrenceId The recurrence-Id of the forked item\n * @param {DurationValue=} startDiff to be used when The start-diff (used for RECURRENCE-ID;RANGE=THISANDFUTURE)\n * @return {AbstractRecurringComponent}\n */\n forkItem(recurrenceId, startDiff = null) {\n const occurrence = this.clone();\n occurrence.recurrenceManager = this.recurrenceManager;\n occurrence.primaryItem = this;\n\n // Exact match for master item or recurrence-exception\n if (occurrence.getReferenceRecurrenceId().compare(recurrenceId) === 0) {\n occurrence.isExactForkOfPrimary = true;\n }\n if (!occurrence.hasProperty('DTSTART')) {\n throw new TypeError('Can\\'t fork item without a DTSTART');\n }\n\n // Adjust RRULE COUNT if present\n const rrule = occurrence.getFirstPropertyFirstValue('RRULE');\n if (rrule?.count) {\n let index = occurrence.recurrenceManager.countAllOccurrencesBetween(occurrence.getReferenceRecurrenceId(), recurrenceId);\n index -= 1; // Don't count the forked occurrence\n rrule.count -= index;\n if (rrule.count < 1) {\n rrule.count = 1;\n }\n }\n if (occurrence.getFirstPropertyFirstValue('DTSTART').timezoneId !== recurrenceId.timezoneId) {\n const originalTimezone = occurrence.getFirstPropertyFirstValue('DTSTART').getICALTimezone();\n recurrenceId = recurrenceId.getInICALTimezone(originalTimezone);\n }\n occurrence.originalRecurrenceId = recurrenceId.clone();\n const dtStartValue = occurrence.getFirstPropertyFirstValue('DTSTART');\n let period = null;\n if (this._recurrenceManager.hasRecurrenceDate(false, recurrenceId)) {\n const recurrenceDate = this._recurrenceManager.getRecurrenceDate(false, recurrenceId);\n if (recurrenceDate instanceof PeriodValue) {\n period = recurrenceDate;\n }\n }\n let duration;\n if (occurrence.hasProperty('DTEND')) {\n const dtEndValue = occurrence.getFirstPropertyFirstValue('DTEND');\n duration = dtEndValue.subtractDateWithTimezone(dtStartValue);\n } else if (occurrence.hasProperty('DUE')) {\n const dueValue = occurrence.getFirstPropertyFirstValue('DUE');\n duration = dueValue.subtractDateWithTimezone(dtStartValue);\n }\n if (!(occurrence.isRecurrenceException() && occurrence.isExactForkOfPrimary)) {\n occurrence.updatePropertyWithValue('DTSTART', recurrenceId.clone());\n if (startDiff) {\n occurrence.startDate.addDuration(startDiff);\n }\n if (occurrence.hasProperty('DTEND')) {\n const dtEnd = occurrence.startDate.clone();\n dtEnd.addDuration(duration);\n occurrence.updatePropertyWithValue('DTEND', dtEnd);\n } else if (occurrence.hasProperty('DUE')) {\n const due = occurrence.startDate.clone();\n due.addDuration(duration);\n occurrence.updatePropertyWithValue('DUE', due);\n }\n if (period) {\n occurrence.deleteAllProperties('DTEND');\n occurrence.deleteAllProperties('DURATION');\n occurrence.updatePropertyWithValue('DTEND', period.end.clone());\n }\n }\n occurrence.resetDirty();\n return occurrence;\n }\n\n /**\n * Checks whether it's possible to create a recurrence exception for this event\n * It is possible\n *\n * @return {boolean}\n */\n canCreateRecurrenceExceptions() {\n let primaryIsRecurring = false;\n if (this.primaryItem && this.primaryItem.isRecurring()) {\n primaryIsRecurring = true;\n }\n return this.isRecurring() || this.modifiesFuture() || !this.isRecurring() && primaryIsRecurring;\n }\n\n /**\n * creates a recurrence exception based on this event\n * If the parameter thisAndAllFuture is set to true,\n * it will apply changes to this and all future occurrences\n *\n * @param {boolean} thisAndAllFuture Whether to create an exception for this and all future\n * @return {AbstractRecurringComponent[]} the AbstractRecurringComponent of the future events.\n * In case you set `thisAndAllFuture` to true, this will be an\n * AbstractRecurringComponent inside a entirely new calendar component\n */\n createRecurrenceException(thisAndAllFuture = false) {\n if (!this.canCreateRecurrenceExceptions()) {\n throw new Error('Can\\'t create recurrence-exceptions for non-recurring items');\n }\n const previousPrimaryItem = this.primaryItem;\n\n /**\n * The overall support for RANGE=THISANDFUTURE is really bad.\n * Instead, we have to create a new event/journal/task and\n * set an until date on the old one.\n *\n * Also see:\n * - https://github.com/nextcloud/calendar/issues/7#issuecomment-292574813\n * - https://github.com/nextcloud/calendar/issues/7#issuecomment-299169143\n *\n * Right now, this replaces all future occurrence modifications,\n * including recurrence-exceptions, RDATES and EXDATES.\n * This is also how other CUAs handle it, but i would be happy\n * to put that up for discussion.\n *\n * Keeping future RDates + their recurrence-exceptions would be rather easy.\n * Updating recurrence-exceptions, that are based off normal recurrence rules,\n * could be very expensive.\n */\n if (thisAndAllFuture) {\n if (this.isExactForkOfPrimary) {\n // master item\n if (this.primaryItem.isMasterItem()) {\n this._overridePrimaryItem();\n return [this, this];\n }\n }\n this.removeThisOccurrence(true);\n this.recurrenceManager = new RecurrenceManager(this);\n this._originalRecurrenceId = null;\n this.primaryItem = this;\n this.updatePropertyWithValue('UID', v4());\n this._cachedId = null;\n this.addRelation('SIBLING', previousPrimaryItem.uid);\n previousPrimaryItem.addRelation('SIBLING', this.uid);\n\n // delete to make sure all parameters are gone\n this.deleteAllProperties('RECURRENCE-ID');\n this.deleteAllProperties('RDATE');\n this.deleteAllProperties('EXDATE');\n this.updatePropertyWithValue('CREATED', DateTimeValue.fromJSDate(dateFactory(), true));\n this.updatePropertyWithValue('DTSTAMP', DateTimeValue.fromJSDate(dateFactory(), true));\n this.updatePropertyWithValue('LAST-MODIFIED', DateTimeValue.fromJSDate(dateFactory(), true));\n this.updatePropertyWithValue('SEQUENCE', 0);\n this._significantChange = false;\n this._dirty = false;\n this.root = this.root.constructor.fromEmpty();\n this.root.addComponent(this);\n this.parent = this.root;\n\n // this is a completely new event, we should set the RSVP of all attendees to true,\n // so that they receive an invitation to the new event, not only the cancellation of the old one\n for (const attendee of this.getAttendeeIterator()) {\n attendee.rsvp = true;\n }\n } else {\n // delete to make sure all parameters are gone\n this.deleteAllProperties('RECURRENCE-ID');\n this.recurrenceId = this.getReferenceRecurrenceId().clone();\n this.root.addComponent(this);\n this.recurrenceManager.relateRecurrenceException(this);\n this.primaryItem = this;\n this.deleteAllProperties('RDATE');\n this.deleteAllProperties('RRULE');\n this.deleteAllProperties('EXDATE');\n this.updatePropertyWithValue('CREATED', DateTimeValue.fromJSDate(dateFactory(), true));\n this.updatePropertyWithValue('DTSTAMP', DateTimeValue.fromJSDate(dateFactory(), true));\n this.updatePropertyWithValue('LAST-MODIFIED', DateTimeValue.fromJSDate(dateFactory(), true));\n this.updatePropertyWithValue('SEQUENCE', 0);\n if (this.recurrenceManager.hasRecurrenceDate(false, this.getReferenceRecurrenceId())) {\n const recurDate = this.recurrenceManager.getRecurrenceDate(false, this.getReferenceRecurrenceId());\n if (recurDate instanceof PeriodValue) {\n const valueDateTimeRecurDate = recurDate.start;\n this.recurrenceManager.removeRecurrenceDate(false, recurDate);\n this.recurrenceManager.addRecurrenceDate(false, valueDateTimeRecurDate);\n }\n }\n this.originalRecurrenceId = null;\n }\n return [previousPrimaryItem, this];\n }\n\n /**\n * Deletes this occurrence from the series of recurring events\n * If the parameter thisAndAllFuture is set to true,\n * it will remove this and all future occurrences\n *\n * @param {boolean} thisAndAllFuture Whether to create an exception for this and all future\n * @throws EmptyRecurrenceSetError Thrown, when deleting an occurrence results in no more events\n * @return {boolean} true if this deleted the last occurrence in set, false if there are occurrences left\n */\n removeThisOccurrence(thisAndAllFuture = false) {\n if (!this.isPartOfRecurrenceSet()) {\n // When deleting an object, that's not part of a recurring set,\n // the calendar-document would be empty.\n return true;\n }\n if (thisAndAllFuture) {\n // To get the UNTIL date, just deduct one second.\n // That's also how macOS does it, so this should be fairly\n // well supported among all clients\n const recurrenceId = this.getReferenceRecurrenceId().clone();\n const until = recurrenceId.getInTimezone(Timezone.utc);\n until.addDuration(DurationValue.fromSeconds(-1));\n for (const recurValue of this.recurrenceManager.getRecurrenceRuleIterator()) {\n recurValue.until = until.clone();\n }\n for (const recurDate of this.recurrenceManager.getRecurrenceDateIterator()) {\n let valueToCheck = recurDate;\n if (recurDate instanceof PeriodValue) {\n valueToCheck = valueToCheck.start;\n }\n if (recurrenceId.compare(valueToCheck) <= 0) {\n this.recurrenceManager.removeRecurrenceDate(false, recurDate);\n }\n }\n for (const exceptionDate of this.recurrenceManager.getRecurrenceDateIterator(true)) {\n if (recurrenceId.compare(exceptionDate) <= 0) {\n this.recurrenceManager.removeRecurrenceDate(true, exceptionDate);\n }\n }\n for (const exception of this.recurrenceManager.getRecurrenceExceptionList()) {\n if (recurrenceId.compare(exception.recurrenceId) <= 0) {\n this.root.deleteComponent(exception);\n this.recurrenceManager.removeRecurrenceException(exception);\n }\n }\n } else {\n // Make sure we don't leave orphaned recurrence-exceptions\n if (this.isRecurrenceException() && !this.modifiesFuture()) {\n this.root.deleteComponent(this);\n this.recurrenceManager.removeRecurrenceException(this);\n }\n\n // If this is based on a recurrence-date, simply delete it\n // otherwise add an exception-date\n if (this.recurrenceManager.hasRecurrenceDate(false, this.getReferenceRecurrenceId())) {\n const recurDate = this.recurrenceManager.getRecurrenceDate(false, this.getReferenceRecurrenceId());\n this.recurrenceManager.removeRecurrenceDate(false, recurDate);\n } else {\n this.recurrenceManager.addRecurrenceDate(true, this.getReferenceRecurrenceId().clone());\n }\n }\n return this.recurrenceManager.isEmptyRecurrenceSet();\n }\n\n /**\n * @inheritDoc\n */\n clone() {\n const comp = super.clone();\n comp.resetDirty();\n return comp;\n }\n\n /**\n * Adds a new attendee\n *\n * @param {AttendeeProperty} attendee The attendee property to add\n * @private\n * @return {boolean}\n */\n _addAttendee(attendee) {\n // Check for different Attendee objects with the same uri\n for (const a of this.getAttendeeIterator()) {\n if (a.email === attendee.email) {\n return false;\n }\n }\n this.addProperty(attendee);\n return true;\n }\n\n /**\n * Adds a new attendee based on their name and email-address\n *\n * @param {string} name The name of the attendee to add\n * @param {string} email The email-address of the attendee to add\n * @return {boolean}\n */\n addAttendeeFromNameAndEMail(name, email) {\n const attendeeProperty = AttendeeProperty.fromNameAndEMail(name, email);\n return this._addAttendee(attendeeProperty);\n }\n\n /**\n * Adds a new attendee based on their properties\n *\n * @param {string} name The name of the attendee to add\n * @param {string} email The email-address of the attendee to add\n * @param {string} role The role of the attendee to add\n * @param {string} userType The type of attendee to add\n * @param {boolean} rsvp Whether or not to request a response from the attendee\n * @return {boolean}\n */\n addAttendeeFromNameEMailRoleUserTypeAndRSVP(name, email, role, userType, rsvp) {\n const attendeeProperty = AttendeeProperty.fromNameEMailRoleUserTypeAndRSVP(name, email, role, userType, rsvp, false);\n return this._addAttendee(attendeeProperty);\n }\n\n /**\n * Sets the organiser property from common-name and email address\n *\n * @param {string} name The name of the organizer\n * @param {string} email The email-address of the organizer\n */\n setOrganizerFromNameAndEMail(name, email) {\n this.deleteAllProperties('ORGANIZER');\n this.addProperty(AttendeeProperty.fromNameAndEMail(name, email, true));\n }\n\n /**\n * Adds a new attachment from raw data\n *\n * @param {string} data The data of the attachment\n * @param {string} formatType The mime-type of the attachment\n */\n addAttachmentFromData(data, formatType = null) {\n this.addProperty(AttachmentProperty.fromData(data, formatType));\n }\n\n /**\n * Adds a new attachment from a link\n *\n * @param {string} uri The URI of the attachment\n * @param {string} formatType The mime-type of the attachment\n */\n addAttachmentFromLink(uri, formatType = null) {\n this.addProperty(AttachmentProperty.fromLink(uri, formatType));\n }\n\n /**\n * Adds a new contact\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.2\n *\n * @param {string} contact The textual contact description to add\n */\n addContact(contact) {\n this.addProperty(new TextProperty('CONTACT', contact));\n }\n\n /**\n * Adds a new comment\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.4\n *\n * @param {string} comment The comment to add\n */\n addComment(comment) {\n this.addProperty(new TextProperty('COMMENT', comment));\n }\n\n /**\n * Adds a new image from raw data\n *\n * @param {string} data Data of the image to add\n * @param {string=} display What display-type the image is optimized for\n * @param {string=} formatType The mime-type of the image\n */\n addImageFromData(data, display = null, formatType = null) {\n this.addProperty(ImageProperty.fromData(data, display, formatType));\n }\n\n /**\n * Adds a new image from a link\n *\n * @param {string} uri The URI of the image to add\n * @param {string=} display What display-type the image is optimized for\n * @param {string=} formatType The mime-type of the image\n */\n addImageFromLink(uri, display = null, formatType = null) {\n this.addProperty(ImageProperty.fromLink(uri, display, formatType));\n }\n\n /**\n * Creates a new RELATED-TO property based on a relation-type and id\n * and adds it to this object\n *\n * @param {string} relType The type of relation to add\n * @param {string} relId The id of the related calendar-document\n */\n addRelation(relType, relId) {\n this.addProperty(RelationProperty.fromRelTypeAndId(relType, relId));\n }\n\n /**\n * Creates a new REQUEST-STATUS property based on code and message\n * and adds it to this object\n *\n * @param {number} code The status-code of the request status\n * @param {string} message The message of the request status\n */\n addRequestStatus(code, message) {\n this.addProperty(RequestStatusProperty.fromCodeAndMessage(code, message));\n }\n\n /**\n * Adds a new absolute alarm based on action and trigger time\n *\n * @param {string} action The type of alarm Action\n * @param {DateTimeValue} alarmTime The trigger time of the alarm\n * @return {AlarmComponent}\n */\n addAbsoluteAlarm(action, alarmTime) {\n const alarmComp = new AlarmComponent('VALARM', [['action', action], TriggerProperty.fromAbsolute(alarmTime)]);\n this.addComponent(alarmComp);\n return alarmComp;\n }\n\n /**\n * Adds a new relative alarm based on action, trigger time and relativeTo parameter\n *\n * @param {string} action The type of alarm Action\n * @param {DurationValue} alarmOffset The trigger time of the alarm\n * @param {boolean=} relatedToStart Whether or not the alarm is related to the event's start\n * @return {AlarmComponent}\n */\n addRelativeAlarm(action, alarmOffset, relatedToStart = true) {\n const alarmComp = new AlarmComponent('VALARM', [['action', action], TriggerProperty.fromRelativeAndRelated(alarmOffset, relatedToStart)]);\n this.addComponent(alarmComp);\n return alarmComp;\n }\n\n /**\n * Marks a certain property as edited\n *\n * @param {string} propertyName The name of the property\n */\n markPropertyAsDirty(propertyName) {\n this.markDirty();\n\n // Properties that must be considered a significant change\n // according to RFC 5546 Section 2.1.4\n const props = ['DTSTART', 'DTEND', 'DURATION', 'RRULE', 'RDATE', 'EXDATE', 'STATUS', ...getConfig('property-list-significant-change', [])];\n if (props.includes(uc(propertyName))) {\n this.markChangesAsSignificant();\n }\n }\n\n /**\n * Marks a certain component as edited\n *\n * @param {string} componentName The name of the component\n */\n markSubComponentAsDirty(componentName) {\n this.markDirty();\n if (getConfig('component-list-significant-change', []).includes(componentName)) {\n this.markChangesAsSignificant();\n }\n }\n\n /**\n * Returns whether or not this component is dirty\n *\n * @return {boolean}\n */\n isDirty() {\n return this._dirty || this._significantChange;\n }\n\n /**\n * Marks this object as dirty\n */\n markDirty() {\n this._dirty = true;\n }\n\n /**\n * Marks changes as significant. Can be called by the program using this lib\n */\n markChangesAsSignificant() {\n this._significantChange = true;\n }\n\n /**\n * Updates the event after modifications.\n *\n * @return {boolean} true if last-modified was updated\n */\n undirtify() {\n if (!this.isDirty()) {\n return false;\n }\n if (!this.hasProperty('SEQUENCE')) {\n this.sequence = 0;\n }\n this.updatePropertyWithValue('DTSTAMP', DateTimeValue.fromJSDate(dateFactory(), true));\n this.updatePropertyWithValue('LAST-MODIFIED', DateTimeValue.fromJSDate(dateFactory(), true));\n if (this._significantChange) {\n this.sequence++;\n }\n this.resetDirty();\n return true;\n }\n\n /**\n * Resets the dirty indicators without updating DTSTAMP or LAST-MODIFIED\n */\n resetDirty() {\n this._dirty = false;\n this._significantChange = false;\n }\n\n /**\n * @inheritDoc\n */\n updatePropertyWithValue(propertyName, value) {\n super.updatePropertyWithValue(propertyName, value);\n if (uc(propertyName) === 'UID') {\n this._cachedId = null;\n }\n this.markPropertyAsDirty(propertyName);\n }\n\n /**\n * @inheritDoc\n */\n addProperty(property) {\n this.markPropertyAsDirty(property.name);\n property.subscribe(() => this.markPropertyAsDirty(property.name));\n return super.addProperty(property);\n }\n\n /**\n * @inheritDoc\n */\n deleteProperty(property) {\n this.markPropertyAsDirty(property.name);\n return super.deleteProperty(property);\n }\n\n /**\n * @inheritDoc\n */\n deleteAllProperties(propertyName) {\n this.markPropertyAsDirty(propertyName);\n return super.deleteAllProperties(propertyName);\n }\n\n /**\n * @inheritDoc\n */\n addComponent(component) {\n this.markSubComponentAsDirty(component.name);\n component.subscribe(() => this.markSubComponentAsDirty(component.name));\n return super.addComponent(component);\n }\n\n /**\n * @inheritDoc\n */\n deleteComponent(component) {\n this.markSubComponentAsDirty(component.name);\n return super.deleteComponent(component);\n }\n\n /**\n * @inheritDoc\n */\n deleteAllComponents(componentName) {\n this.markSubComponentAsDirty(componentName);\n return super.deleteAllComponents(componentName);\n }\n\n /**\n * Gets a recurrence-id that has to be used to refer to this event.\n * This is used for recurrence-management\n *\n * @return {DateTimeValue|null}\n */\n getReferenceRecurrenceId() {\n if (this.originalRecurrenceId) {\n return this.originalRecurrenceId;\n } else if (this.recurrenceId) {\n return this.recurrenceId;\n } else if (this.startDate) {\n return this.startDate;\n }\n return null;\n }\n\n /**\n * Overrides the master item with this one\n *\n * @private\n */\n _overridePrimaryItem() {\n const oldStartDate = this.primaryItem.startDate;\n for (const property of this.primaryItem.getPropertyIterator()) {\n this.primaryItem.deleteProperty(property);\n }\n for (const property of this.getPropertyIterator()) {\n this.primaryItem.addProperty(property);\n }\n this.recurrenceManager.resetCache();\n if (this.startDate.compare(oldStartDate) !== 0) {\n this.recurrenceManager.updateStartDateOfMasterItem(this.startDate, oldStartDate);\n }\n }\n\n /**\n * @inheritDoc\n */\n static _getConstructorForComponentName(componentName) {\n return getConstructorForComponentName$1(componentName);\n }\n\n /**\n * @inheritDoc\n */\n static fromICALJs(...args) {\n const comp = super.fromICALJs(...args);\n comp.resetDirty();\n return comp;\n }\n}\n\n/**\n * Date-Time stamp of this object.\n * It has different meaning, based on whether or not a method is defined\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.7.2\n *\n * @name EventComponent#stampTime\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(AbstractRecurringComponent.prototype, {\n name: 'stampTime',\n iCalendarName: 'DTSTAMP'\n});\n\n/**\n * Recurrence-ID of this object, used for recurrence-exceptions\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.4\n *\n * @name EventComponent#recurrenceId\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(AbstractRecurringComponent.prototype, {\n name: 'recurrenceId',\n iCalendarName: 'RECURRENCE-ID'\n});\n\n/**\n * Special color for this event / journal / task\n *\n * @url https://tools.ietf.org/html/rfc7986#section-5.9\n *\n * @name EventComponent#color\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(AbstractRecurringComponent.prototype, 'color');\n\n/**\n * Creation Time of this event / journal / task\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.7.1\n *\n * @name EventComponent#creationTime\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(AbstractRecurringComponent.prototype, {\n name: 'creationTime',\n iCalendarName: 'CREATED'\n});\n\n/**\n * The time this event / journal / task\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.7.3\n *\n * @name EventComponent#modificationTime\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(AbstractRecurringComponent.prototype, {\n name: 'modificationTime',\n iCalendarName: 'LAST-MODIFIED'\n});\n\n/**\n * Organizer of this event / journal / task\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.3\n *\n * @name EventComponent#organizer\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(AbstractRecurringComponent.prototype, 'organizer');\n\n/**\n * Revision of this this event / journal / task\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.7.4\n *\n * @name EventComponent#sequence\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(AbstractRecurringComponent.prototype, 'sequence');\n\n/**\n * Status of this event / journal / task\n * This indicates whether an event is tentative / confirmed / cancelled\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.11\n *\n * @name EventComponent#status\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(AbstractRecurringComponent.prototype, 'status');\n\n/**\n * URL of a more dynamic rendition of this event / journal / task\n * DO NOT use this to simply point to a website merely related.\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.6\n *\n * @name EventComponent#url\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(AbstractRecurringComponent.prototype, 'url');\n\n/**\n * Title of this event / journal / task\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.12\n *\n * @name EventComponent#title\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(AbstractRecurringComponent.prototype, {\n name: 'title',\n iCalendarName: 'SUMMARY'\n});\n\n/**\n * Access class of this event / journal / task\n * This determines what other users can see when sharing\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.3\n *\n * @name EventComponent#accessClass\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(AbstractRecurringComponent.prototype, {\n name: 'accessClass',\n iCalendarName: 'class',\n allowedValues: ['PUBLIC', 'PRIVATE', 'CONFIDENTIAL'],\n defaultValue: 'PUBLIC',\n unknownValue: 'PRIVATE'\n});\n\n/**\n * Returns an iterator over all categories\n * If the parameter lang is given, it will only\n * return an iterator for Categories matching that language\n *\n * @name AbstractRecurringComponent#getCategoryIterator\n * @function\n * @param {string=} lang\n * @return {IterableIterator}\n */\n\n/**\n * Returns a list of all categories\n * If the parameter lang is given, it will only\n * return an iterator for Categories matching that language\n *\n * @name AbstractRecurringComponent#getCategoryList\n * @function\n * @param {string=} lang\n * @return {string[]}\n */\n\n/**\n * Adds a new category\n *\n * @name AbstractRecurringComponent#addCategory\n * @function\n * @param {string} category\n * @param {string=} lang\n */\n\n/**\n * Removes a category\n *\n * @name AbstractRecurringComponent#removeCategory\n * @function\n * @param {string} category\n * @param {string=} lang\n */\n\n/**\n * Clear all categories of a given language\n *\n * @name AbstractRecurringComponent#clearAllCategories\n * @function\n */\nadvertiseMultiValueStringPropertySeparatedByLang(AbstractRecurringComponent.prototype, {\n name: 'category',\n pluralName: 'categories',\n iCalendarName: 'CATEGORIES'\n});\n\n/**\n * Returns an iterator over all attendees\n *\n * @name AbstractRecurringComponent#getAttendeeIterator\n * @function\n * @return {IterableIterator}\n */\n\n/**\n * Gets a list of all attendees\n *\n * @name AbstractRecurringComponent#getAttendeeList\n * @function\n * @return {AttachmentProperty[]}\n */\n\n/**\n * Removes an attendee from this event / journal / task\n *\n * @name AbstractRecurringComponent#removeAttendee\n * @function\n * @param {AttendeeProperty} attendee\n */\n\n/**\n * Removes all attendees from this event / journal / task\n *\n * @name AbstractRecurringComponent#clearAllAttendees\n * @function\n */\nadvertiseMultipleOccurrenceProperty(AbstractRecurringComponent.prototype, {\n name: 'attendee'\n});\n\n/**\n * Returns an iterator over all attachments\n *\n * @name AbstractRecurringComponent#getAttachmentIterator\n * @function\n * @return {IterableIterator}\n */\n\n/**\n * Gets a list of all attachments\n *\n * @name AbstractRecurringComponent#getAttachmentList\n * @function\n * @return {AttachmentProperty[]}\n */\n\n/**\n * Removes one attachment from this event / journal / task\n *\n * @name AbstractRecurringComponent#removeAttachment\n * @function\n * @param {AttachmentProperty} attachment\n */\n\n/**\n * Removes all attachments from this event / journal / task\n *\n * @name AbstractRecurringComponent#clearAllAttachments\n * @function\n */\nadvertiseMultipleOccurrenceProperty(AbstractRecurringComponent.prototype, {\n name: 'attachment',\n iCalendarName: 'ATTACH'\n});\n\n/**\n * Returns an iterator over all relation properties\n *\n * @name AbstractRecurringComponent#getRelationIterator\n * @function\n * @return {IterableIterator}\n */\n\n/**\n * Returns a list of all relation properties\n *\n * @name AbstractRecurringComponent#getRelationList\n * @function\n * @return {RelationProperty[]}\n */\n\n/**\n * Removes a relation from this event / journal / task\n *\n * @name AbstractRecurringComponent#removeRelation\n * @function\n * @param {RelationProperty} relation\n */\n\n/**\n * Removes all relations from this event / journal / task\n *\n * @name AbstractRecurringComponent#clearAllRelations\n * @function\n */\nadvertiseMultipleOccurrenceProperty(AbstractRecurringComponent.prototype, {\n name: 'relation',\n iCalendarName: 'RELATED-TO'\n});\n\n/**\n * Returns an iterator over all comments in this event / journal / task\n *\n * @name AbstractRecurringComponent#getCommentIterator\n * @function\n * @return {IterableIterator}\n */\n\n/**\n * Returns a list of all comments in this event / journal / task\n *\n * @name AbstractRecurringComponent#getCommentList\n * @function\n * @return {TextProperty[]}\n */\n\n/**\n * Removes a comment from this event / journal / task\n *\n * @name AbstractRecurringComponent#removeComment\n * @function\n * @param {TextProperty} comment\n */\n\n/**\n * Removes all comments from this event / journal / task\n *\n * @name AbstractRecurringComponent#clearAllComments\n * @function\n */\nadvertiseMultipleOccurrenceProperty(AbstractRecurringComponent.prototype, 'comment');\n\n/**\n * Returns an iterator over all contacts referenced in this event / journal / task\n *\n * @name AbstractRecurringComponent#getContactIterator\n * @function\n * @return {IterableIterator}\n */\n\n/**\n * Returns a list of all contacts referenced in this event / journal / task\n *\n * @name AbstractRecurringComponent#getContactList\n * @function\n * @return {TextProperty[]}\n */\n\n/**\n * Removes one contact from this event / journal / task\n *\n * @name AbstractRecurringComponent#removeContact\n * @function\n * @param {TextProperty} contact\n */\n\n/**\n * Removes all contacts from this event / journal / task\n *\n * @name AbstractRecurringComponent#clearAllContacts\n * @function\n */\nadvertiseMultipleOccurrenceProperty(AbstractRecurringComponent.prototype, 'contact');\n\n/**\n * Returns an iterator over all image properties\n *\n * @name AbstractRecurringComponent#getImageIterator\n * @function\n * @return {IterableIterator}\n */\n\n/**\n * Returns a list of all image properties\n *\n * @name AbstractRecurringComponent#getImageList\n * @function\n * @return {ImageProperty[]}\n */\n\n/**\n * Removes one image from this event / journal / task\n *\n * @name AbstractRecurringComponent#removeImage\n * @function\n * @param {ImageProperty} image\n */\n\n/**\n * Removes all images from this event / journal / task\n *\n * @name AbstractRecurringComponent#clearAllImages\n * @function\n */\nadvertiseMultipleOccurrenceProperty(AbstractRecurringComponent.prototype, 'image');\n\n/**\n * Returns an iterator over all request status\n *\n * @name AbstractRecurringComponent#getRequestStatusIterator\n * @function\n * @return {IterableIterator}\n */\n\n/**\n * Returns a list of all request status\n *\n * @name AbstractRecurringComponent#getRequestStatusList\n * @function\n * @return {RequestStatusProperty[]}\n */\n\n/**\n * Removes one request status from this event / journal / task\n *\n * @name AbstractRecurringComponent#removeRequestStatus\n * @function\n * @param {RequestStatusProperty} requestStatus\n */\n\n/**\n * Removes all request status from this event / journal / task\n *\n * @name AbstractRecurringComponent#clearAllRequestStatus\n * @function\n */\nadvertiseMultipleOccurrenceProperty(AbstractRecurringComponent.prototype, {\n name: 'requestStatus',\n pluralName: 'requestStatus',\n iCalendarName: 'REQUEST-STATUS'\n});\n\n/**\n * Returns an iterator of all alarms\n *\n * @name AbstractRecurringComponent#getAlarmIterator\n * @function\n * @return {IterableIterator}\n */\n\n/**\n * Returns a list of all alarms\n *\n * @name AbstractRecurringComponent#getAlarmList\n * @function\n * @return {AlarmComponent[]}\n */\n\n/**\n * Removes an alarm from this event / journal / task\n *\n * @name AbstractRecurringComponent#removeAlarm\n * @function\n * @param {AlarmComponent} alarm\n */\n\n/**\n * Removes all alarms from this event / journal / task\n *\n * @name AbstractRecurringComponent#clearAllAlarms\n * @function\n */\nadvertiseComponent(AbstractRecurringComponent.prototype, 'alarm');\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * Gets kind of birthday event\n * returns \"BDAY\", \"DEATHDATE\", \"ANNIVERSARY\"\n * or null if this is not a birthday event\n *\n * @param {EventComponent} eventComponent The eventComponent of the birthday event\n * @return {null|string}\n */\nfunction getTypeOfBirthdayEvent(eventComponent) {\n return eventComponent.getFirstPropertyFirstValue('X-NEXTCLOUD-BC-FIELD-TYPE');\n}\n\n/**\n * Gets icon for the birthday type\n *\n * @param {EventComponent} eventComponent The eventComponent of the birthday event\n * @return {string|null}\n */\nfunction getIconForBirthday(eventComponent) {\n const birthdayType = getTypeOfBirthdayEvent(eventComponent);\n switch (birthdayType) {\n case 'BDAY':\n return '🎂';\n case 'DEATHDATE':\n return '⚰️';\n case 'ANNIVERSARY':\n return '💍';\n default:\n return null;\n }\n}\n\n/**\n * Returns the age of the birthday person or null of no birth-year given\n *\n * @param {EventComponent} eventComponent The eventComponent of the birthday event\n * @param {number} yearOfOccurrence The year to calculate the age for\n * @return {null|number}\n */\nfunction getAgeOfBirthday(eventComponent, yearOfOccurrence) {\n if (!eventComponent.hasProperty('X-NEXTCLOUD-BC-YEAR')) {\n return null;\n }\n const yearOfBirth = eventComponent.getFirstPropertyFirstValue('X-NEXTCLOUD-BC-YEAR');\n return parseInt(yearOfOccurrence, 10) - parseInt(yearOfBirth, 10);\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class EventComponent\n * @classdesc\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.6.1\n */\nclass EventComponent extends AbstractRecurringComponent {\n /**\n * Returns whether this event is an all-day event\n *\n * @return {boolean}\n */\n isAllDay() {\n return this.startDate.isDate && this.endDate.isDate;\n }\n\n /**\n * Checks whether it's possible to switch from date-time to date or vise-versa\n *\n * @return {boolean}\n */\n canModifyAllDay() {\n return !this.recurrenceManager.masterItem.isRecurring();\n }\n\n /**\n * Gets the calculated end-date of the event\n *\n * Quote from RFC 5545 3.6.1:\n * The \"DTSTART\" property for a \"VEVENT\" specifies the inclusive\n * start of the event. For recurring events, it also specifies the\n * very first instance in the recurrence set. The \"DTEND\" property\n * for a \"VEVENT\" calendar component specifies the non-inclusive end\n * of the event. For cases where a \"VEVENT\" calendar component\n * specifies a \"DTSTART\" property with a DATE value type but no\n * \"DTEND\" nor \"DURATION\" property, the event's duration is taken to\n * be one day. For cases where a \"VEVENT\" calendar component\n * specifies a \"DTSTART\" property with a DATE-TIME value type but no\n * \"DTEND\" property, the event ends on the same calendar date and\n * time of day specified by the \"DTSTART\" property.\n *\n * @return {DateTimeValue}\n */\n get endDate() {\n if (this.hasProperty('dtend')) {\n return this.getFirstPropertyFirstValue('dtend');\n }\n const dtend = this.startDate.clone();\n if (this.hasProperty('duration')) {\n dtend.addDuration(this.getFirstPropertyFirstValue('duration'));\n } else if (this.startDate.isDate) {\n dtend.addDuration(DurationValue.fromSeconds(60 * 60 * 24));\n } // There is nothing to do when this event is not allday\n\n return dtend;\n }\n\n /**\n * Sets the end time of the event\n *\n * @param {DateTimeValue} end The end of the event\n */\n set endDate(end) {\n this.deleteAllProperties('duration');\n this.updatePropertyWithValue('dtend', end);\n }\n\n /**\n * Gets the calculated duration of the event\n *\n * @return {DurationValue}\n */\n get duration() {\n if (this.hasProperty('duration')) {\n return this.getFirstPropertyFirstValue('duration');\n }\n return this.startDate.subtractDateWithTimezone(this.endDate);\n }\n\n /**\n * Sets the calculated duration of the event\n *\n * @param {DurationValue} duration The duration of the event\n */\n set duration(duration) {\n this.deleteAllProperties('dtend');\n this.updatePropertyWithValue('duration', duration);\n }\n\n /**\n * Sets the geographical position based on latitude and longitude\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.6\n *\n * @param {number} lat - latitude\n * @param {number} long - longitude\n */\n setGeographicalPositionFromLatitudeAndLongitude(lat, long) {\n this.deleteAllProperties('GEO');\n this.addProperty(GeoProperty.fromPosition(lat, long));\n }\n\n /**\n * Adds a new conference property based on URI, label and features\n *\n * @url https://tools.ietf.org/html/rfc7986#section-5.11\n *\n * @param {string} uri The URI of the conference system\n * @param {string=} label The label for the conference system\n * @param {string[]=} features The features of the conference system\n */\n addConference(uri, label = null, features = null) {\n this._modify();\n this.addProperty(ConferenceProperty.fromURILabelAndFeatures(uri, label, features));\n }\n\n /**\n * Adds a duration to the start of the event\n *\n * @param {DurationValue} duration The duration to add\n */\n addDurationToStart(duration) {\n this.startDate.addDuration(duration);\n }\n\n /**\n * Adds a duration to the end of the event\n *\n * @param {DurationValue} duration The duration to add\n */\n addDurationToEnd(duration) {\n const endDate = this.endDate;\n endDate.addDuration(duration);\n this.endDate = endDate;\n }\n\n /**\n * Shifts the entire event by the given duration\n *\n * @param {DurationValue} delta The duration to shift event by\n * @param {boolean} allDay Whether the updated event should be all-day or not\n * @param {Timezone} defaultTimezone The default timezone if moving from all-day to timed event\n * @param {DurationValue} defaultAllDayDuration The default all-day duration if moving from timed to all-day\n * @param {DurationValue} defaultTimedDuration The default timed duration if moving from all-day to timed\n */\n shiftByDuration(delta, allDay, defaultTimezone, defaultAllDayDuration, defaultTimedDuration) {\n const currentAllDay = this.isAllDay();\n if (currentAllDay !== allDay && !this.canModifyAllDay()) {\n throw new TypeError('Can\\'t modify all-day of this event');\n }\n this.startDate.isDate = allDay;\n this.startDate.addDuration(delta);\n\n // If this event was moved from the all-day area into the time-grid,\n // then we have to add a timezone and the default duration\n if (currentAllDay && !allDay) {\n this.startDate.replaceTimezone(defaultTimezone);\n this.endDate = this.startDate.clone();\n this.endDate.addDuration(defaultTimedDuration);\n }\n\n // If this event was moved from the time-grid into the all-day area,\n // then we have to change the default duration\n if (!currentAllDay && allDay) {\n this.endDate = this.startDate.clone();\n this.endDate.addDuration(defaultAllDayDuration);\n }\n\n // If this event was only moved inside the time-grid or only inside\n // the all-day area, then we only have to adjust the end-date\n if (currentAllDay === allDay) {\n const endDate = this.endDate;\n endDate.addDuration(delta);\n this.endDate = endDate;\n }\n }\n\n /**\n * Checks if this is a birthday event\n *\n * @return {boolean}\n */\n isBirthdayEvent() {\n return getTypeOfBirthdayEvent(this) === 'BDAY';\n }\n\n /**\n * Gets the icon to the birthday event\n *\n * @return {string}\n */\n getIconForBirthdayEvent() {\n return getIconForBirthday(this);\n }\n\n /**\n * Calculates the age of the birthday\n *\n * @return {number}\n */\n getAgeForBirthdayEvent() {\n return getAgeOfBirthday(this, this.startDate.year);\n }\n\n /**\n * Serializes the entire series to ICS\n *\n * @return {string}\n */\n toICSEntireSeries() {\n return this.root.toICS();\n }\n\n /**\n * Serializes exactly this recurrence to ICS\n * It removes all recurrence information\n *\n * @return {string}\n */\n toICSThisOccurrence() {\n const clone = this.clone();\n clone.deleteAllProperties('RRULE');\n clone.deleteAllProperties('EXRULE');\n clone.deleteAllProperties('RDATE');\n clone.deleteAllProperties('EXDATE');\n clone.deleteAllProperties('RECURRENCE-ID');\n clone.root = clone.root.constructor.fromEmpty();\n clone.parent = clone.root;\n clone.root.addComponent(clone);\n return clone.root.toICS();\n }\n\n /**\n * Checks if this event is in a given time-frame\n *\n * @param {DateTimeValue} start Start of time-range to check\n * @param {DateTimeValue} end End of time-range to check\n * @return {boolean}\n */\n isInTimeFrame(start, end) {\n return start.compare(this.endDate) <= 0 && end.compare(this.startDate) >= 0;\n }\n}\n\n/**\n * Time-transparency of this event.\n * If set to TRANSPARENT, this event will be ignored for FREE/BUSY calculations.\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.2.7\n *\n * @name EventComponent#timeTransparency\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(EventComponent.prototype, {\n name: 'timeTransparency',\n iCalendarName: 'TRANSP',\n allowedValues: ['OPAQUE', 'TRANSPARENT'],\n defaultValue: 'OPAQUE'\n});\n\n/**\n * Description of this event.\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.5\n *\n * @name EventComponent#description\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(EventComponent.prototype, 'description');\n\n/**\n * Geographical position of this event\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.6\n *\n * @name EventComponent#geographicalPosition\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(EventComponent.prototype, {\n name: 'geographicalPosition',\n iCalendarName: 'GEO'\n});\n\n/**\n * Location that this event takes place in\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.7\n *\n * @name EventComponent#location\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(EventComponent.prototype, 'location');\n\n/**\n * Priority of this event\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.9\n *\n * @name EventComponent#priority\n * @type Number\n */\nadvertiseSingleOccurrenceProperty(EventComponent.prototype, {\n name: 'priority',\n allowedValues: Array(9).keys(),\n defaultValue: 0,\n unknownValue: 0\n});\n\n/**\n * Returns an iterator over all resources\n * If the parameter lang is given, it will only\n * return an iterator for Resources matching that language\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.10\n *\n * @name EventComponent#getResourceIterator\n * @function\n * @param {string=} lang\n * @return {IterableIterator}\n */\n\n/**\n * Returns a list of all resources\n * If the parameter lang is given, it will only\n * return an iterator for resources matching that language\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.10\n *\n * @name EventComponent#getResourceList\n * @function\n * @param {string=} lang\n * @return {string[]}\n */\n\n/**\n * Adds a resource\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.10\n *\n * @name EventComponent#addResource\n * @function\n * @param {string} resource\n * @param {string=} lang\n */\n\n/**\n * Removes a resource\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.10\n *\n * @name EventComponent#removeResource\n * @function\n * @param {string} resource\n * @param {string=} lang\n */\n\n/**\n * Removes all resources from this event\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.10\n *\n * @name EventComponent#clearAllResources\n * @function\n * @param {string=} lang\n */\nadvertiseMultiValueStringPropertySeparatedByLang(EventComponent.prototype, {\n name: 'resource',\n iCalendarName: 'RESOURCES'\n});\n\n/**\n * Gets an iterator over all conference properties\n *\n * @url https://tools.ietf.org/html/rfc7986#section-5.11\n *\n * @name EventComponent#getConferenceIterator\n * @function\n * @return {IterableIterator}\n */\n\n/**\n * Gets a list of all conference properties\n *\n * @url https://tools.ietf.org/html/rfc7986#section-5.11\n *\n * @name EventComponent#getConferenceList\n * @function\n * @return {ConferenceProperty[]}\n */\n\n/**\n * Removes a conference from this event\n *\n * @url https://tools.ietf.org/html/rfc7986#section-5.11\n *\n * @name EventComponent#removeConference\n * @function\n * @param {ConferenceProperty} conference\n */\n\n/**\n * Removes all conferences from this event\n *\n * @url https://tools.ietf.org/html/rfc7986#section-5.11\n *\n * @name EventComponent#clearAllConferences\n * @function\n */\nadvertiseMultipleOccurrenceProperty(EventComponent.prototype, 'conference');\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class FreeBusyComponent\n * @classdesc\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.6.4\n */\nclass FreeBusyComponent extends AbstractComponent {\n /**\n * Gets the start-date of the FreeBusy component\n *\n * @return {DateTimeValue}\n */\n get startDate() {\n return this.getFirstPropertyFirstValue('DTSTART');\n }\n\n /**\n * Sets the start-date of the FreeBusy component\n *\n * @param {DateTimeValue} startDate The start of the queried time-range\n */\n set startDate(startDate) {\n this._modify();\n this.updatePropertyWithValue('DTSTART', startDate.getInTimezone(Timezone.utc));\n }\n\n /**\n * Gets the end-date of the FreeBusy component\n *\n * @return {DateTimeValue}\n */\n get endDate() {\n return this.getFirstPropertyFirstValue('DTEND');\n }\n\n /**\n * Sets the start-date of the FreeBusy component\n *\n * @param {DateTimeValue} endDate The end of the queried time-range\n */\n set endDate(endDate) {\n this._modify();\n this.updatePropertyWithValue('DTEND', endDate.getInTimezone(Timezone.utc));\n }\n\n /**\n * Gets an iterator over all FreeBusyProperties\n */\n *getFreeBusyIterator() {\n yield* this.getPropertyIterator('FREEBUSY');\n }\n\n /**\n * Adds a new attendee based on their name and email-address\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.1\n *\n * @param {string} name The name of the attendee to add\n * @param {string} email The email-address of the attendee to add\n */\n addAttendeeFromNameAndEMail(name, email) {\n this._modify();\n this.addProperty(AttendeeProperty.fromNameAndEMail(name, email));\n }\n\n /**\n * Sets the organiser property from common-name and email address\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.3\n *\n * @param {string} name The name of the organizer\n * @param {string} email The email-address of the organizer\n */\n setOrganizerFromNameAndEMail(name, email) {\n this._modify();\n this.deleteAllProperties('ORGANIZER');\n this.addProperty(AttendeeProperty.fromNameAndEMail(name, email, true));\n }\n}\n\n/**\n * The organizer of this FreeBusy component\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.3\n *\n * @name FreeBusyComponent#organizer\n * @type {AttendeeProperty}\n */\nadvertiseSingleOccurrenceProperty(FreeBusyComponent.prototype, 'organizer');\n\n/**\n * The UID of this FreeBusy component\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.7\n *\n * @name FreeBusyComponent#organizer\n * @type {AttendeeProperty}\n */\nadvertiseSingleOccurrenceProperty(FreeBusyComponent.prototype, 'uid');\n\n/**\n * Returns an iterator of all attendees\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.1\n *\n * @name FreeBusyComponent#getAttendeeIterator\n * @function\n * @return {IterableIterator}\n */\n\n/**\n * Returns a list of all attendees\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.1\n *\n * @name FreeBusyComponent#getAttendeeList\n * @function\n * @return {AttendeeProperty[]}\n */\n\n/**\n * Removes an attendee\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.1\n *\n * @name FreeBusyComponent#removeAttendee\n * @function\n * @param {AttendeeProperty} attendee\n */\n\n/**\n * Removes all attendees\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.4.1\n *\n * @name FreeBusyComponent#clearAllAttendees\n * @function\n */\nadvertiseMultipleOccurrenceProperty(FreeBusyComponent.prototype, 'attendee');\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class JournalComponent\n * @classdesc\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.6.3\n */\nclass JournalComponent extends AbstractRecurringComponent {\n /**\n * Adds a new description property\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.5\n *\n * @param {string} description The description text\n */\n addDescription(description) {\n this.addProperty(new TextProperty('DESCRIPTION', description));\n }\n}\n\n/**\n * Gets an iterator over all description properties\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.5\n *\n * @name JournalComponent#getDescriptionIterator\n * @function\n * @return {IterableIterator}\n */\n\n/**\n * Gets a list of all description properties\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.5\n *\n * @name JournalComponent#getDescriptionList\n * @function\n * @return {ConferenceProperty[]}\n */\n\n/**\n * Removes a description from this event\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.5\n *\n * @name JournalComponent#removeDescription\n * @function\n * @param {ConferenceProperty} conference\n */\n\n/**\n * Removes all descriptions from this event\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.5\n *\n * @name JournalComponent#clearAllDescriptions\n * @function\n */\nadvertiseMultipleOccurrenceProperty(JournalComponent.prototype, 'description');\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class TimezoneComponent\n * @classdesc\n *\n * There are no advertised properties / components for the TimezoneComponent,\n * since we don't care about it.\n * Editing / accessing the timezone information directly is not a use-case\n * All the timezone-handling is done by the underlying ICAL.JS\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.6.5\n */\nclass TimezoneComponent extends AbstractComponent {\n /**\n * Returns a calendar-js Timezone object\n *\n * @return {Timezone}\n */\n toTimezone() {\n return new Timezone(this.toICALJs());\n }\n}\n\n/**\n * The timezoneId of this timezone-component\n *\n * @name TimezoneComponent#timezoneId\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(TimezoneComponent.prototype, {\n name: 'timezoneId',\n iCalendarName: 'tzid'\n});\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class ToDoComponent\n * @classdesc\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.6.2\n */\nclass ToDoComponent extends AbstractRecurringComponent {\n /**\n * Returns whether this event is an all-day event\n *\n * @return {boolean}\n */\n isAllDay() {\n const propertiesToCheck = ['DTSTART', 'DUE'];\n for (const propertyToCheck of propertiesToCheck) {\n if (this.hasProperty(propertyToCheck)) {\n return this.getFirstPropertyFirstValue(propertyToCheck).isDate;\n }\n }\n\n // If a task is not associated with any date, it is defined to\n // occur on any successive date until it is completed.\n // We are treating it as all-day in that case.\n return true;\n }\n\n /**\n * Checks whether it's possible to switch from date-time to date or vise-versa\n *\n * @return {boolean}\n */\n canModifyAllDay() {\n if (!this.hasProperty('dtstart') && !this.hasProperty('due')) {\n return false;\n }\n return !this.recurrenceManager.masterItem.isRecurring();\n }\n\n /**\n * Gets the calculated end-date of the task\n *\n * If there is a due-date, we will just return that.\n * If there is a start-date and a duration, we will\n * calculate the end-date based on that.\n *\n * If there is neither a due-date nor a combination\n * of start-date and duration, we just return null\n *\n * @return {DateTimeValue|null}\n */\n get endDate() {\n if (this.hasProperty('due')) {\n return this.getFirstPropertyFirstValue('due');\n }\n if (!this.hasProperty('dtstart') || !this.hasProperty('duration')) {\n return null;\n }\n const endDate = this.startDate.clone();\n endDate.addDuration(this.getFirstPropertyFirstValue('duration'));\n return endDate;\n }\n\n /**\n * Shifts the entire task by the given duration\n *\n * @param {DurationValue} delta The duration to shift event by\n * @param {boolean} allDay Whether the updated event should be all-day or not\n * @param {Timezone} defaultTimezone The default timezone if moving from all-day to timed event\n * @param {DurationValue} defaultAllDayDuration The default all-day duration if moving from timed to all-day\n * @param {DurationValue} defaultTimedDuration The default timed duration if moving from all-day to timed\n */\n shiftByDuration(delta, allDay, defaultTimezone, defaultAllDayDuration, defaultTimedDuration) {\n const currentAllDay = this.isAllDay();\n if (!this.hasProperty('dtstart') && !this.hasProperty('due')) {\n throw new TypeError('This task does not have a start-date nor due-date');\n }\n if (currentAllDay !== allDay && !this.canModifyAllDay()) {\n throw new TypeError('Can\\'t modify all-day of this todo');\n }\n\n // If this task has a start-date, update it\n // This is especially important, if you shift\n // the task by a negative duration, because\n // dtstart always has to be prior to the due date\n if (this.hasProperty('dtstart')) {\n this.startDate.isDate = allDay;\n this.startDate.addDuration(delta);\n if (currentAllDay && !allDay) {\n this.startDate.replaceTimezone(defaultTimezone);\n }\n }\n if (this.hasProperty('due')) {\n this.dueTime.isDate = allDay;\n this.dueTime.addDuration(delta);\n if (currentAllDay && !allDay) {\n this.dueTime.replaceTimezone(defaultTimezone);\n }\n }\n }\n\n /**\n * Checks if this event is in a given time-frame\n *\n * @param {DateTimeValue} start Start of time-range to check\n * @param {DateTimeValue} end End of time-range to check\n * @return {boolean}\n */\n isInTimeFrame(start, end) {\n if (!this.hasProperty('dtstart') && !this.hasProperty('due')) {\n return true;\n }\n if (!this.hasProperty('dtstart') && this.hasProperty('due')) {\n return start.compare(this.endDate) <= 0;\n }\n return start.compare(this.endDate) <= 0 && end.compare(this.startDate) >= 0;\n }\n\n /**\n * Gets the geographical position property\n *\n * @return {GeoProperty}\n */\n get geographicalPosition() {\n return this.getFirstProperty('GEO');\n }\n\n /**\n * Sets the geographical position based on latitude and longitude\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.6\n *\n * @param {number} lat - latitude\n * @param {number} long - longitude\n */\n setGeographicalPositionFromLatitudeAndLongitude(lat, long) {\n this.deleteAllProperties('GEO');\n this.addProperty(GeoProperty.fromPosition(lat, long));\n }\n\n /**\n * Adds a new conference property based on URI, label and features\n *\n * @url https://tools.ietf.org/html/rfc7986#section-5.11\n *\n * @param {string} uri The URI of the conference\n * @param {string=} label The label of the conference\n * @param {string[]=} features Supported features of conference-system\n */\n addConference(uri, label = null, features = null) {\n this.addProperty(ConferenceProperty.fromURILabelAndFeatures(uri, label, features));\n }\n\n /**\n * Gets a recurrence-id that has to be used to refer to this task.\n * This is used for recurrence-management.\n *\n * Gracefully handles the case where a task has no start-date, but a due-date.\n *\n * @return {DateTimeValue|null}\n */\n getReferenceRecurrenceId() {\n return super.getReferenceRecurrenceId() ?? this.endDate;\n }\n}\n\n/**\n * The time when a task was completed\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.2.1\n *\n * @name ToDoComponent#completedTime\n * @type {DateTimeValue}\n */\nadvertiseSingleOccurrenceProperty(ToDoComponent.prototype, {\n name: 'completedTime',\n iCalendarName: 'COMPLETED'\n});\n\n/**\n * The time when a task is due\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.2.3\n *\n * @name ToDoComponent#dueTime\n * @type {DateTimeValue}\n */\nadvertiseSingleOccurrenceProperty(ToDoComponent.prototype, {\n name: 'dueTime',\n iCalendarName: 'DUE'\n});\n\n/**\n * The time when a task was completed\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.2.5\n *\n * @name ToDoComponent#duration\n * @type {DurationValue}\n */\nadvertiseSingleOccurrenceProperty(ToDoComponent.prototype, {\n name: 'duration'\n});\n\n/**\n * The percentage a task was already fulfilled\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.8\n *\n * @name ToDoComponent#percent\n * @type {number}\n */\nadvertiseSingleOccurrenceProperty(ToDoComponent.prototype, {\n name: 'percent',\n iCalendarName: 'PERCENT-COMPLETE'\n});\n\n/**\n * Description of this task.\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.5\n *\n * @name ToDoComponent#description\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(ToDoComponent.prototype, 'description');\n\n/**\n * Location of this task.\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.7\n *\n * @name ToDoComponent#location\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(ToDoComponent.prototype, 'location');\n\n/**\n * Priority of this task.\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.9\n *\n * @name ToDoComponent#priority\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(ToDoComponent.prototype, {\n name: 'priority',\n allowedValues: Array.from(Array(10).keys()),\n defaultValue: 0,\n unknownValue: 0\n});\n\n/**\n * Returns an iterator over all resources\n * If the parameter lang is given, it will only\n * return an iterator for Resources matching that language\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.10\n *\n * @name ToDoComponent#getResourceIterator\n * @function\n * @param {string=} lang\n * @return {IterableIterator}\n */\n\n/**\n * Returns a list of all resources\n * If the parameter lang is given, it will only\n * return an iterator for resources matching that language\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.10\n *\n * @name ToDoComponent#getResourceList\n * @function\n * @param {string=} lang\n * @return {string[]}\n */\n\n/**\n * Adds a resource\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.10\n *\n * @name ToDoComponent#addResource\n * @function\n * @param {string} resource\n * @param {string=} lang\n */\n\n/**\n * Removes a resource\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.10\n *\n * @name ToDoComponent#removeResource\n * @function\n * @param {string} resource\n * @param {string=} lang\n */\n\n/**\n * Removes all resources from this task\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.8.1.10\n *\n * @name ToDoComponent#clearAllResources\n * @function\n * @param {string=} lang\n */\nadvertiseMultiValueStringPropertySeparatedByLang(ToDoComponent.prototype, {\n name: 'resource',\n iCalendarName: 'RESOURCES'\n});\n\n/**\n * Gets an iterator over all conference properties\n *\n * @url https://tools.ietf.org/html/rfc7986#section-5.11\n *\n * @name ToDoComponent#getConferenceIterator\n * @function\n * @return {IterableIterator}\n */\n\n/**\n * Gets a list of all conference properties\n *\n * @url https://tools.ietf.org/html/rfc7986#section-5.11\n *\n * @name ToDoComponent#getConferenceList\n * @function\n * @return {ConferenceProperty[]}\n */\n\n/**\n * Removes a conference from this event\n *\n * @url https://tools.ietf.org/html/rfc7986#section-5.11\n *\n * @name ToDoComponent#removeConference\n * @function\n * @param {ConferenceProperty} conference\n */\n\n/**\n * Removes all conferences from this event\n *\n * @url https://tools.ietf.org/html/rfc7986#section-5.11\n *\n * @name ToDoComponent#clearAllConferences\n * @function\n */\nadvertiseMultipleOccurrenceProperty(ToDoComponent.prototype, 'conference');\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * Gets the constructor for a component name\n * This will only return a constructor for components,\n * that can be used in the root of a calendar-document\n *\n * @param {string} compName Name of the component to get constructor for\n * @return {AbstractComponent|ToDoComponent|JournalComponent|FreeBusyComponent|TimezoneComponent|EventComponent}\n */\nfunction getConstructorForComponentName(compName) {\n switch (uc(compName)) {\n case 'VEVENT':\n return EventComponent;\n case 'VFREEBUSY':\n return FreeBusyComponent;\n case 'VJOURNAL':\n return JournalComponent;\n case 'VTIMEZONE':\n return TimezoneComponent;\n case 'VTODO':\n return ToDoComponent;\n default:\n return AbstractComponent;\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * This class represents one VCALENDAR block\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.4\n */\nclass CalendarComponent extends AbstractComponent {\n /**\n * Constructor\n *\n * @inheritDoc\n */\n constructor(name = 'VCALENDAR', properties = [], components = []) {\n super(name, properties, components);\n this.root = this;\n this.parent = null;\n }\n\n /**\n * Gets an iterator over all VTIMEZONE components\n */\n *getTimezoneIterator() {\n yield* this.getComponentIterator('vtimezone');\n }\n\n /**\n * Gets an iterator over all VObject components\n */\n *getVObjectIterator() {\n yield* this.getEventIterator();\n yield* this.getJournalIterator();\n yield* this.getTodoIterator();\n }\n\n /**\n * Gets an iterator over all VEVENT components\n */\n *getEventIterator() {\n yield* this.getComponentIterator('vevent');\n }\n\n /**\n * Gets an iterator over all VFREEBUSY components\n */\n *getFreebusyIterator() {\n yield* this.getComponentIterator('vfreebusy');\n }\n\n /**\n * Gets an iterator over all VJOURNAL components\n */\n *getJournalIterator() {\n yield* this.getComponentIterator('vjournal');\n }\n\n /**\n * Gets an iterator over all VTODO components\n */\n *getTodoIterator() {\n yield* this.getComponentIterator('vtodo');\n }\n\n /**\n * @inheritDoc\n */\n static _getConstructorForComponentName(componentName) {\n return getConstructorForComponentName(componentName);\n }\n\n /**\n * Converts this calendar component into text/calendar\n *\n * @param {boolean} cleanUpTimezones Whether or not to clean up timezone data\n * @return {string}\n */\n toICS(cleanUpTimezones = true) {\n for (const vObject of this.getVObjectIterator()) {\n vObject.undirtify();\n }\n const icalRoot = this.toICALJs();\n if (cleanUpTimezones) {\n ICAL.helpers.updateTimezones(icalRoot);\n }\n return icalRoot.toString();\n }\n\n /**\n * Creates a new empty calendar-component\n *\n * @param {[string][]=} additionalProps Additional props to add to empty calendar-document\n * @return {CalendarComponent}\n */\n static fromEmpty(additionalProps = []) {\n return new this('VCALENDAR', [['prodid', getConfig('PRODID', '-//IDN georgehrke.com//calendar-js//EN')], ['calscale', 'GREGORIAN'], ['version', '2.0']].concat(additionalProps));\n }\n\n /**\n * Creates a new calendar-component with a method\n *\n * @param {string} method The method for the calendar-document\n * @return {CalendarComponent}\n */\n static fromMethod(method) {\n return this.fromEmpty([['method', method]]);\n }\n\n /**\n * @inheritDoc\n */\n static fromICALJs(icalValue) {\n const comp = super.fromICALJs(icalValue);\n comp.root = comp;\n return comp;\n }\n}\n\n/**\n * ProductId representing the software that created this calendar-document\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.7.3\n *\n * @name CalendarComponent#productId\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(CalendarComponent.prototype, {\n name: 'productId',\n iCalendarName: 'PRODID'\n});\n\n/**\n * iCalendar version of this calendar-document\n * minver and maxver parameters are not supported, since they\n * are virtually used by no calendaring-software\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.7.4\n *\n * @name CalendarComponent#version\n * @type {string}\n */\n\nadvertiseSingleOccurrenceProperty(CalendarComponent.prototype, {\n name: 'version'\n});\n\n/**\n * Calendar-scale used in this calendar-document\n * The default and only supported calendar-scale is GREGORIAN.\n * There is an iCalendar-extension about non-gregorian RRULES,\n * but that is not supported by calendar-js at the moment\n *\n * @see https://tools.ietf.org/html/rfc7529\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.7.1\n *\n * @name CalendarComponent#calendarScale\n * @type {string}\n * @default \"GREGORIAN\"\n */\nadvertiseSingleOccurrenceProperty(CalendarComponent.prototype, {\n name: 'calendarScale',\n iCalendarName: 'CALSCALE',\n defaultValue: 'GREGORIAN'\n});\n\n/**\n * Method of this calendar-document when being used in an iTIP message\n * Please see https://tools.ietf.org/html/rfc5546#section-3.2 for more information\n *\n * @url https://tools.ietf.org/html/rfc5545#section-3.7.2\n *\n * @name CalendarComponent#method\n * @type {string}\n */\nadvertiseSingleOccurrenceProperty(CalendarComponent.prototype, {\n name: 'method'\n});\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class AbstractRepairStep\n * @classdesc A repair step is used to fix calendar-data before it is parsed\n */\nclass AbstractRepairStep {\n /**\n * @class\n */\n constructor() {\n if (new.target === AbstractRepairStep) {\n throw new TypeError('Cannot instantiate abstract class AbstractRepairStep');\n }\n }\n\n /**\n * @param {string} input String representation of the data to repair\n */\n repair(input) {\n throw new TypeError('Abstract method not implemented by subclass');\n }\n\n /**\n * @return {number}\n */\n static priority() {\n return 0;\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class ICalendarAddMissingUIDRepairStep\n */\nclass ICalendarAddMissingUIDRepairStep extends AbstractRepairStep {\n /**\n * Please see the corresponding test file for an example of broken calendar-data\n *\n * @inheritDoc\n */\n repair(ics) {\n return ics.replace(/^BEGIN:(VEVENT|VTODO|VJOURNAL)$(((?!^END:(VEVENT|VTODO|VJOURNAL)$)(?!^UID.*$)(.|\\n))*)^END:(VEVENT|VTODO|VJOURNAL)$\\n/gm, (match, vobjectName, vObjectBlock) => {\n return 'BEGIN:' + vobjectName + '\\r\\n' + 'UID:' + v4() + vObjectBlock + 'END:' + vobjectName + '\\r\\n';\n });\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class ICalendarAddMissingValueDateDoubleColonRepairStep\n */\nclass ICalendarAddMissingValueDateDoubleColonRepairStep extends AbstractRepairStep {\n /**\n * Please see the corresponding test file for an example of broken calendar-data\n *\n * @inheritDoc\n */\n repair(ics) {\n return ics.replace(/^(DTSTART|DTEND)(.*):([0-9]{8})T(::)$/gm, (match, propName, parameters, date) => {\n return propName + ';VALUE=DATE:' + date;\n });\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class ICalendarAddMissingValueDateRepairStep\n */\nclass ICalendarAddMissingValueDateRepairStep extends AbstractRepairStep {\n /**\n * Please see the corresponding test file for an example of broken calendar-data\n *\n * @inheritDoc\n */\n repair(ics) {\n return ics.replace(/^(DTSTART|DTEND)(((?!VALUE=DATE).)*):([0-9]{8})$/gm, (match, propName, parameters, _, date) => {\n return propName + parameters + ';VALUE=DATE:' + date;\n });\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class ICalendarEmptyTriggerRepairStep\n * @classdesc This repair step fixes malformed TRIGGER properties\n */\nclass ICalendarEmptyTriggerRepairStep extends AbstractRepairStep {\n /**\n * Please see the corresponding test file for an example of broken calendar-data\n *\n * @inheritDoc\n */\n repair(ics) {\n return ics.replace(/^TRIGGER:P$/gm, 'TRIGGER:P0D').replace(/^TRIGGER:-P$/gm, 'TRIGGER:P0D');\n }\n}\n\n/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\nclass ICalendarIllegalCreatedRepairStep extends AbstractRepairStep {\n /**\n * Please see the corresponding test file for an example of broken calendar-data\n *\n * @inheritDoc\n */\n repair(ics) {\n return ics.replace(/^CREATED:00001231T000000Z$/gm, 'CREATED:19700101T000000Z');\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class ICalendarMultipleVCalendarBlocksRepairStep\n * @classdesc This repair step merges multiple BEGIN:VCALENDAR...END:VCALENDAR blocks\n */\nclass ICalendarMultipleVCalendarBlocksRepairStep extends AbstractRepairStep {\n /**\n * Please see the corresponding test file for an example of broken calendar-data\n *\n * @inheritDoc\n */\n repair(ics) {\n let containsProdId = false;\n let containsVersion = false;\n let containsCalscale = false;\n const includedTimezones = new Set();\n return ics.replace(/^END:VCALENDAR$(((?!^BEGIN:)(.|\\n))*)^BEGIN:VCALENDAR$\\n/gm, '').replace(/^PRODID:(.*)$\\n/gm, match => {\n if (containsProdId) {\n return '';\n }\n containsProdId = true;\n return match;\n }).replace(/^VERSION:(.*)$\\n/gm, match => {\n if (containsVersion) {\n return '';\n }\n containsVersion = true;\n return match;\n }).replace(/^CALSCALE:(.*)$\\n/gm, match => {\n if (containsCalscale) {\n return '';\n }\n containsCalscale = true;\n return match;\n }).replace(/^BEGIN:VTIMEZONE$(((?!^END:VTIMEZONE$)(.|\\n))*)^END:VTIMEZONE$\\n/gm, match => {\n const tzidMatcher = match.match(/^TZID:(.*)$/gm);\n\n // If this Timezone definition contains no TZID for some reason,\n // just remove it, because we can't use it anyway\n if (tzidMatcher === null) {\n return '';\n }\n const tzid = uc(tzidMatcher[0].slice(5));\n if (includedTimezones.has(tzid)) {\n // If we already included this timezone, just skip\n return '';\n }\n includedTimezones.add(tzid);\n return match;\n });\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class ICalendarRemoveXNCGroupIdRepairStep\n * @classdesc This repair step removes the X-NC-GroupID parameter used in previous versions of Nextcloud\n */\nclass ICalendarRemoveXNCGroupIdRepairStep extends AbstractRepairStep {\n /**\n * Please see the corresponding test file for an example of broken calendar-data\n *\n * @inheritDoc\n */\n repair(ics) {\n return ics.replace(/(^.*)(;X-NC-GROUP-ID=\\d+)(:.*$)/gm, '$1$3');\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * Get an iterator over all repair steps for iCalendar documents\n */\nfunction* getRepairSteps() {\n yield ICalendarAddMissingUIDRepairStep;\n yield ICalendarAddMissingValueDateDoubleColonRepairStep;\n yield ICalendarAddMissingValueDateRepairStep;\n yield ICalendarEmptyTriggerRepairStep;\n yield ICalendarIllegalCreatedRepairStep;\n yield ICalendarMultipleVCalendarBlocksRepairStep;\n yield ICalendarRemoveXNCGroupIdRepairStep;\n}\n\nvar version = \"2.2019c\";\nvar aliases = {\n\t\"AUS Central Standard Time\": {\n\t\taliasTo: \"Australia/Darwin\"\n\t},\n\t\"AUS Eastern Standard Time\": {\n\t\taliasTo: \"Australia/Sydney\"\n\t},\n\t\"Afghanistan Standard Time\": {\n\t\taliasTo: \"Asia/Kabul\"\n\t},\n\t\"Africa/Asmera\": {\n\t\taliasTo: \"Africa/Asmara\"\n\t},\n\t\"Africa/Timbuktu\": {\n\t\taliasTo: \"Africa/Bamako\"\n\t},\n\t\"Alaskan Standard Time\": {\n\t\taliasTo: \"America/Anchorage\"\n\t},\n\t\"America/Argentina/ComodRivadavia\": {\n\t\taliasTo: \"America/Argentina/Catamarca\"\n\t},\n\t\"America/Buenos_Aires\": {\n\t\taliasTo: \"America/Argentina/Buenos_Aires\"\n\t},\n\t\"America/Louisville\": {\n\t\taliasTo: \"America/Kentucky/Louisville\"\n\t},\n\t\"America/Montreal\": {\n\t\taliasTo: \"America/Toronto\"\n\t},\n\t\"America/Santa_Isabel\": {\n\t\taliasTo: \"America/Tijuana\"\n\t},\n\t\"Arab Standard Time\": {\n\t\taliasTo: \"Asia/Riyadh\"\n\t},\n\t\"Arabian Standard Time\": {\n\t\taliasTo: \"Asia/Dubai\"\n\t},\n\t\"Arabic Standard Time\": {\n\t\taliasTo: \"Asia/Baghdad\"\n\t},\n\t\"Argentina Standard Time\": {\n\t\taliasTo: \"America/Argentina/Buenos_Aires\"\n\t},\n\t\"Asia/Calcutta\": {\n\t\taliasTo: \"Asia/Kolkata\"\n\t},\n\t\"Asia/Katmandu\": {\n\t\taliasTo: \"Asia/Kathmandu\"\n\t},\n\t\"Asia/Rangoon\": {\n\t\taliasTo: \"Asia/Yangon\"\n\t},\n\t\"Asia/Saigon\": {\n\t\taliasTo: \"Asia/Ho_Chi_Minh\"\n\t},\n\t\"Atlantic Standard Time\": {\n\t\taliasTo: \"America/Halifax\"\n\t},\n\t\"Atlantic/Faeroe\": {\n\t\taliasTo: \"Atlantic/Faroe\"\n\t},\n\t\"Atlantic/Jan_Mayen\": {\n\t\taliasTo: \"Europe/Oslo\"\n\t},\n\t\"Azerbaijan Standard Time\": {\n\t\taliasTo: \"Asia/Baku\"\n\t},\n\t\"Azores Standard Time\": {\n\t\taliasTo: \"Atlantic/Azores\"\n\t},\n\t\"Bahia Standard Time\": {\n\t\taliasTo: \"America/Bahia\"\n\t},\n\t\"Bangladesh Standard Time\": {\n\t\taliasTo: \"Asia/Dhaka\"\n\t},\n\t\"Belarus Standard Time\": {\n\t\taliasTo: \"Europe/Minsk\"\n\t},\n\t\"Canada Central Standard Time\": {\n\t\taliasTo: \"America/Regina\"\n\t},\n\t\"Cape Verde Standard Time\": {\n\t\taliasTo: \"Atlantic/Cape_Verde\"\n\t},\n\t\"Caucasus Standard Time\": {\n\t\taliasTo: \"Asia/Yerevan\"\n\t},\n\t\"Cen. Australia Standard Time\": {\n\t\taliasTo: \"Australia/Adelaide\"\n\t},\n\t\"Central America Standard Time\": {\n\t\taliasTo: \"America/Guatemala\"\n\t},\n\t\"Central Asia Standard Time\": {\n\t\taliasTo: \"Asia/Almaty\"\n\t},\n\t\"Central Brazilian Standard Time\": {\n\t\taliasTo: \"America/Cuiaba\"\n\t},\n\t\"Central Europe Standard Time\": {\n\t\taliasTo: \"Europe/Budapest\"\n\t},\n\t\"Central European Standard Time\": {\n\t\taliasTo: \"Europe/Warsaw\"\n\t},\n\t\"Central Pacific Standard Time\": {\n\t\taliasTo: \"Pacific/Guadalcanal\"\n\t},\n\t\"Central Standard Time\": {\n\t\taliasTo: \"America/Chicago\"\n\t},\n\t\"Central Standard Time (Mexico)\": {\n\t\taliasTo: \"America/Mexico_City\"\n\t},\n\t\"China Standard Time\": {\n\t\taliasTo: \"Asia/Shanghai\"\n\t},\n\t\"E. Africa Standard Time\": {\n\t\taliasTo: \"Africa/Nairobi\"\n\t},\n\t\"E. Australia Standard Time\": {\n\t\taliasTo: \"Australia/Brisbane\"\n\t},\n\t\"E. South America Standard Time\": {\n\t\taliasTo: \"America/Sao_Paulo\"\n\t},\n\t\"Eastern Standard Time\": {\n\t\taliasTo: \"America/New_York\"\n\t},\n\t\"Egypt Standard Time\": {\n\t\taliasTo: \"Africa/Cairo\"\n\t},\n\t\"Ekaterinburg Standard Time\": {\n\t\taliasTo: \"Asia/Yekaterinburg\"\n\t},\n\t\"Etc/GMT\": {\n\t\taliasTo: \"UTC\"\n\t},\n\t\"Etc/GMT+0\": {\n\t\taliasTo: \"UTC\"\n\t},\n\t\"Etc/UCT\": {\n\t\taliasTo: \"UTC\"\n\t},\n\t\"Etc/UTC\": {\n\t\taliasTo: \"UTC\"\n\t},\n\t\"Etc/Unversal\": {\n\t\taliasTo: \"UTC\"\n\t},\n\t\"Etc/Zulu\": {\n\t\taliasTo: \"UTC\"\n\t},\n\t\"Europe/Belfast\": {\n\t\taliasTo: \"Europe/London\"\n\t},\n\t\"FLE Standard Time\": {\n\t\taliasTo: \"Europe/Kiev\"\n\t},\n\t\"Fiji Standard Time\": {\n\t\taliasTo: \"Pacific/Fiji\"\n\t},\n\tGMT: {\n\t\taliasTo: \"UTC\"\n\t},\n\t\"GMT Standard Time\": {\n\t\taliasTo: \"Europe/London\"\n\t},\n\t\"GMT+0\": {\n\t\taliasTo: \"UTC\"\n\t},\n\tGMT0: {\n\t\taliasTo: \"UTC\"\n\t},\n\t\"GTB Standard Time\": {\n\t\taliasTo: \"Europe/Bucharest\"\n\t},\n\t\"Georgian Standard Time\": {\n\t\taliasTo: \"Asia/Tbilisi\"\n\t},\n\t\"Greenland Standard Time\": {\n\t\taliasTo: \"America/Godthab\"\n\t},\n\tGreenwich: {\n\t\taliasTo: \"UTC\"\n\t},\n\t\"Greenwich Standard Time\": {\n\t\taliasTo: \"Atlantic/Reykjavik\"\n\t},\n\t\"Hawaiian Standard Time\": {\n\t\taliasTo: \"Pacific/Honolulu\"\n\t},\n\t\"India Standard Time\": {\n\t\taliasTo: \"Asia/Calcutta\"\n\t},\n\t\"Iran Standard Time\": {\n\t\taliasTo: \"Asia/Tehran\"\n\t},\n\t\"Israel Standard Time\": {\n\t\taliasTo: \"Asia/Jerusalem\"\n\t},\n\t\"Jordan Standard Time\": {\n\t\taliasTo: \"Asia/Amman\"\n\t},\n\t\"Kaliningrad Standard Time\": {\n\t\taliasTo: \"Europe/Kaliningrad\"\n\t},\n\t\"Korea Standard Time\": {\n\t\taliasTo: \"Asia/Seoul\"\n\t},\n\t\"Libya Standard Time\": {\n\t\taliasTo: \"Africa/Tripoli\"\n\t},\n\t\"Line Islands Standard Time\": {\n\t\taliasTo: \"Pacific/Kiritimati\"\n\t},\n\t\"Magadan Standard Time\": {\n\t\taliasTo: \"Asia/Magadan\"\n\t},\n\t\"Mauritius Standard Time\": {\n\t\taliasTo: \"Indian/Mauritius\"\n\t},\n\t\"Middle East Standard Time\": {\n\t\taliasTo: \"Asia/Beirut\"\n\t},\n\t\"Montevideo Standard Time\": {\n\t\taliasTo: \"America/Montevideo\"\n\t},\n\t\"Morocco Standard Time\": {\n\t\taliasTo: \"Africa/Casablanca\"\n\t},\n\t\"Mountain Standard Time\": {\n\t\taliasTo: \"America/Denver\"\n\t},\n\t\"Mountain Standard Time (Mexico)\": {\n\t\taliasTo: \"America/Chihuahua\"\n\t},\n\t\"Myanmar Standard Time\": {\n\t\taliasTo: \"Asia/Rangoon\"\n\t},\n\t\"N. Central Asia Standard Time\": {\n\t\taliasTo: \"Asia/Novosibirsk\"\n\t},\n\t\"Namibia Standard Time\": {\n\t\taliasTo: \"Africa/Windhoek\"\n\t},\n\t\"Nepal Standard Time\": {\n\t\taliasTo: \"Asia/Katmandu\"\n\t},\n\t\"New Zealand Standard Time\": {\n\t\taliasTo: \"Pacific/Auckland\"\n\t},\n\t\"Newfoundland Standard Time\": {\n\t\taliasTo: \"America/St_Johns\"\n\t},\n\t\"North Asia East Standard Time\": {\n\t\taliasTo: \"Asia/Irkutsk\"\n\t},\n\t\"North Asia Standard Time\": {\n\t\taliasTo: \"Asia/Krasnoyarsk\"\n\t},\n\t\"Pacific SA Standard Time\": {\n\t\taliasTo: \"America/Santiago\"\n\t},\n\t\"Pacific Standard Time\": {\n\t\taliasTo: \"America/Los_Angeles\"\n\t},\n\t\"Pacific Standard Time (Mexico)\": {\n\t\taliasTo: \"America/Santa_Isabel\"\n\t},\n\t\"Pacific/Johnston\": {\n\t\taliasTo: \"Pacific/Honolulu\"\n\t},\n\t\"Pakistan Standard Time\": {\n\t\taliasTo: \"Asia/Karachi\"\n\t},\n\t\"Paraguay Standard Time\": {\n\t\taliasTo: \"America/Asuncion\"\n\t},\n\t\"Romance Standard Time\": {\n\t\taliasTo: \"Europe/Paris\"\n\t},\n\t\"Russia Time Zone 10\": {\n\t\taliasTo: \"Asia/Srednekolymsk\"\n\t},\n\t\"Russia Time Zone 11\": {\n\t\taliasTo: \"Asia/Kamchatka\"\n\t},\n\t\"Russia Time Zone 3\": {\n\t\taliasTo: \"Europe/Samara\"\n\t},\n\t\"Russian Standard Time\": {\n\t\taliasTo: \"Europe/Moscow\"\n\t},\n\t\"SA Eastern Standard Time\": {\n\t\taliasTo: \"America/Cayenne\"\n\t},\n\t\"SA Pacific Standard Time\": {\n\t\taliasTo: \"America/Bogota\"\n\t},\n\t\"SA Western Standard Time\": {\n\t\taliasTo: \"America/La_Paz\"\n\t},\n\t\"SE Asia Standard Time\": {\n\t\taliasTo: \"Asia/Bangkok\"\n\t},\n\t\"Samoa Standard Time\": {\n\t\taliasTo: \"Pacific/Apia\"\n\t},\n\t\"Singapore Standard Time\": {\n\t\taliasTo: \"Asia/Singapore\"\n\t},\n\t\"South Africa Standard Time\": {\n\t\taliasTo: \"Africa/Johannesburg\"\n\t},\n\t\"Sri Lanka Standard Time\": {\n\t\taliasTo: \"Asia/Colombo\"\n\t},\n\t\"Syria Standard Time\": {\n\t\taliasTo: \"Asia/Damascus\"\n\t},\n\t\"Taipei Standard Time\": {\n\t\taliasTo: \"Asia/Taipei\"\n\t},\n\t\"Tasmania Standard Time\": {\n\t\taliasTo: \"Australia/Hobart\"\n\t},\n\t\"Tokyo Standard Time\": {\n\t\taliasTo: \"Asia/Tokyo\"\n\t},\n\t\"Tonga Standard Time\": {\n\t\taliasTo: \"Pacific/Tongatapu\"\n\t},\n\t\"Turkey Standard Time\": {\n\t\taliasTo: \"Europe/Istanbul\"\n\t},\n\tUCT: {\n\t\taliasTo: \"UTC\"\n\t},\n\t\"US Eastern Standard Time\": {\n\t\taliasTo: \"America/Indiana/Indianapolis\"\n\t},\n\t\"US Mountain Standard Time\": {\n\t\taliasTo: \"America/Phoenix\"\n\t},\n\t\"US/Central\": {\n\t\taliasTo: \"America/Chicago\"\n\t},\n\t\"US/Eastern\": {\n\t\taliasTo: \"America/New_York\"\n\t},\n\t\"US/Mountain\": {\n\t\taliasTo: \"America/Denver\"\n\t},\n\t\"US/Pacific\": {\n\t\taliasTo: \"America/Los_Angeles\"\n\t},\n\t\"US/Pacific-New\": {\n\t\taliasTo: \"America/Los_Angeles\"\n\t},\n\t\"Ulaanbaatar Standard Time\": {\n\t\taliasTo: \"Asia/Ulaanbaatar\"\n\t},\n\tUniversal: {\n\t\taliasTo: \"UTC\"\n\t},\n\t\"Venezuela Standard Time\": {\n\t\taliasTo: \"America/Caracas\"\n\t},\n\t\"Vladivostok Standard Time\": {\n\t\taliasTo: \"Asia/Vladivostok\"\n\t},\n\t\"W. Australia Standard Time\": {\n\t\taliasTo: \"Australia/Perth\"\n\t},\n\t\"W. Central Africa Standard Time\": {\n\t\taliasTo: \"Africa/Lagos\"\n\t},\n\t\"W. Europe Standard Time\": {\n\t\taliasTo: \"Europe/Berlin\"\n\t},\n\t\"West Asia Standard Time\": {\n\t\taliasTo: \"Asia/Tashkent\"\n\t},\n\t\"West Pacific Standard Time\": {\n\t\taliasTo: \"Pacific/Port_Moresby\"\n\t},\n\t\"Yakutsk Standard Time\": {\n\t\taliasTo: \"Asia/Yakutsk\"\n\t},\n\tZ: {\n\t\taliasTo: \"UTC\"\n\t},\n\tZulu: {\n\t\taliasTo: \"UTC\"\n\t},\n\tutc: {\n\t\taliasTo: \"UTC\"\n\t}\n};\nvar zones = {\n\t\"Africa/Abidjan\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0051900\",\n\t\tlongitude: \"-0040200\"\n\t},\n\t\"Africa/Accra\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0053300\",\n\t\tlongitude: \"+0001300\"\n\t},\n\t\"Africa/Addis_Ababa\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0090200\",\n\t\tlongitude: \"+0384200\"\n\t},\n\t\"Africa/Algiers\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0364700\",\n\t\tlongitude: \"+0030300\"\n\t},\n\t\"Africa/Asmara\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0152000\",\n\t\tlongitude: \"+0385300\"\n\t},\n\t\"Africa/Bamako\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0123900\",\n\t\tlongitude: \"-0080000\"\n\t},\n\t\"Africa/Bangui\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0042200\",\n\t\tlongitude: \"+0183500\"\n\t},\n\t\"Africa/Banjul\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0132800\",\n\t\tlongitude: \"-0163900\"\n\t},\n\t\"Africa/Bissau\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0115100\",\n\t\tlongitude: \"-0153500\"\n\t},\n\t\"Africa/Blantyre\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0154700\",\n\t\tlongitude: \"+0350000\"\n\t},\n\t\"Africa/Brazzaville\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0041600\",\n\t\tlongitude: \"+0151700\"\n\t},\n\t\"Africa/Bujumbura\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0032300\",\n\t\tlongitude: \"+0292200\"\n\t},\n\t\"Africa/Cairo\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0300300\",\n\t\tlongitude: \"+0311500\"\n\t},\n\t\"Africa/Casablanca\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:+01\\r\\nDTSTART:20180325T020000\\r\\nRDATE:20180325T020000\\r\\nRDATE:20180617T020000\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:20180513T030000\\r\\nRDATE:20180513T030000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:+01\\r\\nDTSTART:20190609T020000\\r\\nRDATE:20190609T020000\\r\\nRDATE:20200524T020000\\r\\nRDATE:20210516T020000\\r\\nRDATE:20220508T020000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:+01\\r\\nDTSTART:20181028T030000\\r\\nRDATE:20181028T030000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:20190505T030000\\r\\nRDATE:20190505T030000\\r\\nRDATE:20200419T030000\\r\\nRDATE:20210411T030000\\r\\nRDATE:20220327T030000\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"+0333900\",\n\t\tlongitude: \"-0073500\"\n\t},\n\t\"Africa/Ceuta\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0355300\",\n\t\tlongitude: \"-0051900\"\n\t},\n\t\"Africa/Conakry\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0093100\",\n\t\tlongitude: \"-0134300\"\n\t},\n\t\"Africa/Dakar\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0144000\",\n\t\tlongitude: \"-0172600\"\n\t},\n\t\"Africa/Dar_es_Salaam\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0064800\",\n\t\tlongitude: \"+0391700\"\n\t},\n\t\"Africa/Djibouti\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0113600\",\n\t\tlongitude: \"+0430900\"\n\t},\n\t\"Africa/Douala\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0040300\",\n\t\tlongitude: \"+0094200\"\n\t},\n\t\"Africa/El_Aaiun\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:+01\\r\\nDTSTART:20180325T020000\\r\\nRDATE:20180325T020000\\r\\nRDATE:20180617T020000\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:20180513T030000\\r\\nRDATE:20180513T030000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:+01\\r\\nDTSTART:20181028T030000\\r\\nRDATE:20181028T030000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:20190505T030000\\r\\nRDATE:20190505T030000\\r\\nRDATE:20200419T030000\\r\\nRDATE:20210411T030000\\r\\nRDATE:20220327T030000\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:+01\\r\\nDTSTART:20190609T020000\\r\\nRDATE:20190609T020000\\r\\nRDATE:20200524T020000\\r\\nRDATE:20210516T020000\\r\\nRDATE:20220508T020000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0270900\",\n\t\tlongitude: \"-0131200\"\n\t},\n\t\"Africa/Freetown\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0083000\",\n\t\tlongitude: \"-0131500\"\n\t},\n\t\"Africa/Gaborone\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0243900\",\n\t\tlongitude: \"+0255500\"\n\t},\n\t\"Africa/Harare\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0175000\",\n\t\tlongitude: \"+0310300\"\n\t},\n\t\"Africa/Johannesburg\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:SAST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0261500\",\n\t\tlongitude: \"+0280000\"\n\t},\n\t\"Africa/Juba\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0045100\",\n\t\tlongitude: \"+0313700\"\n\t},\n\t\"Africa/Kampala\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0001900\",\n\t\tlongitude: \"+0322500\"\n\t},\n\t\"Africa/Khartoum\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0153600\",\n\t\tlongitude: \"+0323200\"\n\t},\n\t\"Africa/Kigali\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0015700\",\n\t\tlongitude: \"+0300400\"\n\t},\n\t\"Africa/Kinshasa\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0041800\",\n\t\tlongitude: \"+0151800\"\n\t},\n\t\"Africa/Lagos\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0062700\",\n\t\tlongitude: \"+0032400\"\n\t},\n\t\"Africa/Libreville\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0002300\",\n\t\tlongitude: \"+0092700\"\n\t},\n\t\"Africa/Lome\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0060800\",\n\t\tlongitude: \"+0011300\"\n\t},\n\t\"Africa/Luanda\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0084800\",\n\t\tlongitude: \"+0131400\"\n\t},\n\t\"Africa/Lubumbashi\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0114000\",\n\t\tlongitude: \"+0272800\"\n\t},\n\t\"Africa/Lusaka\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0152500\",\n\t\tlongitude: \"+0281700\"\n\t},\n\t\"Africa/Malabo\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0034500\",\n\t\tlongitude: \"+0084700\"\n\t},\n\t\"Africa/Maputo\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0255800\",\n\t\tlongitude: \"+0323500\"\n\t},\n\t\"Africa/Maseru\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:SAST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0292800\",\n\t\tlongitude: \"+0273000\"\n\t},\n\t\"Africa/Mbabane\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:SAST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0261800\",\n\t\tlongitude: \"+0310600\"\n\t},\n\t\"Africa/Mogadishu\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0020400\",\n\t\tlongitude: \"+0452200\"\n\t},\n\t\"Africa/Monrovia\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0061800\",\n\t\tlongitude: \"-0104700\"\n\t},\n\t\"Africa/Nairobi\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0011700\",\n\t\tlongitude: \"+0364900\"\n\t},\n\t\"Africa/Ndjamena\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0120700\",\n\t\tlongitude: \"+0150300\"\n\t},\n\t\"Africa/Niamey\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0133100\",\n\t\tlongitude: \"+0020700\"\n\t},\n\t\"Africa/Nouakchott\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0180600\",\n\t\tlongitude: \"-0155700\"\n\t},\n\t\"Africa/Ouagadougou\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0122200\",\n\t\tlongitude: \"-0013100\"\n\t},\n\t\"Africa/Porto-Novo\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0062900\",\n\t\tlongitude: \"+0023700\"\n\t},\n\t\"Africa/Sao_Tome\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:20180101T010000\\r\\nRDATE:20180101T010000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:20190101T020000\\r\\nRDATE:20190101T020000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0002000\",\n\t\tlongitude: \"+0064400\"\n\t},\n\t\"Africa/Tripoli\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0325400\",\n\t\tlongitude: \"+0131100\"\n\t},\n\t\"Africa/Tunis\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0364800\",\n\t\tlongitude: \"+0101100\"\n\t},\n\t\"Africa/Windhoek\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0223400\",\n\t\tlongitude: \"+0170600\"\n\t},\n\t\"America/Adak\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:HDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:HST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0515248\",\n\t\tlongitude: \"-1763929\"\n\t},\n\t\"America/Anchorage\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0611305\",\n\t\tlongitude: \"-1495401\"\n\t},\n\t\"America/Anguilla\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0181200\",\n\t\tlongitude: \"-0630400\"\n\t},\n\t\"America/Antigua\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0170300\",\n\t\tlongitude: \"-0614800\"\n\t},\n\t\"America/Araguaina\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0071200\",\n\t\tlongitude: \"-0481200\"\n\t},\n\t\"America/Argentina/Buenos_Aires\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0343600\",\n\t\tlongitude: \"-0582700\"\n\t},\n\t\"America/Argentina/Catamarca\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0282800\",\n\t\tlongitude: \"-0654700\"\n\t},\n\t\"America/Argentina/Cordoba\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0312400\",\n\t\tlongitude: \"-0641100\"\n\t},\n\t\"America/Argentina/Jujuy\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0241100\",\n\t\tlongitude: \"-0651800\"\n\t},\n\t\"America/Argentina/La_Rioja\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0292600\",\n\t\tlongitude: \"-0665100\"\n\t},\n\t\"America/Argentina/Mendoza\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0325300\",\n\t\tlongitude: \"-0684900\"\n\t},\n\t\"America/Argentina/Rio_Gallegos\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0513800\",\n\t\tlongitude: \"-0691300\"\n\t},\n\t\"America/Argentina/Salta\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0244700\",\n\t\tlongitude: \"-0652500\"\n\t},\n\t\"America/Argentina/San_Juan\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0313200\",\n\t\tlongitude: \"-0683100\"\n\t},\n\t\"America/Argentina/San_Luis\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0331900\",\n\t\tlongitude: \"-0662100\"\n\t},\n\t\"America/Argentina/Tucuman\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0264900\",\n\t\tlongitude: \"-0651300\"\n\t},\n\t\"America/Argentina/Ushuaia\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0544800\",\n\t\tlongitude: \"-0681800\"\n\t},\n\t\"America/Aruba\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0123000\",\n\t\tlongitude: \"-0695800\"\n\t},\n\t\"America/Asuncion\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19701004T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700322T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0251600\",\n\t\tlongitude: \"-0574000\"\n\t},\n\t\"America/Atikokan\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0484531\",\n\t\tlongitude: \"-0913718\"\n\t},\n\t\"America/Bahia\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0125900\",\n\t\tlongitude: \"-0383100\"\n\t},\n\t\"America/Bahia_Banderas\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"+0204800\",\n\t\tlongitude: \"-1051500\"\n\t},\n\t\"America/Barbados\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0130600\",\n\t\tlongitude: \"-0593700\"\n\t},\n\t\"America/Belem\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0012700\",\n\t\tlongitude: \"-0482900\"\n\t},\n\t\"America/Belize\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0173000\",\n\t\tlongitude: \"-0881200\"\n\t},\n\t\"America/Blanc-Sablon\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0512500\",\n\t\tlongitude: \"-0570700\"\n\t},\n\t\"America/Boa_Vista\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0024900\",\n\t\tlongitude: \"-0604000\"\n\t},\n\t\"America/Bogota\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0043600\",\n\t\tlongitude: \"-0740500\"\n\t},\n\t\"America/Boise\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0433649\",\n\t\tlongitude: \"-1161209\"\n\t},\n\t\"America/Cambridge_Bay\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0690650\",\n\t\tlongitude: \"-1050310\"\n\t},\n\t\"America/Campo_Grande\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:20181104T000000\\r\\nRDATE:20181104T000000\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:20180218T000000\\r\\nRDATE:20180218T000000\\r\\nRDATE:20190217T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0202700\",\n\t\tlongitude: \"-0543700\"\n\t},\n\t\"America/Cancun\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0210500\",\n\t\tlongitude: \"-0864600\"\n\t},\n\t\"America/Caracas\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0103000\",\n\t\tlongitude: \"-0665600\"\n\t},\n\t\"America/Cayenne\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0045600\",\n\t\tlongitude: \"-0522000\"\n\t},\n\t\"America/Cayman\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0191800\",\n\t\tlongitude: \"-0812300\"\n\t},\n\t\"America/Chicago\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0415100\",\n\t\tlongitude: \"-0873900\"\n\t},\n\t\"America/Chihuahua\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0283800\",\n\t\tlongitude: \"-1060500\"\n\t},\n\t\"America/Costa_Rica\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0095600\",\n\t\tlongitude: \"-0840500\"\n\t},\n\t\"America/Creston\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0490600\",\n\t\tlongitude: \"-1163100\"\n\t},\n\t\"America/Cuiaba\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:20181104T000000\\r\\nRDATE:20181104T000000\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:20180218T000000\\r\\nRDATE:20180218T000000\\r\\nRDATE:20190217T000000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0153500\",\n\t\tlongitude: \"-0560500\"\n\t},\n\t\"America/Curacao\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0121100\",\n\t\tlongitude: \"-0690000\"\n\t},\n\t\"America/Danmarkshavn\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0764600\",\n\t\tlongitude: \"-0184000\"\n\t},\n\t\"America/Dawson\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0640400\",\n\t\tlongitude: \"-1392500\"\n\t},\n\t\"America/Dawson_Creek\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0594600\",\n\t\tlongitude: \"-1201400\"\n\t},\n\t\"America/Denver\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0394421\",\n\t\tlongitude: \"-1045903\"\n\t},\n\t\"America/Detroit\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0421953\",\n\t\tlongitude: \"-0830245\"\n\t},\n\t\"America/Dominica\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0151800\",\n\t\tlongitude: \"-0612400\"\n\t},\n\t\"America/Edmonton\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0533300\",\n\t\tlongitude: \"-1132800\"\n\t},\n\t\"America/Eirunepe\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0064000\",\n\t\tlongitude: \"-0695200\"\n\t},\n\t\"America/El_Salvador\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0134200\",\n\t\tlongitude: \"-0891200\"\n\t},\n\t\"America/Fort_Nelson\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0584800\",\n\t\tlongitude: \"-1224200\"\n\t},\n\t\"America/Fortaleza\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0034300\",\n\t\tlongitude: \"-0383000\"\n\t},\n\t\"America/Glace_Bay\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0461200\",\n\t\tlongitude: \"-0595700\"\n\t},\n\t\"America/Godthab\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19700328T220000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19701024T230000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0641100\",\n\t\tlongitude: \"-0514400\"\n\t},\n\t\"America/Goose_Bay\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"+0532000\",\n\t\tlongitude: \"-0602500\"\n\t},\n\t\"America/Grand_Turk\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:20181104T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:20190310T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:20180311T020000\\r\\nRDATE:20180311T020000\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"+0212800\",\n\t\tlongitude: \"-0710800\"\n\t},\n\t\"America/Grenada\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0120300\",\n\t\tlongitude: \"-0614500\"\n\t},\n\t\"America/Guadeloupe\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0161400\",\n\t\tlongitude: \"-0613200\"\n\t},\n\t\"America/Guatemala\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0143800\",\n\t\tlongitude: \"-0903100\"\n\t},\n\t\"America/Guayaquil\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0021000\",\n\t\tlongitude: \"-0795000\"\n\t},\n\t\"America/Guyana\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0064800\",\n\t\tlongitude: \"-0581000\"\n\t},\n\t\"America/Halifax\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0443900\",\n\t\tlongitude: \"-0633600\"\n\t},\n\t\"America/Havana\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"+0230800\",\n\t\tlongitude: \"-0822200\"\n\t},\n\t\"America/Hermosillo\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0290400\",\n\t\tlongitude: \"-1105800\"\n\t},\n\t\"America/Indiana/Indianapolis\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0394606\",\n\t\tlongitude: \"-0860929\"\n\t},\n\t\"America/Indiana/Knox\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0411745\",\n\t\tlongitude: \"-0863730\"\n\t},\n\t\"America/Indiana/Marengo\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0382232\",\n\t\tlongitude: \"-0862041\"\n\t},\n\t\"America/Indiana/Petersburg\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0382931\",\n\t\tlongitude: \"-0871643\"\n\t},\n\t\"America/Indiana/Tell_City\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0375711\",\n\t\tlongitude: \"-0864541\"\n\t},\n\t\"America/Indiana/Vevay\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0384452\",\n\t\tlongitude: \"-0850402\"\n\t},\n\t\"America/Indiana/Vincennes\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0384038\",\n\t\tlongitude: \"-0873143\"\n\t},\n\t\"America/Indiana/Winamac\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"+0410305\",\n\t\tlongitude: \"-0863611\"\n\t},\n\t\"America/Inuvik\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0682059\",\n\t\tlongitude: \"-1334300\"\n\t},\n\t\"America/Iqaluit\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0634400\",\n\t\tlongitude: \"-0682800\"\n\t},\n\t\"America/Jamaica\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0175805\",\n\t\tlongitude: \"-0764736\"\n\t},\n\t\"America/Juneau\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0581807\",\n\t\tlongitude: \"-1342511\"\n\t},\n\t\"America/Kentucky/Louisville\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0381515\",\n\t\tlongitude: \"-0854534\"\n\t},\n\t\"America/Kentucky/Monticello\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0364947\",\n\t\tlongitude: \"-0845057\"\n\t},\n\t\"America/Kralendijk\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0120903\",\n\t\tlongitude: \"-0681636\"\n\t},\n\t\"America/La_Paz\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0163000\",\n\t\tlongitude: \"-0680900\"\n\t},\n\t\"America/Lima\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0120300\",\n\t\tlongitude: \"-0770300\"\n\t},\n\t\"America/Los_Angeles\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0340308\",\n\t\tlongitude: \"-1181434\"\n\t},\n\t\"America/Lower_Princes\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0180305\",\n\t\tlongitude: \"-0630250\"\n\t},\n\t\"America/Maceio\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0094000\",\n\t\tlongitude: \"-0354300\"\n\t},\n\t\"America/Managua\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0120900\",\n\t\tlongitude: \"-0861700\"\n\t},\n\t\"America/Manaus\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0030800\",\n\t\tlongitude: \"-0600100\"\n\t},\n\t\"America/Marigot\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0180400\",\n\t\tlongitude: \"-0630500\"\n\t},\n\t\"America/Martinique\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0143600\",\n\t\tlongitude: \"-0610500\"\n\t},\n\t\"America/Matamoros\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0255000\",\n\t\tlongitude: \"-0973000\"\n\t},\n\t\"America/Mazatlan\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0231300\",\n\t\tlongitude: \"-1062500\"\n\t},\n\t\"America/Menominee\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0450628\",\n\t\tlongitude: \"-0873651\"\n\t},\n\t\"America/Merida\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0205800\",\n\t\tlongitude: \"-0893700\"\n\t},\n\t\"America/Metlakatla\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:20191103T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:20181104T020000\\r\\nRDATE:20181104T020000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:20190120T020000\\r\\nRDATE:20190120T020000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0550737\",\n\t\tlongitude: \"-1313435\"\n\t},\n\t\"America/Mexico_City\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0192400\",\n\t\tlongitude: \"-0990900\"\n\t},\n\t\"America/Miquelon\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0470300\",\n\t\tlongitude: \"-0562000\"\n\t},\n\t\"America/Moncton\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0460600\",\n\t\tlongitude: \"-0644700\"\n\t},\n\t\"America/Monterrey\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0254000\",\n\t\tlongitude: \"-1001900\"\n\t},\n\t\"America/Montevideo\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0345433\",\n\t\tlongitude: \"-0561245\"\n\t},\n\t\"America/Montserrat\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0164300\",\n\t\tlongitude: \"-0621300\"\n\t},\n\t\"America/Nassau\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0250500\",\n\t\tlongitude: \"-0772100\"\n\t},\n\t\"America/New_York\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0404251\",\n\t\tlongitude: \"-0740023\"\n\t},\n\t\"America/Nipigon\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0490100\",\n\t\tlongitude: \"-0881600\"\n\t},\n\t\"America/Nome\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0643004\",\n\t\tlongitude: \"-1652423\"\n\t},\n\t\"America/Noronha\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0035100\",\n\t\tlongitude: \"-0322500\"\n\t},\n\t\"America/North_Dakota/Beulah\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0471551\",\n\t\tlongitude: \"-1014640\"\n\t},\n\t\"America/North_Dakota/Center\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0470659\",\n\t\tlongitude: \"-1011757\"\n\t},\n\t\"America/North_Dakota/New_Salem\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0465042\",\n\t\tlongitude: \"-1012439\"\n\t},\n\t\"America/Ojinaga\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0293400\",\n\t\tlongitude: \"-1042500\"\n\t},\n\t\"America/Panama\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0085800\",\n\t\tlongitude: \"-0793200\"\n\t},\n\t\"America/Pangnirtung\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0660800\",\n\t\tlongitude: \"-0654400\"\n\t},\n\t\"America/Paramaribo\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0055000\",\n\t\tlongitude: \"-0551000\"\n\t},\n\t\"America/Phoenix\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0332654\",\n\t\tlongitude: \"-1120424\"\n\t},\n\t\"America/Port-au-Prince\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0183200\",\n\t\tlongitude: \"-0722000\"\n\t},\n\t\"America/Port_of_Spain\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0103900\",\n\t\tlongitude: \"-0613100\"\n\t},\n\t\"America/Porto_Velho\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0084600\",\n\t\tlongitude: \"-0635400\"\n\t},\n\t\"America/Puerto_Rico\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0182806\",\n\t\tlongitude: \"-0660622\"\n\t},\n\t\"America/Punta_Arenas\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0530900\",\n\t\tlongitude: \"-0705500\"\n\t},\n\t\"America/Rainy_River\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0484300\",\n\t\tlongitude: \"-0943400\"\n\t},\n\t\"America/Rankin_Inlet\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0624900\",\n\t\tlongitude: \"-0920459\"\n\t},\n\t\"America/Recife\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0080300\",\n\t\tlongitude: \"-0345400\"\n\t},\n\t\"America/Regina\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0502400\",\n\t\tlongitude: \"-1043900\"\n\t},\n\t\"America/Resolute\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"+0744144\",\n\t\tlongitude: \"-0944945\"\n\t},\n\t\"America/Rio_Branco\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0095800\",\n\t\tlongitude: \"-0674800\"\n\t},\n\t\"America/Santarem\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0022600\",\n\t\tlongitude: \"-0545200\"\n\t},\n\t\"America/Santiago\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:20190407T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:20190908T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:20180812T000000\\r\\nRDATE:20180812T000000\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:20180513T000000\\r\\nRDATE:20180513T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0332700\",\n\t\tlongitude: \"-0704000\"\n\t},\n\t\"America/Santo_Domingo\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0182800\",\n\t\tlongitude: \"-0695400\"\n\t},\n\t\"America/Sao_Paulo\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:20181104T000000\\r\\nRDATE:20181104T000000\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:20180218T000000\\r\\nRDATE:20180218T000000\\r\\nRDATE:20190217T000000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19700101T000000\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"-0233200\",\n\t\tlongitude: \"-0463700\"\n\t},\n\t\"America/Scoresbysund\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:19700329T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:-0100\\r\\nTZNAME:-01\\r\\nDTSTART:19701025T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0702900\",\n\t\tlongitude: \"-0215800\"\n\t},\n\t\"America/Sitka\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0571035\",\n\t\tlongitude: \"-1351807\"\n\t},\n\t\"America/St_Barthelemy\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0175300\",\n\t\tlongitude: \"-0625100\"\n\t},\n\t\"America/St_Johns\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0230\\r\\nTZOFFSETTO:-0330\\r\\nTZNAME:NST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0330\\r\\nTZOFFSETTO:-0230\\r\\nTZNAME:NDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"+0473400\",\n\t\tlongitude: \"-0524300\"\n\t},\n\t\"America/St_Kitts\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0171800\",\n\t\tlongitude: \"-0624300\"\n\t},\n\t\"America/St_Lucia\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0140100\",\n\t\tlongitude: \"-0610000\"\n\t},\n\t\"America/St_Thomas\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0182100\",\n\t\tlongitude: \"-0645600\"\n\t},\n\t\"America/St_Vincent\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0130900\",\n\t\tlongitude: \"-0611400\"\n\t},\n\t\"America/Swift_Current\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0501700\",\n\t\tlongitude: \"-1075000\"\n\t},\n\t\"America/Tegucigalpa\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0140600\",\n\t\tlongitude: \"-0871300\"\n\t},\n\t\"America/Thule\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0763400\",\n\t\tlongitude: \"-0684700\"\n\t},\n\t\"America/Thunder_Bay\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0482300\",\n\t\tlongitude: \"-0891500\"\n\t},\n\t\"America/Tijuana\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0323200\",\n\t\tlongitude: \"-1170100\"\n\t},\n\t\"America/Toronto\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0433900\",\n\t\tlongitude: \"-0792300\"\n\t},\n\t\"America/Tortola\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0182700\",\n\t\tlongitude: \"-0643700\"\n\t},\n\t\"America/Vancouver\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0491600\",\n\t\tlongitude: \"-1230700\"\n\t},\n\t\"America/Whitehorse\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0604300\",\n\t\tlongitude: \"-1350300\"\n\t},\n\t\"America/Winnipeg\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0495300\",\n\t\tlongitude: \"-0970900\"\n\t},\n\t\"America/Yakutat\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0593249\",\n\t\tlongitude: \"-1394338\"\n\t},\n\t\"America/Yellowknife\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0622700\",\n\t\tlongitude: \"-1142100\"\n\t},\n\t\"Antarctica/Casey\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:20180311T040000\\r\\nRDATE:20180311T040000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0661700\",\n\t\tlongitude: \"+1103100\"\n\t},\n\t\"Antarctica/Davis\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0683500\",\n\t\tlongitude: \"+0775800\"\n\t},\n\t\"Antarctica/DumontDUrville\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0664000\",\n\t\tlongitude: \"+1400100\"\n\t},\n\t\"Antarctica/Macquarie\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0543000\",\n\t\tlongitude: \"+1585700\"\n\t},\n\t\"Antarctica/Mawson\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0673600\",\n\t\tlongitude: \"+0625300\"\n\t},\n\t\"Antarctica/McMurdo\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:NZDT\\r\\nDTSTART:19700927T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:NZST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0775000\",\n\t\tlongitude: \"+1663600\"\n\t},\n\t\"Antarctica/Palmer\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0644800\",\n\t\tlongitude: \"-0640600\"\n\t},\n\t\"Antarctica/Rothera\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0673400\",\n\t\tlongitude: \"-0680800\"\n\t},\n\t\"Antarctica/Syowa\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0690022\",\n\t\tlongitude: \"+0393524\"\n\t},\n\t\"Antarctica/Troll\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:+02\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0720041\",\n\t\tlongitude: \"+0023206\"\n\t},\n\t\"Antarctica/Vostok\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0782400\",\n\t\tlongitude: \"+1065400\"\n\t},\n\t\"Arctic/Longyearbyen\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0780000\",\n\t\tlongitude: \"+0160000\"\n\t},\n\t\"Asia/Aden\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0124500\",\n\t\tlongitude: \"+0451200\"\n\t},\n\t\"Asia/Almaty\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0431500\",\n\t\tlongitude: \"+0765700\"\n\t},\n\t\"Asia/Amman\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700326T235959\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1TH\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701030T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0315700\",\n\t\tlongitude: \"+0355600\"\n\t},\n\t\"Asia/Anadyr\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0644500\",\n\t\tlongitude: \"+1772900\"\n\t},\n\t\"Asia/Aqtau\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0443100\",\n\t\tlongitude: \"+0501600\"\n\t},\n\t\"Asia/Aqtobe\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0501700\",\n\t\tlongitude: \"+0571000\"\n\t},\n\t\"Asia/Ashgabat\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0375700\",\n\t\tlongitude: \"+0582300\"\n\t},\n\t\"Asia/Atyrau\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0470700\",\n\t\tlongitude: \"+0515600\"\n\t},\n\t\"Asia/Baghdad\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0332100\",\n\t\tlongitude: \"+0442500\"\n\t},\n\t\"Asia/Bahrain\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0262300\",\n\t\tlongitude: \"+0503500\"\n\t},\n\t\"Asia/Baku\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0402300\",\n\t\tlongitude: \"+0495100\"\n\t},\n\t\"Asia/Bangkok\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0134500\",\n\t\tlongitude: \"+1003100\"\n\t},\n\t\"Asia/Barnaul\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0532200\",\n\t\tlongitude: \"+0834500\"\n\t},\n\t\"Asia/Beirut\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0335300\",\n\t\tlongitude: \"+0353000\"\n\t},\n\t\"Asia/Bishkek\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0425400\",\n\t\tlongitude: \"+0743600\"\n\t},\n\t\"Asia/Brunei\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0045600\",\n\t\tlongitude: \"+1145500\"\n\t},\n\t\"Asia/Chita\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:+09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0520300\",\n\t\tlongitude: \"+1132800\"\n\t},\n\t\"Asia/Choibalsan\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0480400\",\n\t\tlongitude: \"+1143000\"\n\t},\n\t\"Asia/Colombo\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0530\\r\\nTZOFFSETTO:+0530\\r\\nTZNAME:+0530\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0065600\",\n\t\tlongitude: \"+0795100\"\n\t},\n\t\"Asia/Damascus\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701030T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700327T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"+0333000\",\n\t\tlongitude: \"+0361800\"\n\t},\n\t\"Asia/Dhaka\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0234300\",\n\t\tlongitude: \"+0902500\"\n\t},\n\t\"Asia/Dili\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:+09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0083300\",\n\t\tlongitude: \"+1253500\"\n\t},\n\t\"Asia/Dubai\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0251800\",\n\t\tlongitude: \"+0551800\"\n\t},\n\t\"Asia/Dushanbe\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0383500\",\n\t\tlongitude: \"+0684800\"\n\t},\n\t\"Asia/Famagusta\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:20180325T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"+0350700\",\n\t\tlongitude: \"+0335700\"\n\t},\n\t\"Asia/Gaza\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701031T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SA\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:20190329T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:20180324T010000\\r\\nRDATE:20180324T010000\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"+0313000\",\n\t\tlongitude: \"+0342800\"\n\t},\n\t\"Asia/Hebron\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701031T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SA\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:20190329T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:20180324T010000\\r\\nRDATE:20180324T010000\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"+0313200\",\n\t\tlongitude: \"+0350542\"\n\t},\n\t\"Asia/Ho_Chi_Minh\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0104500\",\n\t\tlongitude: \"+1064000\"\n\t},\n\t\"Asia/Hong_Kong\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:HKT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0221700\",\n\t\tlongitude: \"+1140900\"\n\t},\n\t\"Asia/Hovd\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0480100\",\n\t\tlongitude: \"+0913900\"\n\t},\n\t\"Asia/Irkutsk\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0521600\",\n\t\tlongitude: \"+1042000\"\n\t},\n\t\"Asia/Istanbul\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0410100\",\n\t\tlongitude: \"+0285800\"\n\t},\n\t\"Asia/Jakarta\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:WIB\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0061000\",\n\t\tlongitude: \"+1064800\"\n\t},\n\t\"Asia/Jayapura\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:WIT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0023200\",\n\t\tlongitude: \"+1404200\"\n\t},\n\t\"Asia/Jerusalem\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:IDT\\r\\nDTSTART:19700327T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=FR\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:IST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0314650\",\n\t\tlongitude: \"+0351326\"\n\t},\n\t\"Asia/Kabul\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0430\\r\\nTZOFFSETTO:+0430\\r\\nTZNAME:+0430\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0343100\",\n\t\tlongitude: \"+0691200\"\n\t},\n\t\"Asia/Kamchatka\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0530100\",\n\t\tlongitude: \"+1583900\"\n\t},\n\t\"Asia/Karachi\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:PKT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0245200\",\n\t\tlongitude: \"+0670300\"\n\t},\n\t\"Asia/Kathmandu\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0545\\r\\nTZOFFSETTO:+0545\\r\\nTZNAME:+0545\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0274300\",\n\t\tlongitude: \"+0851900\"\n\t},\n\t\"Asia/Khandyga\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:+09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0623923\",\n\t\tlongitude: \"+1353314\"\n\t},\n\t\"Asia/Kolkata\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0530\\r\\nTZOFFSETTO:+0530\\r\\nTZNAME:IST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0223200\",\n\t\tlongitude: \"+0882200\"\n\t},\n\t\"Asia/Krasnoyarsk\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0560100\",\n\t\tlongitude: \"+0925000\"\n\t},\n\t\"Asia/Kuala_Lumpur\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0031000\",\n\t\tlongitude: \"+1014200\"\n\t},\n\t\"Asia/Kuching\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0013300\",\n\t\tlongitude: \"+1102000\"\n\t},\n\t\"Asia/Kuwait\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0292000\",\n\t\tlongitude: \"+0475900\"\n\t},\n\t\"Asia/Macau\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0221150\",\n\t\tlongitude: \"+1133230\"\n\t},\n\t\"Asia/Magadan\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0593400\",\n\t\tlongitude: \"+1504800\"\n\t},\n\t\"Asia/Makassar\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:WITA\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0050700\",\n\t\tlongitude: \"+1192400\"\n\t},\n\t\"Asia/Manila\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:PST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0143500\",\n\t\tlongitude: \"+1210000\"\n\t},\n\t\"Asia/Muscat\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0233600\",\n\t\tlongitude: \"+0583500\"\n\t},\n\t\"Asia/Nicosia\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"+0351000\",\n\t\tlongitude: \"+0332200\"\n\t},\n\t\"Asia/Novokuznetsk\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0534500\",\n\t\tlongitude: \"+0870700\"\n\t},\n\t\"Asia/Novosibirsk\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0550200\",\n\t\tlongitude: \"+0825500\"\n\t},\n\t\"Asia/Omsk\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0550000\",\n\t\tlongitude: \"+0732400\"\n\t},\n\t\"Asia/Oral\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0511300\",\n\t\tlongitude: \"+0512100\"\n\t},\n\t\"Asia/Phnom_Penh\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0113300\",\n\t\tlongitude: \"+1045500\"\n\t},\n\t\"Asia/Pontianak\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:WIB\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0000200\",\n\t\tlongitude: \"+1092000\"\n\t},\n\t\"Asia/Pyongyang\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0830\\r\\nTZNAME:KST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0830\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:KST\\r\\nDTSTART:20180504T233000\\r\\nRDATE:20180504T233000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0390100\",\n\t\tlongitude: \"+1254500\"\n\t},\n\t\"Asia/Qatar\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0251700\",\n\t\tlongitude: \"+0513200\"\n\t},\n\t\"Asia/Qostanay\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0531200\",\n\t\tlongitude: \"+0633700\"\n\t},\n\t\"Asia/Qyzylorda\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:20181221T000000\\r\\nRDATE:20181221T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0444800\",\n\t\tlongitude: \"+0652800\"\n\t},\n\t\"Asia/Riyadh\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0243800\",\n\t\tlongitude: \"+0464300\"\n\t},\n\t\"Asia/Sakhalin\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0465800\",\n\t\tlongitude: \"+1424200\"\n\t},\n\t\"Asia/Samarkand\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0394000\",\n\t\tlongitude: \"+0664800\"\n\t},\n\t\"Asia/Seoul\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:KST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0373300\",\n\t\tlongitude: \"+1265800\"\n\t},\n\t\"Asia/Shanghai\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0311400\",\n\t\tlongitude: \"+1212800\"\n\t},\n\t\"Asia/Singapore\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0011700\",\n\t\tlongitude: \"+1035100\"\n\t},\n\t\"Asia/Srednekolymsk\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0672800\",\n\t\tlongitude: \"+1534300\"\n\t},\n\t\"Asia/Taipei\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0250300\",\n\t\tlongitude: \"+1213000\"\n\t},\n\t\"Asia/Tashkent\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0412000\",\n\t\tlongitude: \"+0691800\"\n\t},\n\t\"Asia/Tbilisi\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0414300\",\n\t\tlongitude: \"+0444900\"\n\t},\n\t\"Asia/Tehran\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0330\\r\\nTZNAME:+0330\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0330\\r\\nTZOFFSETTO:+0430\\r\\nTZNAME:+0430\\r\\nDTSTART:20180321T235959\\r\\nRDATE:20180321T235959\\r\\nRDATE:20190321T235959\\r\\nRDATE:20200320T235959\\r\\nRDATE:20210321T235959\\r\\nRDATE:20220321T235959\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0430\\r\\nTZOFFSETTO:+0330\\r\\nTZNAME:+0330\\r\\nDTSTART:20180921T235959\\r\\nRDATE:20180921T235959\\r\\nRDATE:20190921T235959\\r\\nRDATE:20200920T235959\\r\\nRDATE:20210921T235959\\r\\nRDATE:20220921T235959\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0354000\",\n\t\tlongitude: \"+0512600\"\n\t},\n\t\"Asia/Thimphu\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0272800\",\n\t\tlongitude: \"+0893900\"\n\t},\n\t\"Asia/Tokyo\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:JST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0353916\",\n\t\tlongitude: \"+1394441\"\n\t},\n\t\"Asia/Tomsk\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0563000\",\n\t\tlongitude: \"+0845800\"\n\t},\n\t\"Asia/Ulaanbaatar\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0475500\",\n\t\tlongitude: \"+1065300\"\n\t},\n\t\"Asia/Urumqi\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0434800\",\n\t\tlongitude: \"+0873500\"\n\t},\n\t\"Asia/Ust-Nera\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0643337\",\n\t\tlongitude: \"+1431336\"\n\t},\n\t\"Asia/Vientiane\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0175800\",\n\t\tlongitude: \"+1023600\"\n\t},\n\t\"Asia/Vladivostok\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0431000\",\n\t\tlongitude: \"+1315600\"\n\t},\n\t\"Asia/Yakutsk\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:+09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0620000\",\n\t\tlongitude: \"+1294000\"\n\t},\n\t\"Asia/Yangon\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0630\\r\\nTZOFFSETTO:+0630\\r\\nTZNAME:+0630\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0164700\",\n\t\tlongitude: \"+0961000\"\n\t},\n\t\"Asia/Yekaterinburg\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0565100\",\n\t\tlongitude: \"+0603600\"\n\t},\n\t\"Asia/Yerevan\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0401100\",\n\t\tlongitude: \"+0443000\"\n\t},\n\t\"Atlantic/Azores\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:19700329T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:-0100\\r\\nTZNAME:-01\\r\\nDTSTART:19701025T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0374400\",\n\t\tlongitude: \"-0254000\"\n\t},\n\t\"Atlantic/Bermuda\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0321700\",\n\t\tlongitude: \"-0644600\"\n\t},\n\t\"Atlantic/Canary\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WEST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:WET\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0280600\",\n\t\tlongitude: \"-0152400\"\n\t},\n\t\"Atlantic/Cape_Verde\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0100\\r\\nTZOFFSETTO:-0100\\r\\nTZNAME:-01\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0145500\",\n\t\tlongitude: \"-0233100\"\n\t},\n\t\"Atlantic/Faroe\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WEST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:WET\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0620100\",\n\t\tlongitude: \"-0064600\"\n\t},\n\t\"Atlantic/Madeira\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WEST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:WET\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0323800\",\n\t\tlongitude: \"-0165400\"\n\t},\n\t\"Atlantic/Reykjavik\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0640900\",\n\t\tlongitude: \"-0215100\"\n\t},\n\t\"Atlantic/South_Georgia\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0541600\",\n\t\tlongitude: \"-0363200\"\n\t},\n\t\"Atlantic/St_Helena\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0155500\",\n\t\tlongitude: \"-0054200\"\n\t},\n\t\"Atlantic/Stanley\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0514200\",\n\t\tlongitude: \"-0575100\"\n\t},\n\t\"Australia/Adelaide\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1030\\r\\nTZOFFSETTO:+0930\\r\\nTZNAME:ACST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0930\\r\\nTZOFFSETTO:+1030\\r\\nTZNAME:ACDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"-0345500\",\n\t\tlongitude: \"+1383500\"\n\t},\n\t\"Australia/Brisbane\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0272800\",\n\t\tlongitude: \"+1530200\"\n\t},\n\t\"Australia/Broken_Hill\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1030\\r\\nTZOFFSETTO:+0930\\r\\nTZNAME:ACST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0930\\r\\nTZOFFSETTO:+1030\\r\\nTZNAME:ACDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"-0315700\",\n\t\tlongitude: \"+1412700\"\n\t},\n\t\"Australia/Currie\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0395600\",\n\t\tlongitude: \"+1435200\"\n\t},\n\t\"Australia/Darwin\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0930\\r\\nTZOFFSETTO:+0930\\r\\nTZNAME:ACST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0122800\",\n\t\tlongitude: \"+1305000\"\n\t},\n\t\"Australia/Eucla\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0845\\r\\nTZOFFSETTO:+0845\\r\\nTZNAME:+0845\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0314300\",\n\t\tlongitude: \"+1285200\"\n\t},\n\t\"Australia/Hobart\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0425300\",\n\t\tlongitude: \"+1471900\"\n\t},\n\t\"Australia/Lindeman\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0201600\",\n\t\tlongitude: \"+1490000\"\n\t},\n\t\"Australia/Lord_Howe\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1030\\r\\nTZNAME:+1030\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1030\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"-0313300\",\n\t\tlongitude: \"+1590500\"\n\t},\n\t\"Australia/Melbourne\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"-0374900\",\n\t\tlongitude: \"+1445800\"\n\t},\n\t\"Australia/Perth\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:AWST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0315700\",\n\t\tlongitude: \"+1155100\"\n\t},\n\t\"Australia/Sydney\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"-0335200\",\n\t\tlongitude: \"+1511300\"\n\t},\n\t\"Europe/Amsterdam\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0522200\",\n\t\tlongitude: \"+0045400\"\n\t},\n\t\"Europe/Andorra\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0423000\",\n\t\tlongitude: \"+0013100\"\n\t},\n\t\"Europe/Astrakhan\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0462100\",\n\t\tlongitude: \"+0480300\"\n\t},\n\t\"Europe/Athens\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0375800\",\n\t\tlongitude: \"+0234300\"\n\t},\n\t\"Europe/Belgrade\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0445000\",\n\t\tlongitude: \"+0203000\"\n\t},\n\t\"Europe/Berlin\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0523000\",\n\t\tlongitude: \"+0132200\"\n\t},\n\t\"Europe/Bratislava\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0480900\",\n\t\tlongitude: \"+0170700\"\n\t},\n\t\"Europe/Brussels\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0505000\",\n\t\tlongitude: \"+0042000\"\n\t},\n\t\"Europe/Bucharest\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0442600\",\n\t\tlongitude: \"+0260600\"\n\t},\n\t\"Europe/Budapest\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0473000\",\n\t\tlongitude: \"+0190500\"\n\t},\n\t\"Europe/Busingen\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0474200\",\n\t\tlongitude: \"+0084100\"\n\t},\n\t\"Europe/Chisinau\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0470000\",\n\t\tlongitude: \"+0285000\"\n\t},\n\t\"Europe/Copenhagen\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0554000\",\n\t\tlongitude: \"+0123500\"\n\t},\n\t\"Europe/Dublin\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:IST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"+0532000\",\n\t\tlongitude: \"-0061500\"\n\t},\n\t\"Europe/Gibraltar\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0360800\",\n\t\tlongitude: \"-0052100\"\n\t},\n\t\"Europe/Guernsey\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:BST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0492717\",\n\t\tlongitude: \"-0023210\"\n\t},\n\t\"Europe/Helsinki\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0601000\",\n\t\tlongitude: \"+0245800\"\n\t},\n\t\"Europe/Isle_of_Man\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:BST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0540900\",\n\t\tlongitude: \"-0042800\"\n\t},\n\t\"Europe/Istanbul\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0410100\",\n\t\tlongitude: \"+0285800\"\n\t},\n\t\"Europe/Jersey\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:BST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0491101\",\n\t\tlongitude: \"-0020624\"\n\t},\n\t\"Europe/Kaliningrad\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0544300\",\n\t\tlongitude: \"+0203000\"\n\t},\n\t\"Europe/Kiev\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0502600\",\n\t\tlongitude: \"+0303100\"\n\t},\n\t\"Europe/Kirov\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0583600\",\n\t\tlongitude: \"+0493900\"\n\t},\n\t\"Europe/Lisbon\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:WET\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WEST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"+0384300\",\n\t\tlongitude: \"-0090800\"\n\t},\n\t\"Europe/Ljubljana\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0460300\",\n\t\tlongitude: \"+0143100\"\n\t},\n\t\"Europe/London\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:BST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0513030\",\n\t\tlongitude: \"+0000731\"\n\t},\n\t\"Europe/Luxembourg\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0493600\",\n\t\tlongitude: \"+0060900\"\n\t},\n\t\"Europe/Madrid\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0402400\",\n\t\tlongitude: \"-0034100\"\n\t},\n\t\"Europe/Malta\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0355400\",\n\t\tlongitude: \"+0143100\"\n\t},\n\t\"Europe/Mariehamn\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0600600\",\n\t\tlongitude: \"+0195700\"\n\t},\n\t\"Europe/Minsk\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0535400\",\n\t\tlongitude: \"+0273400\"\n\t},\n\t\"Europe/Monaco\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0434200\",\n\t\tlongitude: \"+0072300\"\n\t},\n\t\"Europe/Moscow\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:MSK\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0554521\",\n\t\tlongitude: \"+0373704\"\n\t},\n\t\"Europe/Nicosia\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"+0351000\",\n\t\tlongitude: \"+0332200\"\n\t},\n\t\"Europe/Oslo\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0595500\",\n\t\tlongitude: \"+0104500\"\n\t},\n\t\"Europe/Paris\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0485200\",\n\t\tlongitude: \"+0022000\"\n\t},\n\t\"Europe/Podgorica\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0422600\",\n\t\tlongitude: \"+0191600\"\n\t},\n\t\"Europe/Prague\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0500500\",\n\t\tlongitude: \"+0142600\"\n\t},\n\t\"Europe/Riga\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0565700\",\n\t\tlongitude: \"+0240600\"\n\t},\n\t\"Europe/Rome\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0415400\",\n\t\tlongitude: \"+0122900\"\n\t},\n\t\"Europe/Samara\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0531200\",\n\t\tlongitude: \"+0500900\"\n\t},\n\t\"Europe/San_Marino\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0435500\",\n\t\tlongitude: \"+0122800\"\n\t},\n\t\"Europe/Sarajevo\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0435200\",\n\t\tlongitude: \"+0182500\"\n\t},\n\t\"Europe/Saratov\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0513400\",\n\t\tlongitude: \"+0460200\"\n\t},\n\t\"Europe/Simferopol\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:MSK\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0445700\",\n\t\tlongitude: \"+0340600\"\n\t},\n\t\"Europe/Skopje\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0415900\",\n\t\tlongitude: \"+0212600\"\n\t},\n\t\"Europe/Sofia\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0424100\",\n\t\tlongitude: \"+0231900\"\n\t},\n\t\"Europe/Stockholm\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0592000\",\n\t\tlongitude: \"+0180300\"\n\t},\n\t\"Europe/Tallinn\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0592500\",\n\t\tlongitude: \"+0244500\"\n\t},\n\t\"Europe/Tirane\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0412000\",\n\t\tlongitude: \"+0195000\"\n\t},\n\t\"Europe/Ulyanovsk\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0542000\",\n\t\tlongitude: \"+0482400\"\n\t},\n\t\"Europe/Uzhgorod\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0483700\",\n\t\tlongitude: \"+0221800\"\n\t},\n\t\"Europe/Vaduz\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0470900\",\n\t\tlongitude: \"+0093100\"\n\t},\n\t\"Europe/Vatican\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0415408\",\n\t\tlongitude: \"+0122711\"\n\t},\n\t\"Europe/Vienna\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0481300\",\n\t\tlongitude: \"+0162000\"\n\t},\n\t\"Europe/Vilnius\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0544100\",\n\t\tlongitude: \"+0251900\"\n\t},\n\t\"Europe/Volgograd\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:20181028T020000\\r\\nRDATE:20181028T020000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0484400\",\n\t\tlongitude: \"+0442500\"\n\t},\n\t\"Europe/Warsaw\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0521500\",\n\t\tlongitude: \"+0210000\"\n\t},\n\t\"Europe/Zagreb\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0454800\",\n\t\tlongitude: \"+0155800\"\n\t},\n\t\"Europe/Zaporozhye\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0475000\",\n\t\tlongitude: \"+0351000\"\n\t},\n\t\"Europe/Zurich\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0472300\",\n\t\tlongitude: \"+0083200\"\n\t},\n\t\"Indian/Antananarivo\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0185500\",\n\t\tlongitude: \"+0473100\"\n\t},\n\t\"Indian/Chagos\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0072000\",\n\t\tlongitude: \"+0722500\"\n\t},\n\t\"Indian/Christmas\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0102500\",\n\t\tlongitude: \"+1054300\"\n\t},\n\t\"Indian/Cocos\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0630\\r\\nTZOFFSETTO:+0630\\r\\nTZNAME:+0630\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0121000\",\n\t\tlongitude: \"+0965500\"\n\t},\n\t\"Indian/Comoro\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0114100\",\n\t\tlongitude: \"+0431600\"\n\t},\n\t\"Indian/Kerguelen\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0492110\",\n\t\tlongitude: \"+0701303\"\n\t},\n\t\"Indian/Mahe\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0044000\",\n\t\tlongitude: \"+0552800\"\n\t},\n\t\"Indian/Maldives\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0041000\",\n\t\tlongitude: \"+0733000\"\n\t},\n\t\"Indian/Mauritius\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0201000\",\n\t\tlongitude: \"+0573000\"\n\t},\n\t\"Indian/Mayotte\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0124700\",\n\t\tlongitude: \"+0451400\"\n\t},\n\t\"Indian/Reunion\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0205200\",\n\t\tlongitude: \"+0552800\"\n\t},\n\t\"Pacific/Apia\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1400\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:19700405T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1400\\r\\nTZNAME:+14\\r\\nDTSTART:19700927T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"-0135000\",\n\t\tlongitude: \"-1714400\"\n\t},\n\t\"Pacific/Auckland\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:NZDT\\r\\nDTSTART:19700927T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:NZST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0365200\",\n\t\tlongitude: \"+1744600\"\n\t},\n\t\"Pacific/Bougainville\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0061300\",\n\t\tlongitude: \"+1553400\"\n\t},\n\t\"Pacific/Chatham\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1245\\r\\nTZOFFSETTO:+1345\\r\\nTZNAME:+1345\\r\\nDTSTART:19700927T024500\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1345\\r\\nTZOFFSETTO:+1245\\r\\nTZNAME:+1245\\r\\nDTSTART:19700405T034500\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0435700\",\n\t\tlongitude: \"-1763300\"\n\t},\n\t\"Pacific/Chuuk\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0072500\",\n\t\tlongitude: \"+1514700\"\n\t},\n\t\"Pacific/Easter\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:-06\\r\\nDTSTART:20190406T220000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SA\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:20190907T220000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SA\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:-06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:20180811T220000\\r\\nRDATE:20180811T220000\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:-06\\r\\nDTSTART:20180512T220000\\r\\nRDATE:20180512T220000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0270900\",\n\t\tlongitude: \"-1092600\"\n\t},\n\t\"Pacific/Efate\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0174000\",\n\t\tlongitude: \"+1682500\"\n\t},\n\t\"Pacific/Enderbury\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0030800\",\n\t\tlongitude: \"-1710500\"\n\t},\n\t\"Pacific/Fakaofo\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0092200\",\n\t\tlongitude: \"-1711400\"\n\t},\n\t\"Pacific/Fiji\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700118T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=12,13,14,15,16,17,18;BYDAY=SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:20191110T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:20181104T020000\\r\\nRDATE:20181104T020000\\r\\nEND:DAYLIGHT\"\n\t\t],\n\t\tlatitude: \"-0180800\",\n\t\tlongitude: \"+1782500\"\n\t},\n\t\"Pacific/Funafuti\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0083100\",\n\t\tlongitude: \"+1791300\"\n\t},\n\t\"Pacific/Galapagos\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:-06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0005400\",\n\t\tlongitude: \"-0893600\"\n\t},\n\t\"Pacific/Gambier\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:-09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0230800\",\n\t\tlongitude: \"-1345700\"\n\t},\n\t\"Pacific/Guadalcanal\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0093200\",\n\t\tlongitude: \"+1601200\"\n\t},\n\t\"Pacific/Guam\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:ChST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0132800\",\n\t\tlongitude: \"+1444500\"\n\t},\n\t\"Pacific/Honolulu\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:HST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0211825\",\n\t\tlongitude: \"-1575130\"\n\t},\n\t\"Pacific/Kiritimati\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1400\\r\\nTZOFFSETTO:+1400\\r\\nTZNAME:+14\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0015200\",\n\t\tlongitude: \"-1572000\"\n\t},\n\t\"Pacific/Kosrae\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0051900\",\n\t\tlongitude: \"+1625900\"\n\t},\n\t\"Pacific/Kwajalein\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0090500\",\n\t\tlongitude: \"+1672000\"\n\t},\n\t\"Pacific/Majuro\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0070900\",\n\t\tlongitude: \"+1711200\"\n\t},\n\t\"Pacific/Marquesas\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0930\\r\\nTZOFFSETTO:-0930\\r\\nTZNAME:-0930\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0090000\",\n\t\tlongitude: \"-1393000\"\n\t},\n\t\"Pacific/Midway\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1100\\r\\nTZOFFSETTO:-1100\\r\\nTZNAME:SST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0281300\",\n\t\tlongitude: \"-1772200\"\n\t},\n\t\"Pacific/Nauru\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0003100\",\n\t\tlongitude: \"+1665500\"\n\t},\n\t\"Pacific/Niue\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1100\\r\\nTZOFFSETTO:-1100\\r\\nTZNAME:-11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0190100\",\n\t\tlongitude: \"-1695500\"\n\t},\n\t\"Pacific/Norfolk\": {\n\t\tics: [\n\t\t\t\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:20191006T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:20200405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1130\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:20190701T000000\\r\\nRDATE:20190701T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0290300\",\n\t\tlongitude: \"+1675800\"\n\t},\n\t\"Pacific/Noumea\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0221600\",\n\t\tlongitude: \"+1662700\"\n\t},\n\t\"Pacific/Pago_Pago\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1100\\r\\nTZOFFSETTO:-1100\\r\\nTZNAME:SST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0141600\",\n\t\tlongitude: \"-1704200\"\n\t},\n\t\"Pacific/Palau\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:+09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0072000\",\n\t\tlongitude: \"+1342900\"\n\t},\n\t\"Pacific/Pitcairn\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:-08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0250400\",\n\t\tlongitude: \"-1300500\"\n\t},\n\t\"Pacific/Pohnpei\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0065800\",\n\t\tlongitude: \"+1581300\"\n\t},\n\t\"Pacific/Port_Moresby\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0093000\",\n\t\tlongitude: \"+1471000\"\n\t},\n\t\"Pacific/Rarotonga\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:-10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0211400\",\n\t\tlongitude: \"-1594600\"\n\t},\n\t\"Pacific/Saipan\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:ChST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0151200\",\n\t\tlongitude: \"+1454500\"\n\t},\n\t\"Pacific/Tahiti\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:-10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0173200\",\n\t\tlongitude: \"-1493400\"\n\t},\n\t\"Pacific/Tarawa\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0012500\",\n\t\tlongitude: \"+1730000\"\n\t},\n\t\"Pacific/Tongatapu\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0211000\",\n\t\tlongitude: \"-1751000\"\n\t},\n\t\"Pacific/Wake\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"+0191700\",\n\t\tlongitude: \"+1663700\"\n\t},\n\t\"Pacific/Wallis\": {\n\t\tics: [\n\t\t\t\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n\t\t],\n\t\tlatitude: \"-0131800\",\n\t\tlongitude: \"-1761000\"\n\t}\n};\nvar tzData = {\n\tversion: version,\n\taliases: aliases,\n\tzones: zones\n};\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class TimezoneManager\n */\nclass TimezoneManager {\n /**\n * Constructor\n */\n constructor() {\n /**\n * Map of aliases\n * Alias name => timezoneId\n *\n * @type {Map}\n */\n this._aliases = new Map();\n\n /**\n * Map of Timezones\n * timezoneId => Timezone\n *\n * @type {Map}\n * @private\n */\n this._timezones = new Map();\n }\n\n /**\n * Gets a timezone for the given id\n *\n * @param {string} timezoneId The id of the timezone\n * @return {Timezone|null}\n */\n getTimezoneForId(timezoneId) {\n return this._getTimezoneForIdRec(timezoneId, 0);\n }\n _getTimezoneForIdRec(timezoneId, level) {\n if (this._timezones.has(timezoneId)) {\n return this._timezones.get(timezoneId);\n }\n if (level >= 20) {\n // too much recursion\n console.error('TimezoneManager.getTimezoneForIdRec() exceeds recursion limits');\n return null;\n }\n if (this._aliases.has(timezoneId)) {\n const resolvedTimezoneId = this._aliases.get(timezoneId);\n // can be a recursive alias:\n return this._getTimezoneForIdRec(resolvedTimezoneId, level + 1);\n }\n return null;\n }\n\n /**\n * Checks if there is a timezone for the given id stored in this manager\n *\n * @param {string} timezoneId The id of the timezone\n * @return {boolean}\n */\n hasTimezoneForId(timezoneId) {\n return this._timezones.has(timezoneId) || this._aliases.has(timezoneId);\n }\n\n /**\n * Checks if the given timezone id is an alias\n *\n * @param {string} timezoneId The id of the timezone\n * @return {boolean}\n */\n isAlias(timezoneId) {\n return !this._timezones.has(timezoneId) && this._aliases.has(timezoneId);\n }\n\n /**\n * Lists all timezones\n *\n * @param {boolean=} includeAliases Whether or not to include aliases\n * @return {string[]}\n */\n listAllTimezones(includeAliases = false) {\n const timezones = Array.from(this._timezones.keys());\n if (includeAliases) {\n return timezones.concat(Array.from(this._aliases.keys()));\n }\n return timezones;\n }\n\n /**\n * Registers a timezone\n *\n * @param {Timezone} timezone The timezone-object to register\n */\n registerTimezone(timezone) {\n this._timezones.set(timezone.timezoneId, timezone);\n }\n registerDefaultTimezones() {\n console.debug(`@nextcloud/calendar-js app is using version ${tzData.version} of the timezone database`);\n for (const tzid in tzData.zones) {\n if (Object.prototype.hasOwnProperty.call(tzData.zones, [tzid])) {\n const ics = ['BEGIN:VTIMEZONE', 'TZID:' + tzid, ...tzData.zones[tzid].ics, 'END:VTIMEZONE'].join('\\r\\n');\n this.registerTimezoneFromICS(tzid, ics);\n }\n }\n for (const tzid in tzData.aliases) {\n if (Object.prototype.hasOwnProperty.call(tzData.aliases, [tzid])) {\n this.registerAlias(tzid, tzData.aliases[tzid].aliasTo);\n }\n }\n }\n\n /**\n * Registers a timezone based on ics data\n *\n * @param {string} timezoneId The id of the timezone\n * @param {string} ics The iCalendar timezone definition\n */\n registerTimezoneFromICS(timezoneId, ics) {\n const timezone = new Timezone(timezoneId, ics);\n this.registerTimezone(timezone);\n }\n\n /**\n * Registers a new timezone-alias\n *\n * @param {string} aliasName The timezone-id of the alias\n * @param {string} timezoneId The timezone-id to resolve the alias to\n */\n registerAlias(aliasName, timezoneId) {\n this._aliases.set(aliasName, timezoneId);\n }\n\n /**\n * Unregisters a timezone\n *\n * @param {string} timezoneId Unregisters a timezone by Id\n */\n unregisterTimezones(timezoneId) {\n this._timezones.delete(timezoneId);\n }\n\n /**\n * Unregisters a timezone-alias\n *\n * @param {string} aliasName The alias to unregister\n */\n unregisterAlias(aliasName) {\n this._aliases.delete(aliasName);\n }\n\n /**\n * Clear all timezones\n */\n clearAllTimezones() {\n this._aliases = new Map();\n this._timezones = new Map();\n timezoneManager.registerTimezone(Timezone.utc);\n timezoneManager.registerTimezone(Timezone.floating);\n timezoneManager.registerAlias('GMT', Timezone.utc.timezoneId);\n timezoneManager.registerAlias('Z', Timezone.utc.timezoneId);\n }\n}\nconst timezoneManager = new TimezoneManager();\ntimezoneManager.clearAllTimezones();\n\n/**\n * Gets the default instance of the timezone manager\n *\n * @return {TimezoneManager}\n */\nfunction getTimezoneManager() {\n return timezoneManager;\n}\n\n/**\n *\n * @param {string} tzName Name of the timezone to check\n * @return {boolean}\n */\nfunction isOlsonTimezone(tzName) {\n const hasSlash = tzName.indexOf('/') !== -1;\n const hasSpace = tzName.indexOf(' ') !== -1;\n const startsWithETC = tzName.startsWith('Etc');\n const startsWithUS = tzName.startsWith('US/');\n return hasSlash && !hasSpace && !startsWithETC && !startsWithUS;\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class ICalendarParser\n * @classdesc\n */\nclass ICalendarParser extends AbstractParser {\n /**\n * @inheritDoc\n */\n constructor(...args) {\n super(...args);\n\n /**\n * The raw text/calendar data\n *\n * @type {string}\n * @protected\n */\n this._rawData = null;\n\n /**\n * The CalendarComponent representing the raw data\n *\n * @type {CalendarComponent}\n * @protected\n */\n this._calendarComponent = null;\n\n /**\n * A flag whether this calendar-data contains vevents\n *\n * @type {boolean}\n * @private\n */\n this._containsVEvents = false;\n\n /**\n * A flag whether this calendar-data contains vjournals\n *\n * @type {boolean}\n * @private\n */\n this._containsVJournals = false;\n\n /**\n * A flag whether this calendar-data contains vtodos\n *\n * @type {boolean}\n * @private\n */\n this._containsVTodos = false;\n\n /**\n * A flag whether this calendar-data contains vfreebusy\n *\n * @type {boolean}\n * @private\n */\n this._containsVFreeBusy = false;\n\n /**\n * A map containing all VObjects.\n * The key of this map is the UID\n * The value an array of all VObjects with that particular UID\n *\n * @type {Map}\n * @private\n */\n this._items = new Map();\n\n /**\n * Items that are no recurrence-exceptions\n * The key of this map is the UID\n *\n * @type {Map}\n * @private\n */\n this._masterItems = new Map();\n\n /**\n * Items that are recurrence exceptions\n *\n * @type {Map}\n * @private\n */\n this._recurrenceExceptionItems = new Map();\n\n /**\n * Some recurrence-exceptions come without a master item\n * In that case we need to forge a master item\n *\n * @type {Map}\n * @private\n */\n this._forgedMasterItems = new Map();\n\n /**\n * A list of timezone-components found in the calendar-data\n *\n * @type {Map}\n * @private\n */\n this._timezones = new Map();\n\n /**\n * A set of required timezones for each UID\n *\n * @type {Map>}\n * @private\n */\n this._requiredTimezones = new Map();\n\n /**\n * Instance of the default timezone-manager\n *\n * @type {TimezoneManager}\n * @private\n */\n this._defaultTimezoneManager = getTimezoneManager();\n }\n\n /**\n * Parses the actual calendar-data\n *\n * @param {string} ics The icalendar data to parse\n */\n parse(ics) {\n this._rawData = ics;\n this._applyRepairSteps();\n\n // If a timezone is not inside our TimezoneManager at the time of parsing\n // the internal zone will be marked as floating inside ICAL.Time\n // so before we start any actual parsing, we need to extract all timezones\n // and add them to the TimezoneManager\n this._extractTimezones();\n this._registerTimezones();\n this._createCalendarComponent();\n if (this._getOption('extractGlobalProperties', false)) {\n this._extractProperties();\n }\n this._processVObjects();\n if (this._getOption('processFreeBusy', false)) {\n this._processVFreeBusy();\n }\n }\n\n /**\n * @inheritDoc\n */\n *getItemIterator() {\n for (const itemList of this._items.values()) {\n const calendarComp = CalendarComponent.fromEmpty();\n if (this._getOption('includeTimezones', false)) {\n this._addRequiredTimezonesToCalendarComp(calendarComp, itemList[0].uid);\n }\n\n // Preserve the original product id, just in case we need special handling for certain clients later on ...\n if (this._calendarComponent.hasProperty('PRODID')) {\n calendarComp.deleteAllProperties('PRODID');\n calendarComp.addProperty(this._calendarComponent.getFirstProperty('PRODID').clone());\n }\n if (this._getOption('preserveMethod', false)) {\n if (this._calendarComponent.hasProperty('METHOD')) {\n calendarComp.deleteAllProperties('METHOD');\n calendarComp.addProperty(this._calendarComponent.getFirstProperty('METHOD').clone());\n }\n }\n for (const item of itemList) {\n calendarComp.addComponent(item);\n }\n yield calendarComp;\n }\n }\n\n /**\n * @inheritDoc\n */\n containsVEvents() {\n return this._containsVEvents;\n }\n\n /**\n * @inheritDoc\n */\n containsVJournals() {\n return this._containsVJournals;\n }\n\n /**\n * @inheritDoc\n */\n containsVTodos() {\n return this._containsVTodos;\n }\n\n /**\n * @inheritDoc\n */\n containsVFreeBusy() {\n return this._containsVFreeBusy;\n }\n\n /**\n * @inheritDoc\n */\n getItemCount() {\n return Array.from(this._items.keys()).length;\n }\n\n /**\n * Applies all registered repair steps\n *\n * @private\n */\n _applyRepairSteps() {\n for (const RepairStep of getRepairSteps()) {\n const step = new RepairStep();\n this._rawData = step.repair(this._rawData);\n }\n }\n\n /**\n * Creates a calendar component based upon the repaired data\n *\n * @private\n */\n _createCalendarComponent() {\n const jCal = ICAL.parse(this._rawData);\n const icalComp = new ICAL.Component(jCal);\n this._calendarComponent = CalendarComponent.fromICALJs(icalComp);\n }\n\n /**\n * extracts properties\n *\n * @protected\n */\n _extractProperties() {\n this._extractPropertyAndPutResultIntoVariable(['name', 'x-wr-calname'], '_name');\n this._extractPropertyAndPutResultIntoVariable(['color', 'x-apple-calendar-color'], '_color');\n this._extractPropertyAndPutResultIntoVariable(['source'], '_sourceURL');\n this._extractPropertyAndPutResultIntoVariable(['refresh-interval', 'x-published-ttl'], '_refreshInterval');\n this._extractPropertyAndPutResultIntoVariable(['x-wr-timezone'], '_calendarTimezone');\n }\n\n /**\n * Extract a property and writes it into a class property\n * names must be an array, it will use the value of the fist\n * propertyname it can find\n *\n * @param {string[]} names The names of the properties to check\n * @param {string} variableName The variable name to save it under\n * @private\n */\n _extractPropertyAndPutResultIntoVariable(names, variableName) {\n for (const name of names) {\n if (this._calendarComponent.hasProperty(name)) {\n this[variableName] = this._calendarComponent.getFirstPropertyFirstValue(name);\n return;\n }\n }\n }\n\n /**\n * Extracts timezones from the calendar component\n *\n * @protected\n */\n _extractTimezones() {\n const matches = this._rawData.match(/^BEGIN:VTIMEZONE$(((?!^END:VTIMEZONE$)(.|\\n))*)^END:VTIMEZONE$\\n/gm);\n if (!matches) {\n return;\n }\n for (const match of matches) {\n const tzidMatcher = match.match(/^TZID:(.*)$/gm);\n if (!tzidMatcher) {\n continue;\n }\n const tzid = tzidMatcher[0].slice(5);\n const timezone = new Timezone(tzid, match);\n this._timezones.set(tzid, timezone);\n }\n }\n\n /**\n * Registers unknown timezones into our timezone-manager\n *\n * @protected\n */\n _registerTimezones() {\n for (const [tzid, timezone] of this._timezones) {\n if (!this._defaultTimezoneManager.hasTimezoneForId(tzid)) {\n this._defaultTimezoneManager.registerTimezone(timezone);\n }\n }\n }\n\n /**\n * Processes the parsed vobjects\n *\n * @protected\n */\n _processVObjects() {\n for (const vObject of this._calendarComponent.getVObjectIterator()) {\n this._addItem(vObject);\n this._markCompTypeAsSeen(vObject.name);\n if (vObject.isRecurrenceException()) {\n this._addRecurrenceException(vObject);\n } else {\n vObject.recurrenceManager = new RecurrenceManager(vObject);\n this._masterItems.set(vObject.uid, vObject);\n }\n for (const propertyToCheck of vObject.getPropertyIterator()) {\n for (const value of propertyToCheck.getValueIterator()) {\n if (value instanceof DateTimeValue && value.timezoneId) {\n this._addRequiredTimezone(vObject.uid, value.timezoneId);\n }\n }\n }\n\n // TRIGGER is supposed to be stored in UTC only,\n // but not all clients stick to this\n for (const alarm of vObject.getAlarmIterator()) {\n for (const propertyToCheck of alarm.getPropertyIterator()) {\n for (const value of propertyToCheck.getValueIterator()) {\n if (value instanceof DateTimeValue && value.timezoneId) {\n this._addRequiredTimezone(vObject.uid, value.timezoneId);\n }\n }\n }\n }\n if (this._getOption('removeRSVPForAttendees', false)) {\n for (const attendee of vObject.getAttendeeIterator()) {\n attendee.deleteParameter('RSVP');\n }\n }\n }\n for (const recurrenceExceptionList of this._recurrenceExceptionItems.values()) {\n for (const recurrenceException of recurrenceExceptionList) {\n // Check if there is a master item for this recurrence exception\n // otherwise we have to forge one\n if (!this._masterItems.has(recurrenceException.uid)) {\n const constructor = getConstructorForComponentName(recurrenceException.name);\n const forgedMaster = new constructor(recurrenceException.name, [['UID', recurrenceException.uid], ['DTSTAMP', recurrenceException.stampTime.clone()], ['DTSTART', recurrenceException.recurrenceId.clone()]]);\n forgedMaster.recurrenceManager = new RecurrenceManager(forgedMaster);\n this._forgedMasterItems.set(recurrenceException.uid, forgedMaster);\n this._masterItems.set(recurrenceException.uid, forgedMaster);\n this._addItem(forgedMaster);\n } else {\n const master = this._masterItems.get(recurrenceException.uid);\n\n // This should usually not be the case,\n // only if the calendar-data is seriously broken.\n // Let's try to handle it anyway by adding it to\n // forgedMasterItems, we will simply add RDATEs\n // in the next step to make it recur\n if (!master.isRecurring()) {\n this._forgedMasterItems.set(master.uid, master);\n }\n }\n if (this._forgedMasterItems.has(recurrenceException.uid)) {\n const forgedMaster = this._forgedMasterItems.get(recurrenceException.uid);\n forgedMaster.recurrenceManager.addRecurrenceDate(false, recurrenceException.recurrenceId.clone());\n }\n const masterItem = this._masterItems.get(recurrenceException.uid);\n masterItem.recurrenceManager.relateRecurrenceException(recurrenceException);\n }\n }\n }\n\n /**\n * Process FreeBusy components\n *\n * @private\n */\n _processVFreeBusy() {\n for (const vObject of this._calendarComponent.getFreebusyIterator()) {\n this._addItem(vObject);\n this._markCompTypeAsSeen(vObject.name);\n for (const propertyToCheck of vObject.getPropertyIterator()) {\n for (const value of propertyToCheck.getValueIterator()) {\n if (value instanceof DateTimeValue && value.timezoneId) {\n this._addRequiredTimezone(vObject.uid, value.timezoneId);\n }\n }\n }\n }\n }\n\n /**\n *\n * @param {AbstractRecurringComponent} item The recurrence-item to register\n * @private\n */\n _addRecurrenceException(item) {\n if (this._recurrenceExceptionItems.has(item.uid)) {\n const arr = this._recurrenceExceptionItems.get(item.uid);\n arr.push(item);\n } else {\n this._recurrenceExceptionItems.set(item.uid, [item]);\n }\n }\n\n /**\n *\n * @param {AbstractRecurringComponent} item The item to register\n * @private\n */\n _addItem(item) {\n if (this._items.has(item.uid)) {\n const arr = this._items.get(item.uid);\n arr.push(item);\n } else {\n this._items.set(item.uid, [item]);\n }\n }\n\n /**\n *\n * @param {string} uid The uid of the calendar-object\n * @param {string} timezoneId The timezoneId required by the object\n * @private\n */\n _addRequiredTimezone(uid, timezoneId) {\n if (timezoneId === 'UTC' || timezoneId === 'floating' || timezoneId === 'GMT' || timezoneId === 'Z') {\n return;\n }\n if (this._requiredTimezones.has(uid)) {\n this._requiredTimezones.get(uid).add(timezoneId);\n } else {\n const set = new Set([timezoneId]);\n this._requiredTimezones.set(uid, set);\n }\n }\n\n /**\n *\n * @param {CalendarComponent} calendarComp The calendar-component to add timezones to\n * @param {string} uid The UID of the calendar-object\n * @private\n */\n _addRequiredTimezonesToCalendarComp(calendarComp, uid) {\n if (!this._requiredTimezones.has(uid)) {\n return;\n }\n for (const requiredTimezone of this._requiredTimezones.get(uid)) {\n if (!this._defaultTimezoneManager.hasTimezoneForId(requiredTimezone)) {\n return;\n }\n const timezone = this._defaultTimezoneManager.getTimezoneForId(requiredTimezone);\n // Is this an alias?\n if (timezone.timezoneId !== requiredTimezone) {\n this._replaceTimezoneWithAnotherOne(calendarComp, requiredTimezone, timezone.timezoneId);\n }\n const timezoneComponent = TimezoneComponent.fromICALJs(timezone.toICALJs());\n calendarComp.addComponent(timezoneComponent);\n }\n }\n\n /**\n * Replaces all occurrences of searchTimezone with replaceTimezone\n *\n * @param {CalendarComponent} calendarComponent The calendar-component to replace a timezone in\n * @param {string} searchTimezone The timezone to replace\n * @param {string} replaceTimezone The replacement timezone\n * @private\n */\n _replaceTimezoneWithAnotherOne(calendarComponent, searchTimezone, replaceTimezone) {\n for (const vObject of this._calendarComponent.getVObjectIterator()) {\n for (const propertyToCheck of vObject.getPropertyIterator()) {\n for (const value of propertyToCheck.getValueIterator()) {\n if (!(value instanceof DateTimeValue)) {\n continue;\n }\n if (value.timezoneId === searchTimezone) {\n value.silentlyReplaceTimezone(replaceTimezone);\n }\n }\n }\n\n // TRIGGER is supposed to be stored in UTC only,\n // but not all clients stick to this\n for (const alarm of vObject.getAlarmIterator()) {\n for (const propertyToCheck of alarm.getPropertyIterator()) {\n for (const value of propertyToCheck.getValueIterator()) {\n if (!(value instanceof DateTimeValue)) {\n continue;\n }\n if (value.timezoneId === searchTimezone) {\n value.silentlyReplaceTimezone(replaceTimezone);\n }\n }\n }\n }\n }\n }\n\n /**\n * Marks a certain component type as seen.\n * This is used for\n * containsVEvents()\n * containsVJournals()\n * containsVTodos()\n *\n * @param {string} compName The name of the visited component\n * @private\n */\n _markCompTypeAsSeen(compName) {\n switch (uc(compName)) {\n case 'VEVENT':\n this._containsVEvents = true;\n break;\n case 'VJOURNAL':\n this._containsVJournals = true;\n break;\n case 'VTODO':\n this._containsVTodos = true;\n break;\n case 'VFREEBUSY':\n this._containsVFreeBusy = true;\n break;\n }\n }\n\n /**\n * @inheritDoc\n */\n static getMimeTypes() {\n return ['text/calendar'];\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class ParserManager\n * @classdesc\n */\nclass ParserManager {\n /**\n * Constructor\n */\n constructor() {\n /**\n * List of supported parsers\n *\n * @type {Function[]}\n */\n this._parsers = [];\n }\n\n /**\n * Get a list of all supported file-types\n *\n * @return {string[]}\n */\n getAllSupportedFileTypes() {\n return this._parsers.reduce((allFileTypes, parser) => allFileTypes.concat(parser.getMimeTypes()), []);\n }\n\n /**\n * Get an instance of a parser for one specific file-type\n *\n * @param {string} fileType The mime-type to get a parser for\n * @param {object=} options Options destructuring object\n * @param {boolean=} options.extractGlobalProperties Whether or not to preserve properties from the VCALENDAR component (defaults to false)\n * @param {boolean=} options.removeRSVPForAttendees Whether or not to remove RSVP from attendees (defaults to false)\n * @param {boolean=} options.includeTimezones Whether or not to include timezones (defaults to false)\n * @param {boolean=} options.preserveMethod Whether or not to preserve the iCalendar method (defaults to false)\n * @param {boolean=} options.processFreeBusy Whether or not to process VFreeBusy components (defaults to false)\n *\n * @return {AbstractParser}\n */\n getParserForFileType(fileType, options) {\n const Parser = this._parsers.find(parser => parser.getMimeTypes().includes(fileType));\n if (!Parser) {\n throw new TypeError('Unknown file-type.');\n }\n return new Parser(options);\n }\n\n /**\n * Registers a parser\n *\n * @param {Function} parser The parser to register\n */\n registerParser(parser) {\n this._parsers.push(parser);\n }\n}\n\n/**\n * Gets an instance of the ParserManager with all default parsers\n *\n * @return {ParserManager}\n */\nfunction getParserManager() {\n const parserManager = new ParserManager();\n\n // We only support iCalendar for now.\n // JSON calendar and CSV will be supported soon,\n // but require some more work\n\n parserManager.registerParser(ICalendarParser);\n // parserManager.registerParser(JCalendarParser)\n // parserManager.registerParser(CSVParser)\n\n return parserManager;\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n * @class TimezoneAdapter\n * @classdesc Connecting ICAL.TimezoneService with our TimezoneManager\n */\nclass TimezoneAdapter {\n /**\n * Constructor\n *\n * @param {TimezoneManager} timezoneManager The timezone-manager to wrap\n */\n constructor(timezoneManager) {\n /**\n * TimezoneManager object\n *\n * @type {TimezoneManager}\n * @private\n */\n this._timezoneManager = timezoneManager;\n }\n\n /**\n * @param {string} timezoneId The id of the timezone\n * @return {boolean}\n */\n has(timezoneId) {\n return this._timezoneManager.hasTimezoneForId(timezoneId);\n }\n\n /**\n * @param {string} timezoneId The id of the timezone\n * @return {ICAL.Timezone|undefined}\n */\n get(timezoneId) {\n const timezone = this._timezoneManager.getTimezoneForId(timezoneId);\n if (!timezone) {\n return undefined;\n }\n return timezone.toICALTimezone();\n }\n\n /**\n * @throws TypeError\n */\n register() {\n throw new TypeError('Not allowed to register new timezone');\n }\n\n /**\n * @throws TypeError\n */\n remove() {\n throw new TypeError('Not allowed to remove timezone');\n }\n\n /**\n * @throws TypeError\n */\n reset() {\n throw new TypeError('Not allowed to reset TimezoneService');\n }\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\nclass IllegalValueError extends Error {}\n\n/**\n * @copyright Copyright (c) 2021 Christoph Wurst\n *\n * @author Christoph Wurst \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\n\n/**\n *\n * @param {string[]} timezoneList List of Olsen timezones\n * @param {Array} additionalTimezones List of additional timezones\n * @param {string} globalTimezoneName The localized name of the \"Global\" timezones\n * @return {[]}\n */\nfunction getSortedTimezoneList(timezoneList = [], additionalTimezones = [], globalTimezoneName = 'Global') {\n const sortedByContinent = {};\n const sortedList = [];\n for (const timezoneId of timezoneList) {\n const components = timezoneId.split('/');\n let [continent, name] = [components.shift(), components.join('/')];\n if (!name) {\n name = continent;\n continent = globalTimezoneName;\n }\n sortedByContinent[continent] = sortedByContinent[continent] || {\n continent,\n regions: []\n };\n sortedByContinent[continent].regions.push({\n label: getReadableTimezoneName(name),\n cities: [],\n timezoneId\n });\n }\n for (const additionalTimezone of additionalTimezones) {\n const {\n continent,\n label,\n timezoneId\n } = additionalTimezone;\n sortedByContinent[continent] = sortedByContinent[continent] || {\n continent,\n regions: []\n };\n sortedByContinent[continent].regions.push({\n label,\n cities: [],\n timezoneId\n });\n }\n for (const continent in sortedByContinent) {\n if (!Object.prototype.hasOwnProperty.call(sortedByContinent, continent)) {\n continue;\n }\n sortedByContinent[continent].regions.sort((a, b) => {\n if (a.label < b.label) {\n return -1;\n }\n return 1;\n });\n sortedList.push(sortedByContinent[continent]);\n }\n\n // Sort continents by name\n sortedList.sort((a, b) => {\n if (a.continent < b.continent) {\n return -1;\n }\n return 1;\n });\n return sortedList;\n}\n\n/**\n * Get human-readable name for timezoneId\n *\n * @param {string} timezoneId TimezoneId to turn human-readable\n * @return {string}\n */\nfunction getReadableTimezoneName(timezoneId) {\n return timezoneId.split('_').join(' ').replace('St ', 'St. ').split('/').join(' - ');\n}\n\n/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke \n *\n * @author Richard Steinmetz \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\nif (!(ICAL.TimezoneService instanceof TimezoneAdapter)) {\n ICAL.TimezoneService = new TimezoneAdapter(getTimezoneManager());\n}\n\n/**\n * parses a single ICS and returns an iterator over all occurrences\n * in a given timeframe\n *\n * @param {string} ics The calendar-data to parse\n * @param {DateTimeValue} start The start of the queried time-range\n * @param {DateTimeValue} end The end of the queried time-range\n */\nfunction* parseICSAndGetAllOccurrencesBetween(ics, start, end) {\n const parserManager = getParserManager();\n const icsParser = parserManager.getParserForFileType('text/calendar');\n icsParser.parse(ics);\n const objectIterator = icsParser.getItemIterator();\n const calendarComp = objectIterator.next().value;\n if (calendarComp === undefined) {\n return;\n }\n const vObjectIterator = calendarComp.getVObjectIterator();\n const firstVObject = vObjectIterator.next().value;\n if (firstVObject === undefined) {\n return;\n }\n yield* firstVObject.recurrenceManager.getAllOccurrencesBetweenIterator(start, end);\n}\n\n/**\n * Creates a new event\n *\n * @param {DateTimeValue} start Start-time of the new event\n * @param {DateTimeValue} end End-time of the new event\n * @return {CalendarComponent}\n */\nfunction createEvent(start, end) {\n const calendar = CalendarComponent.fromEmpty();\n const eventComponent = new EventComponent('VEVENT');\n eventComponent.updatePropertyWithValue('CREATED', DateTimeValue.fromJSDate(dateFactory(), true));\n eventComponent.updatePropertyWithValue('DTSTAMP', DateTimeValue.fromJSDate(dateFactory(), true));\n eventComponent.updatePropertyWithValue('LAST-MODIFIED', DateTimeValue.fromJSDate(dateFactory(), true));\n eventComponent.updatePropertyWithValue('SEQUENCE', 0);\n eventComponent.updatePropertyWithValue('UID', v4());\n eventComponent.updatePropertyWithValue('DTSTART', start);\n eventComponent.updatePropertyWithValue('DTEND', end);\n calendar.addComponent(eventComponent);\n eventComponent.recurrenceManager = new RecurrenceManager(eventComponent);\n return calendar;\n}\n\n/**\n * Creates a FreeBusy Request to be used on the scheduling outbox\n *\n * @param {DateTimeValue} start The start of the queried time-range\n * @param {DateTimeValue} end The end of the queried time-range\n * @param {AttendeeProperty} organizer The organizer querying information\n * @param {AttendeeProperty[]}attendees The list of attendees to query information for\n * @return {CalendarComponent}\n */\nfunction createFreeBusyRequest(start, end, organizer, attendees) {\n const calendar = CalendarComponent.fromMethod('REQUEST');\n const freeBusyComponent = new FreeBusyComponent('VFREEBUSY');\n freeBusyComponent.updatePropertyWithValue('DTSTAMP', DateTimeValue.fromJSDate(dateFactory(), true));\n freeBusyComponent.updatePropertyWithValue('UID', v4());\n freeBusyComponent.updatePropertyWithValue('DTSTART', start.clone().getInUTC());\n freeBusyComponent.updatePropertyWithValue('DTEND', end.clone().getInUTC());\n freeBusyComponent.addProperty(organizer.clone());\n for (const attendee of attendees) {\n const clonedAttendee = attendee.clone();\n clonedAttendee.deleteParameter('ROLE');\n clonedAttendee.deleteParameter('CUTYPE');\n clonedAttendee.deleteParameter('RSVP');\n clonedAttendee.deleteParameter('PARTSTAT');\n clonedAttendee.deleteParameter('REQUEST-STATUS');\n clonedAttendee.deleteParameter('LANGUAGE');\n freeBusyComponent.addProperty(clonedAttendee);\n }\n calendar.addComponent(freeBusyComponent);\n return calendar;\n}\n\nexport { AbstractComponent, AbstractParser, AbstractRecurringComponent, AbstractValue, AlarmComponent, AttachmentProperty, AttendeeProperty, BinaryValue, CalendarComponent, ConferenceProperty, DateTimeValue, DurationValue, EventComponent, ExpectedICalJSError, FreeBusyComponent, FreeBusyProperty, GeoProperty, ICalendarParser, IllegalValueError, ImageProperty, JournalComponent, ModificationNotAllowedError, Parameter, ParserManager, PeriodValue, Property, RecurValue, RecurrenceManager, RecurringWithoutDtStartError, RelationProperty, RequestStatusProperty, TextProperty, Timezone, TimezoneAdapter, TimezoneComponent, TimezoneManager, ToDoComponent, TriggerProperty, UTCOffsetValue, UnknownICALTypeError, createEvent, createFreeBusyRequest, getConstructorForICALType, getConstructorForPropertyName, getParserManager, getReadableTimezoneName, getSortedTimezoneList, getTimezoneManager, isOlsonTimezone, parseICSAndGetAllOccurrencesBetween, setConfig };\n//# sourceMappingURL=index.esm.js.map\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-086a3afb.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-086a3afb.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../css-loader/dist/cjs.js!./vue-select.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../css-loader/dist/cjs.js!./vue-select.css\";\n export default content && content.locals ? content.locals : undefined;\n","function t(t){return t.split(\"-\")[1]}function e(t){return\"y\"===t?\"height\":\"width\"}function n(t){return t.split(\"-\")[0]}function o(t){return[\"top\",\"bottom\"].includes(n(t))?\"x\":\"y\"}function i(i,r,a){let{reference:l,floating:s}=i;const c=l.x+l.width/2-s.width/2,f=l.y+l.height/2-s.height/2,u=o(r),m=e(u),g=l[m]/2-s[m]/2,d=\"x\"===u;let p;switch(n(r)){case\"top\":p={x:c,y:l.y-s.height};break;case\"bottom\":p={x:c,y:l.y+l.height};break;case\"right\":p={x:l.x+l.width,y:f};break;case\"left\":p={x:l.x-s.width,y:f};break;default:p={x:l.x,y:l.y}}switch(t(r)){case\"start\":p[u]-=g*(a&&d?-1:1);break;case\"end\":p[u]+=g*(a&&d?-1:1)}return p}const r=async(t,e,n)=>{const{placement:o=\"bottom\",strategy:r=\"absolute\",middleware:a=[],platform:l}=n,s=a.filter(Boolean),c=await(null==l.isRTL?void 0:l.isRTL(e));let f=await l.getElementRects({reference:t,floating:e,strategy:r}),{x:u,y:m}=i(f,o,c),g=o,d={},p=0;for(let n=0;n({name:\"arrow\",options:n,async fn(i){const{element:r,padding:l=0}=n||{},{x:s,y:c,placement:f,rects:m,platform:g}=i;if(null==r)return{};const d=a(l),p={x:s,y:c},h=o(f),y=e(h),x=await g.getDimensions(r),w=\"y\"===h?\"top\":\"left\",v=\"y\"===h?\"bottom\":\"right\",b=m.reference[y]+m.reference[h]-p[h]-m.floating[y],R=p[h]-m.reference[h],A=await(null==g.getOffsetParent?void 0:g.getOffsetParent(r));let P=A?\"y\"===h?A.clientHeight||0:A.clientWidth||0:0;0===P&&(P=m.floating[y]);const T=b/2-R/2,O=d[w],D=P-x[y]-d[v],E=P/2-x[y]/2+T,L=u(O,E,D),k=null!=t(f)&&E!=L&&m.reference[y]/2-(Et.concat(e,e+\"-start\",e+\"-end\")),[]),p={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};function h(t){return t.replace(/left|right|bottom|top/g,(t=>p[t]))}function y(n,i,r){void 0===r&&(r=!1);const a=t(n),l=o(n),s=e(l);let c=\"x\"===l?a===(r?\"end\":\"start\")?\"right\":\"left\":\"start\"===a?\"bottom\":\"top\";return i.reference[s]>i.floating[s]&&(c=h(c)),{main:c,cross:h(c)}}const x={start:\"end\",end:\"start\"};function w(t){return t.replace(/start|end/g,(t=>x[t]))}const v=function(e){return void 0===e&&(e={}),{name:\"autoPlacement\",options:e,async fn(o){var i,r,a;const{rects:l,middlewareData:c,placement:f,platform:u,elements:m}=o,{alignment:g,allowedPlacements:p=d,autoAlignment:h=!0,...x}=e,v=void 0!==g||p===d?function(e,o,i){return(e?[...i.filter((n=>t(n)===e)),...i.filter((n=>t(n)!==e))]:i.filter((t=>n(t)===t))).filter((n=>!e||t(n)===e||!!o&&w(n)!==n))}(g||null,h,p):p,b=await s(o,x),R=(null==(i=c.autoPlacement)?void 0:i.index)||0,A=v[R];if(null==A)return{};const{main:P,cross:T}=y(A,l,await(null==u.isRTL?void 0:u.isRTL(m.floating)));if(f!==A)return{reset:{placement:v[0]}};const O=[b[n(A)],b[P],b[T]],D=[...(null==(r=c.autoPlacement)?void 0:r.overflows)||[],{placement:A,overflows:O}],E=v[R+1];if(E)return{data:{index:R+1,overflows:D},reset:{placement:E}};const L=D.slice().sort(((t,e)=>t.overflows[0]-e.overflows[0])),k=null==(a=L.find((t=>{let{overflows:e}=t;return e.every((t=>t<=0))})))?void 0:a.placement,B=k||L[0].placement;return B!==f?{data:{index:R+1,overflows:D},reset:{placement:B}}:{}}}};const b=function(e){return void 0===e&&(e={}),{name:\"flip\",options:e,async fn(o){var i;const{placement:r,middlewareData:a,rects:l,initialPlacement:c,platform:f,elements:u}=o,{mainAxis:m=!0,crossAxis:g=!0,fallbackPlacements:d,fallbackStrategy:p=\"bestFit\",fallbackAxisSideDirection:x=\"none\",flipAlignment:v=!0,...b}=e,R=n(r),A=n(c)===c,P=await(null==f.isRTL?void 0:f.isRTL(u.floating)),T=d||(A||!v?[h(c)]:function(t){const e=h(t);return[w(t),e,w(e)]}(c));d||\"none\"===x||T.push(...function(e,o,i,r){const a=t(e);let l=function(t,e,n){const o=[\"left\",\"right\"],i=[\"right\",\"left\"],r=[\"top\",\"bottom\"],a=[\"bottom\",\"top\"];switch(t){case\"top\":case\"bottom\":return n?e?i:o:e?o:i;case\"left\":case\"right\":return e?r:a;default:return[]}}(n(e),\"start\"===i,r);return a&&(l=l.map((t=>t+\"-\"+a)),o&&(l=l.concat(l.map(w)))),l}(c,v,x,P));const O=[c,...T],D=await s(o,b),E=[];let L=(null==(i=a.flip)?void 0:i.overflows)||[];if(m&&E.push(D[R]),g){const{main:t,cross:e}=y(r,l,P);E.push(D[t],D[e])}if(L=[...L,{placement:r,overflows:E}],!E.every((t=>t<=0))){var k;const t=((null==(k=a.flip)?void 0:k.index)||0)+1,e=O[t];if(e)return{data:{index:t,overflows:L},reset:{placement:e}};let n=\"bottom\";switch(p){case\"bestFit\":{var B;const t=null==(B=L.map((t=>[t,t.overflows.filter((t=>t>0)).reduce(((t,e)=>t+e),0)])).sort(((t,e)=>t[1]-e[1]))[0])?void 0:B[0].placement;t&&(n=t);break}case\"initialPlacement\":n=c}if(r!==n)return{reset:{placement:n}}}return{}}}};function R(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function A(t){return g.some((e=>t[e]>=0))}const P=function(t){return void 0===t&&(t={}),{name:\"hide\",options:t,async fn(e){const{strategy:n=\"referenceHidden\",...o}=t,{rects:i}=e;switch(n){case\"referenceHidden\":{const t=R(await s(e,{...o,elementContext:\"reference\"}),i.reference);return{data:{referenceHiddenOffsets:t,referenceHidden:A(t)}}}case\"escaped\":{const t=R(await s(e,{...o,altBoundary:!0}),i.floating);return{data:{escapedOffsets:t,escaped:A(t)}}}default:return{}}}}},T=function(t){return void 0===t&&(t={}),{name:\"inline\",options:t,async fn(e){const{placement:i,elements:r,rects:s,platform:u,strategy:m}=e,{padding:g=2,x:d,y:p}=t,h=l(u.convertOffsetParentRelativeRectToViewportRelativeRect?await u.convertOffsetParentRelativeRectToViewportRelativeRect({rect:s.reference,offsetParent:await(null==u.getOffsetParent?void 0:u.getOffsetParent(r.floating)),strategy:m}):s.reference),y=await(null==u.getClientRects?void 0:u.getClientRects(r.reference))||[],x=a(g);const w=await u.getElementRects({reference:{getBoundingClientRect:function(){if(2===y.length&&y[0].left>y[1].right&&null!=d&&null!=p)return y.find((t=>d>t.left-x.left&&dt.top-x.top&&p=2){if(\"x\"===o(i)){const t=y[0],e=y[y.length-1],o=\"top\"===n(i),r=t.top,a=e.bottom,l=o?t.left:e.left,s=o?t.right:e.right;return{top:r,bottom:a,left:l,right:s,width:s-l,height:a-r,x:l,y:r}}const t=\"left\"===n(i),e=f(...y.map((t=>t.right))),r=c(...y.map((t=>t.left))),a=y.filter((n=>t?n.left===r:n.right===e)),l=a[0].top,s=a[a.length-1].bottom;return{top:l,bottom:s,left:r,right:e,width:e-r,height:s-l,x:r,y:l}}return h}},floating:r.floating,strategy:m});return s.reference.x!==w.reference.x||s.reference.y!==w.reference.y||s.reference.width!==w.reference.width||s.reference.height!==w.reference.height?{reset:{rects:w}}:{}}}};const O=function(e){return void 0===e&&(e=0),{name:\"offset\",options:e,async fn(i){const{x:r,y:a}=i,l=await async function(e,i){const{placement:r,platform:a,elements:l}=e,s=await(null==a.isRTL?void 0:a.isRTL(l.floating)),c=n(r),f=t(r),u=\"x\"===o(r),m=[\"left\",\"top\"].includes(c)?-1:1,g=s&&u?-1:1,d=\"function\"==typeof i?i(e):i;let{mainAxis:p,crossAxis:h,alignmentAxis:y}=\"number\"==typeof d?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...d};return f&&\"number\"==typeof y&&(h=\"end\"===f?-1*y:y),u?{x:h*g,y:p*m}:{x:p*m,y:h*g}}(i,e);return{x:r+l.x,y:a+l.y,data:l}}}};function D(t){return\"x\"===t?\"y\":\"x\"}const E=function(t){return void 0===t&&(t={}),{name:\"shift\",options:t,async fn(e){const{x:i,y:r,placement:a}=e,{mainAxis:l=!0,crossAxis:c=!1,limiter:f={fn:t=>{let{x:e,y:n}=t;return{x:e,y:n}}},...m}=t,g={x:i,y:r},d=await s(e,m),p=o(n(a)),h=D(p);let y=g[p],x=g[h];if(l){const t=\"y\"===p?\"bottom\":\"right\";y=u(y+d[\"y\"===p?\"top\":\"left\"],y,y-d[t])}if(c){const t=\"y\"===h?\"bottom\":\"right\";x=u(x+d[\"y\"===h?\"top\":\"left\"],x,x-d[t])}const w=f.fn({...e,[p]:y,[h]:x});return{...w,data:{x:w.x-i,y:w.y-r}}}}},L=function(t){return void 0===t&&(t={}),{options:t,fn(e){const{x:i,y:r,placement:a,rects:l,middlewareData:s}=e,{offset:c=0,mainAxis:f=!0,crossAxis:u=!0}=t,m={x:i,y:r},g=o(a),d=D(g);let p=m[g],h=m[d];const y=\"function\"==typeof c?c(e):c,x=\"number\"==typeof y?{mainAxis:y,crossAxis:0}:{mainAxis:0,crossAxis:0,...y};if(f){const t=\"y\"===g?\"height\":\"width\",e=l.reference[g]-l.floating[t]+x.mainAxis,n=l.reference[g]+l.reference[t]-x.mainAxis;pn&&(p=n)}if(u){var w,v;const t=\"y\"===g?\"width\":\"height\",e=[\"top\",\"left\"].includes(n(a)),o=l.reference[d]-l.floating[t]+(e&&(null==(w=s.offset)?void 0:w[d])||0)+(e?0:x.crossAxis),i=l.reference[d]+l.reference[t]+(e?0:(null==(v=s.offset)?void 0:v[d])||0)-(e?x.crossAxis:0);hi&&(h=i)}return{[g]:p,[d]:h}}}},k=function(e){return void 0===e&&(e={}),{name:\"size\",options:e,async fn(o){const{placement:i,rects:r,platform:a,elements:l}=o,{apply:c=(()=>{}),...u}=e,m=await s(o,u),g=n(i),d=t(i);let p,h;\"top\"===g||\"bottom\"===g?(p=g,h=d===(await(null==a.isRTL?void 0:a.isRTL(l.floating))?\"start\":\"end\")?\"left\":\"right\"):(h=g,p=\"end\"===d?\"top\":\"bottom\");const y=f(m.left,0),x=f(m.right,0),w=f(m.top,0),v=f(m.bottom,0),b={availableHeight:r.floating.height-([\"left\",\"right\"].includes(i)?2*(0!==w||0!==v?w+v:f(m.top,m.bottom)):m[p]),availableWidth:r.floating.width-([\"top\",\"bottom\"].includes(i)?2*(0!==y||0!==x?y+x:f(m.left,m.right)):m[h])};await c({...o,...b});const R=await a.getDimensions(l.floating);return r.floating.width!==R.width||r.floating.height!==R.height?{reset:{rects:!0}}:{}}}};export{m as arrow,v as autoPlacement,r as computePosition,s as detectOverflow,b as flip,P as hide,T as inline,L as limitShift,O as offset,l as rectToClientRect,E as shift,k as size};\n","import{rectToClientRect as t,computePosition as e}from\"@floating-ui/core\";export{arrow,autoPlacement,detectOverflow,flip,hide,inline,limitShift,offset,shift,size}from\"@floating-ui/core\";function n(t){var e;return(null==(e=t.ownerDocument)?void 0:e.defaultView)||window}function o(t){return n(t).getComputedStyle(t)}function i(t){return f(t)?(t.nodeName||\"\").toLowerCase():\"\"}let r;function l(){if(r)return r;const t=navigator.userAgentData;return t&&Array.isArray(t.brands)?(r=t.brands.map((t=>t.brand+\"/\"+t.version)).join(\" \"),r):navigator.userAgent}function c(t){return t instanceof n(t).HTMLElement}function s(t){return t instanceof n(t).Element}function f(t){return t instanceof n(t).Node}function u(t){if(\"undefined\"==typeof ShadowRoot)return!1;return t instanceof n(t).ShadowRoot||t instanceof ShadowRoot}function a(t){const{overflow:e,overflowX:n,overflowY:i,display:r}=o(t);return/auto|scroll|overlay|hidden|clip/.test(e+i+n)&&![\"inline\",\"contents\"].includes(r)}function d(t){return[\"table\",\"td\",\"th\"].includes(i(t))}function h(t){const e=/firefox/i.test(l()),n=o(t),i=n.backdropFilter||n.WebkitBackdropFilter;return\"none\"!==n.transform||\"none\"!==n.perspective||!!i&&\"none\"!==i||e&&\"filter\"===n.willChange||e&&!!n.filter&&\"none\"!==n.filter||[\"transform\",\"perspective\"].some((t=>n.willChange.includes(t)))||[\"paint\",\"layout\",\"strict\",\"content\"].some((t=>{const e=n.contain;return null!=e&&e.includes(t)}))}function p(){return!/^((?!chrome|android).)*safari/i.test(l())}function g(t){return[\"html\",\"body\",\"#document\"].includes(i(t))}const m=Math.min,y=Math.max,x=Math.round;function w(t){const e=o(t);let n=parseFloat(e.width),i=parseFloat(e.height);const r=t.offsetWidth,l=t.offsetHeight,c=x(n)!==r||x(i)!==l;return c&&(n=r,i=l),{width:n,height:i,fallback:c}}function v(t){return s(t)?t:t.contextElement}const b={x:1,y:1};function L(t){const e=v(t);if(!c(e))return b;const n=e.getBoundingClientRect(),{width:o,height:i,fallback:r}=w(e);let l=(r?x(n.width):n.width)/o,s=(r?x(n.height):n.height)/i;return l&&Number.isFinite(l)||(l=1),s&&Number.isFinite(s)||(s=1),{x:l,y:s}}function E(t,e,o,i){var r,l;void 0===e&&(e=!1),void 0===o&&(o=!1);const c=t.getBoundingClientRect(),f=v(t);let u=b;e&&(i?s(i)&&(u=L(i)):u=L(t));const a=f?n(f):window,d=!p()&&o;let h=(c.left+(d&&(null==(r=a.visualViewport)?void 0:r.offsetLeft)||0))/u.x,g=(c.top+(d&&(null==(l=a.visualViewport)?void 0:l.offsetTop)||0))/u.y,m=c.width/u.x,y=c.height/u.y;if(f){const t=n(f),e=i&&s(i)?n(i):i;let o=t.frameElement;for(;o&&i&&e!==t;){const t=L(o),e=o.getBoundingClientRect(),i=getComputedStyle(o);e.x+=(o.clientLeft+parseFloat(i.paddingLeft))*t.x,e.y+=(o.clientTop+parseFloat(i.paddingTop))*t.y,h*=t.x,g*=t.y,m*=t.x,y*=t.y,h+=e.x,g+=e.y,o=n(o).frameElement}}return{width:m,height:y,top:g,right:h+m,bottom:g+y,left:h,x:h,y:g}}function R(t){return((f(t)?t.ownerDocument:t.document)||window.document).documentElement}function T(t){return s(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function C(t){return E(R(t)).left+T(t).scrollLeft}function F(t,e,n){const o=c(e),r=R(e),l=E(t,!0,\"fixed\"===n,e);let s={scrollLeft:0,scrollTop:0};const f={x:0,y:0};if(o||!o&&\"fixed\"!==n)if((\"body\"!==i(e)||a(r))&&(s=T(e)),c(e)){const t=E(e,!0);f.x=t.x+e.clientLeft,f.y=t.y+e.clientTop}else r&&(f.x=C(r));return{x:l.left+s.scrollLeft-f.x,y:l.top+s.scrollTop-f.y,width:l.width,height:l.height}}function W(t){if(\"html\"===i(t))return t;const e=t.assignedSlot||t.parentNode||(u(t)?t.host:null)||R(t);return u(e)?e.host:e}function D(t){return c(t)&&\"fixed\"!==o(t).position?t.offsetParent:null}function S(t){const e=n(t);let r=D(t);for(;r&&d(r)&&\"static\"===o(r).position;)r=D(r);return r&&(\"html\"===i(r)||\"body\"===i(r)&&\"static\"===o(r).position&&!h(r))?e:r||function(t){let e=W(t);for(;c(e)&&!g(e);){if(h(e))return e;e=W(e)}return null}(t)||e}function A(t){const e=W(t);return g(e)?t.ownerDocument.body:c(e)&&a(e)?e:A(e)}function H(t,e){var o;void 0===e&&(e=[]);const i=A(t),r=i===(null==(o=t.ownerDocument)?void 0:o.body),l=n(i);return r?e.concat(l,l.visualViewport||[],a(i)?i:[]):e.concat(i,H(i))}function O(e,i,r){return\"viewport\"===i?t(function(t,e){const o=n(t),i=R(t),r=o.visualViewport;let l=i.clientWidth,c=i.clientHeight,s=0,f=0;if(r){l=r.width,c=r.height;const t=p();(t||!t&&\"fixed\"===e)&&(s=r.offsetLeft,f=r.offsetTop)}return{width:l,height:c,x:s,y:f}}(e,r)):s(i)?function(t,e){const n=E(t,!0,\"fixed\"===e),o=n.top+t.clientTop,i=n.left+t.clientLeft,r=c(t)?L(t):{x:1,y:1},l=t.clientWidth*r.x,s=t.clientHeight*r.y,f=i*r.x,u=o*r.y;return{top:u,left:f,right:f+l,bottom:u+s,x:f,y:u,width:l,height:s}}(i,r):t(function(t){var e;const n=R(t),i=T(t),r=null==(e=t.ownerDocument)?void 0:e.body,l=y(n.scrollWidth,n.clientWidth,r?r.scrollWidth:0,r?r.clientWidth:0),c=y(n.scrollHeight,n.clientHeight,r?r.scrollHeight:0,r?r.clientHeight:0);let s=-i.scrollLeft+C(t);const f=-i.scrollTop;return\"rtl\"===o(r||n).direction&&(s+=y(n.clientWidth,r?r.clientWidth:0)-l),{width:l,height:c,x:s,y:f}}(R(e)))}const P={getClippingRect:function(t){let{element:e,boundary:n,rootBoundary:r,strategy:l}=t;const c=\"clippingAncestors\"===n?function(t,e){const n=e.get(t);if(n)return n;let r=H(t).filter((t=>s(t)&&\"body\"!==i(t))),l=null;const c=\"fixed\"===o(t).position;let f=c?W(t):t;for(;s(f)&&!g(f);){const t=o(f),e=h(f);(c?e||l:e||\"static\"!==t.position||!l||![\"absolute\",\"fixed\"].includes(l.position))?l=t:r=r.filter((t=>t!==f)),f=W(f)}return e.set(t,r),r}(e,this._c):[].concat(n),f=[...c,r],u=f[0],a=f.reduce(((t,n)=>{const o=O(e,n,l);return t.top=y(o.top,t.top),t.right=m(o.right,t.right),t.bottom=m(o.bottom,t.bottom),t.left=y(o.left,t.left),t}),O(e,u,l));return{width:a.right-a.left,height:a.bottom-a.top,x:a.left,y:a.top}},convertOffsetParentRelativeRectToViewportRelativeRect:function(t){let{rect:e,offsetParent:n,strategy:o}=t;const r=c(n),l=R(n);if(n===l)return e;let s={scrollLeft:0,scrollTop:0},f={x:1,y:1};const u={x:0,y:0};if((r||!r&&\"fixed\"!==o)&&((\"body\"!==i(n)||a(l))&&(s=T(n)),c(n))){const t=E(n);f=L(n),u.x=t.x+n.clientLeft,u.y=t.y+n.clientTop}return{width:e.width*f.x,height:e.height*f.y,x:e.x*f.x-s.scrollLeft*f.x+u.x,y:e.y*f.y-s.scrollTop*f.y+u.y}},isElement:s,getDimensions:function(t){return w(t)},getOffsetParent:S,getDocumentElement:R,getScale:L,async getElementRects(t){let{reference:e,floating:n,strategy:o}=t;const i=this.getOffsetParent||S,r=this.getDimensions;return{reference:F(e,await i(n),o),floating:{x:0,y:0,...await r(n)}}},getClientRects:t=>Array.from(t.getClientRects()),isRTL:t=>\"rtl\"===o(t).direction};function z(t,e,n,o){void 0===o&&(o={});const{ancestorScroll:i=!0,ancestorResize:r=!0,elementResize:l=!0,animationFrame:c=!1}=o,f=i&&!c,u=f||r?[...s(t)?H(t):t.contextElement?H(t.contextElement):[],...H(e)]:[];u.forEach((t=>{f&&t.addEventListener(\"scroll\",n,{passive:!0}),r&&t.addEventListener(\"resize\",n)}));let a,d=null;if(l){let o=!0;d=new ResizeObserver((()=>{o||n(),o=!1})),s(t)&&!c&&d.observe(t),s(t)||!t.contextElement||c||d.observe(t.contextElement),d.observe(e)}let h=c?E(t):null;return c&&function e(){const o=E(t);!h||o.x===h.x&&o.y===h.y&&o.width===h.width&&o.height===h.height||n();h=o,a=requestAnimationFrame(e)}(),n(),()=>{var t;u.forEach((t=>{f&&t.removeEventListener(\"scroll\",n),r&&t.removeEventListener(\"resize\",n)})),null==(t=d)||t.disconnect(),d=null,c&&cancelAnimationFrame(a)}}const V=(t,n,o)=>{const i=new Map,r={platform:P,...o},l={...r.platform,_c:i};return e(t,n,{...r,platform:l})};export{z as autoUpdate,V as computePosition,H as getOverflowAncestors,P as platform};\n","import { render, staticRenderFns } from \"./ChevronDown.vue?vue&type=template&id=5a2dce2f\"\nimport script from \"./ChevronDown.vue?vue&type=script&lang=js\"\nexport * from \"./ChevronDown.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../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\nexport default component.exports","\n\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon chevron-down-icon\",attrs:{\"aria-hidden\":!_vm.title,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./Close.vue?vue&type=template&id=75d4151a\"\nimport script from \"./Close.vue?vue&type=script&lang=js\"\nexport * from \"./Close.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../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\nexport default component.exports","\n\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon close-icon\",attrs:{\"aria-hidden\":!_vm.title,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-a2b51bce.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-a2b51bce.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { n as r } from \"./_plugin-vue2_normalizer-71e2aa87.mjs\";\n/**\n * @copyright Copyright (c) 2020 Raimund Schlüßler \n *\n * @author Raimund Schlüßler \n *\n * @license AGPL-3.0-or-later\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 .\n *\n */\nconst l = (e, t) => {\n const s = [];\n let h = 0, n = e.toLowerCase().indexOf(t.toLowerCase(), h), i = 0;\n for (; n > -1 && i < e.length; )\n h = n + t.length, s.push({ start: n, end: h }), n = e.toLowerCase().indexOf(t.toLowerCase(), h), i++;\n return s;\n}, a = {\n name: \"NcHighlight\",\n props: {\n /**\n * The string to display\n */\n text: {\n type: String,\n default: \"\"\n },\n /**\n * The string to match and highlight\n */\n search: {\n type: String,\n default: \"\"\n },\n /**\n * The ranges to highlight, takes precedence over the search prop.\n */\n highlight: {\n type: Array,\n default: () => []\n }\n },\n computed: {\n /**\n * The indice ranges which should be highlighted.\n * If an array with ranges is provided, we use it. Otherwise\n * we calculate it based on the provided substring to highlight.\n *\n * @return {Array} The array of ranges to highlight\n */\n ranges() {\n let e = [];\n return !this.search && this.highlight.length === 0 || (this.highlight.length > 0 ? e = this.highlight : e = l(this.text, this.search), e.forEach((t, s) => {\n t.end < t.start && (e[s] = {\n start: t.end,\n end: t.start\n });\n }), e = e.reduce((t, s) => (s.start < this.text.length && s.end > 0 && t.push({\n start: s.start < 0 ? 0 : s.start,\n end: s.end > this.text.length ? this.text.length : s.end\n }), t), []), e.sort((t, s) => t.start - s.start), e = e.reduce((t, s) => {\n if (!t.length)\n t.push(s);\n else {\n const h = t.length - 1;\n t[h].end >= s.start ? t[h] = {\n start: t[h].start,\n end: Math.max(t[h].end, s.end)\n } : t.push(s);\n }\n return t;\n }, [])), e;\n },\n /**\n * Calculate the different chunks to show based on the ranges to highlight.\n *\n * @return {Array} The chunks\n */\n chunks() {\n if (this.ranges.length === 0)\n return [{\n start: 0,\n end: this.text.length,\n highlight: !1,\n text: this.text\n }];\n const e = [];\n let t = 0, s = 0;\n for (; t < this.text.length; ) {\n const h = this.ranges[s];\n if (h.start === t) {\n e.push({\n ...h,\n highlight: !0,\n text: this.text.slice(h.start, h.end)\n }), s++, t = h.end, s >= this.ranges.length && t < this.text.length && (e.push({\n start: t,\n end: this.text.length,\n highlight: !1,\n text: this.text.slice(t)\n }), t = this.text.length);\n continue;\n }\n e.push({\n start: t,\n end: h.start,\n highlight: !1,\n text: this.text.slice(t, h.start)\n }), t = h.start;\n }\n return e;\n }\n },\n /**\n * The render function to display the component\n *\n * @param {Function} h The function to create VNodes\n * @return {object} The created VNode\n */\n render(e) {\n return this.ranges.length ? e(\"span\", {}, this.chunks.map((t) => t.highlight ? e(\"strong\", {}, t.text) : t.text)) : e(\"span\", {}, this.text);\n }\n}, u = null, o = null;\nvar c = /* @__PURE__ */ r(\n a,\n u,\n o,\n !1,\n null,\n null,\n null,\n null\n);\nconst d = c.exports;\nexport {\n l as F,\n d as N\n};\n","import \"../assets/index-a2b51bce.css\";\nimport { N as i, F as n } from \"../chunks/index-20a9ace9.mjs\";\nimport { n as r } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nconst a = {\n name: \"NcEllipsisedOption\",\n components: {\n NcHighlight: i\n },\n props: {\n name: {\n type: String,\n default: \"\"\n },\n search: {\n type: String,\n default: \"\"\n }\n },\n computed: {\n needsTruncate() {\n return this.name && this.name.length >= 10;\n },\n /**\n * Index at which to split the name if it is longer than 10 characters.\n *\n * @return {number} The position at which to split\n */\n split() {\n return this.name.length - Math.min(Math.floor(this.name.length / 2), 10);\n },\n part1() {\n return this.needsTruncate ? this.name.slice(0, this.split) : this.name;\n },\n part2() {\n return this.needsTruncate ? this.name.slice(this.split) : \"\";\n },\n /**\n * The ranges to highlight. Since we split the string for ellipsising,\n * the Highlight component cannot figure this out itself and needs the ranges provided.\n *\n * @return {Array} The array with the ranges to highlight\n */\n highlight1() {\n return this.search ? n(this.name, this.search) : [];\n },\n /**\n * We shift the ranges for the second part by the position of the split.\n * Ranges out of the string length are discarded by the Highlight component,\n * so we don't need to take care of this here.\n *\n * @return {Array} The array with the ranges to highlight\n */\n highlight2() {\n return this.highlight1.map((e) => ({\n start: e.start - this.split,\n end: e.end - this.split\n }));\n }\n }\n};\nvar h = function() {\n var t = this, s = t._self._c;\n return s(\"span\", { staticClass: \"name-parts\", attrs: { title: t.name } }, [s(\"NcHighlight\", { staticClass: \"name-parts__first\", attrs: { text: t.part1, search: t.search, highlight: t.highlight1 } }), t.part2 ? s(\"NcHighlight\", { staticClass: \"name-parts__last\", attrs: { text: t.part2, search: t.search, highlight: t.highlight2 } }) : t._e()], 1);\n}, l = [], c = /* @__PURE__ */ r(\n a,\n h,\n l,\n !1,\n null,\n \"08c4259e\",\n null,\n null\n);\nconst g = c.exports;\nexport {\n g as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-6f721577.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-6f721577.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-2e5e3b55.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-2e5e3b55.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-b7ce6eeb.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-b7ce6eeb.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-4a775ba1.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-4a775ba1.css\";\n export default content && content.locals ? content.locals : undefined;\n","import \"../assets/index-4a775ba1.css\";\nimport { n as f } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nconst y = {\n name: \"NcButton\",\n props: {\n /**\n * Set the text and icon alignment\n *\n * @default 'center'\n */\n alignment: {\n type: String,\n default: \"center\",\n validator: (t) => [\"start\", \"start-reverse\", \"center\", \"center-reverse\", \"end\", \"end-reverse\"].includes(t)\n },\n /**\n * Toggles the disabled state of the button on and off.\n */\n disabled: {\n type: Boolean,\n default: !1\n },\n /**\n * Specifies the button type\n * Accepted values: primary, secondary, tertiary, tertiary-no-background, tertiary-on-primary, error, warning, success. If left empty,\n * the default button style will be applied.\n */\n type: {\n type: String,\n validator(t) {\n return [\"primary\", \"secondary\", \"tertiary\", \"tertiary-no-background\", \"tertiary-on-primary\", \"error\", \"warning\", \"success\"].indexOf(t) !== -1;\n },\n default: \"secondary\"\n },\n /**\n * Specifies the button native type\n * Accepted values: submit, reset, button. If left empty,\n * the default \"button\" type will be used.\n */\n nativeType: {\n type: String,\n validator(t) {\n return [\"submit\", \"reset\", \"button\"].indexOf(t) !== -1;\n },\n default: \"button\"\n },\n /**\n * Specifies whether the button should span all the available width.\n * By default, buttons span the whole width of the container.\n */\n wide: {\n type: Boolean,\n default: !1\n },\n /**\n * Always try to provide an aria-label to your button. Make it more\n * specific than the button's name by provide some more context. E.g. if\n * the name of the button is \"send\" in the Mail app, the aria label could\n * be \"Send email\".\n */\n ariaLabel: {\n type: String,\n default: null\n },\n /**\n * Providing the href attribute turns the button component into an `a`\n * element.\n */\n href: {\n type: String,\n default: null\n },\n /**\n * Providing the download attribute with href downloads file when clicking.\n */\n download: {\n type: String,\n default: null\n },\n /**\n * Providing the to attribute turns the button component into a `router-link`\n * element. Takes precedence over the href attribute.\n */\n to: {\n type: [String, Object],\n default: null\n },\n /**\n * Pass in `true` if you want the matching behaviour of `router-link` to\n * be non-inclusive: https://router.vuejs.org/api/#exact\n */\n exact: {\n type: Boolean,\n default: !1\n },\n /**\n * aria-hidden attribute for the icon slot\n */\n ariaHidden: {\n type: Boolean,\n default: null\n },\n /**\n * The pressed state of the button if it has a checked state\n * This will add the `aria-pressed` attribute and for the button to have the primary style in checked state.\n */\n pressed: {\n type: Boolean,\n default: null\n }\n },\n emits: [\"update:pressed\", \"click\"],\n computed: {\n /**\n * The real type to be used for the button, enforces `primary` for pressed state and, if stateful button, any other type for not pressed state\n * Otherwise the type property is used.\n */\n realType() {\n return this.pressed ? \"primary\" : this.pressed === !1 && this.type === \"primary\" ? \"secondary\" : this.type;\n },\n /**\n * The flexbox alignment of the button content\n */\n flexAlignment() {\n return this.alignment.split(\"-\")[0];\n },\n /**\n * If the button content should be reversed (icon on the end)\n */\n isReverseAligned() {\n return this.alignment.includes(\"-\");\n }\n },\n /**\n * The render function to display the component\n *\n * @param {Function} h The function to create VNodes\n * @return {object|undefined} The created VNode\n */\n render(t) {\n var a, o, r, u, d;\n const e = (u = (r = (o = (a = this.$slots.default) == null ? void 0 : a[0]) == null ? void 0 : o.text) == null ? void 0 : r.trim) == null ? void 0 : u.call(r), n = !!e, s = (d = this.$slots) == null ? void 0 : d.icon;\n !e && !this.ariaLabel && console.warn(\n \"You need to fill either the text or the ariaLabel props in the button component.\",\n {\n text: e,\n ariaLabel: this.ariaLabel\n },\n this\n );\n const l = ({ navigate: i, isActive: h, isExactActive: c } = {}) => t(\n this.to || !this.href ? \"button\" : \"a\",\n {\n class: [\n \"button-vue\",\n {\n \"button-vue--icon-only\": s && !n,\n \"button-vue--text-only\": n && !s,\n \"button-vue--icon-and-text\": s && n,\n [`button-vue--vue-${this.realType}`]: this.realType,\n \"button-vue--wide\": this.wide,\n [`button-vue--${this.flexAlignment}`]: this.flexAlignment !== \"center\",\n \"button-vue--reverse\": this.isReverseAligned,\n active: h,\n \"router-link-exact-active\": c\n }\n ],\n attrs: {\n \"aria-label\": this.ariaLabel,\n \"aria-pressed\": this.pressed,\n disabled: this.disabled,\n type: this.href ? null : this.nativeType,\n role: this.href ? \"button\" : null,\n href: !this.to && this.href ? this.href : null,\n target: !this.to && this.href ? \"_self\" : null,\n rel: !this.to && this.href ? \"nofollow noreferrer noopener\" : null,\n download: !this.to && this.href && this.download ? this.download : null,\n ...this.$attrs\n },\n on: {\n ...this.$listeners,\n click: (p) => {\n typeof this.pressed == \"boolean\" && this.$emit(\"update:pressed\", !this.pressed), this.$emit(\"click\", p), i == null || i(p);\n }\n }\n },\n [\n t(\"span\", { class: \"button-vue__wrapper\" }, [\n s ? t(\n \"span\",\n {\n class: \"button-vue__icon\",\n attrs: {\n \"aria-hidden\": this.ariaHidden\n }\n },\n [this.$slots.icon]\n ) : null,\n n ? t(\"span\", { class: \"button-vue__text\" }, [e]) : null\n ])\n ]\n );\n return this.to ? t(\"router-link\", {\n props: {\n custom: !0,\n to: this.to,\n exact: this.exact\n },\n scopedSlots: {\n default: l\n }\n }) : l();\n }\n}, b = null, m = null;\nvar _ = /* @__PURE__ */ f(\n y,\n b,\n m,\n !1,\n null,\n \"bb88e612\",\n null,\n null\n);\nconst g = _.exports;\nexport {\n g as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-4ebacc78.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-4ebacc78.css\";\n export default content && content.locals ? content.locals : undefined;\n","function getBasePlacement(placement) {\n return placement.split('-')[0];\n}\n\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\n\nfunction getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].includes(getBasePlacement(placement)) ? 'x' : 'y';\n}\n\nfunction getLengthFromAxis(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\n\nfunction computeCoordsFromPlacement(_ref) {\n let {\n reference,\n floating,\n placement\n } = _ref;\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n let coords;\n\n switch (getBasePlacement(placement)) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n\n const mainAxis = getMainAxisFromPlacement(placement);\n const length = getLengthFromAxis(mainAxis);\n\n switch (getAlignment(placement)) {\n case 'start':\n coords[mainAxis] = coords[mainAxis] - (reference[length] / 2 - floating[length] / 2);\n break;\n\n case 'end':\n coords[mainAxis] = coords[mainAxis] + (reference[length] / 2 - floating[length] / 2);\n break;\n }\n\n return coords;\n}\n\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n\n if (process.env.NODE_ENV !== \"production\") {\n if (platform == null) {\n console.error(['Floating UI: `platform` property was not passed to config. If you', 'want to use Floating UI on the web, install @floating-ui/dom', 'instead of the /core package. Otherwise, you can create your own', '`platform`: https://floating-ui.com/docs/platform'].join(' '));\n }\n\n if (middleware.filter(_ref => {\n let {\n name\n } = _ref;\n return name === 'autoPlacement' || name === 'flip';\n }).length > 1) {\n throw new Error(['Floating UI: duplicate `flip` and/or `autoPlacement`', 'middleware detected. This will lead to an infinite loop. Ensure only', 'one of either has been passed to the `middleware` array.'].join(' '));\n }\n }\n\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement({ ...rects,\n placement\n });\n let statefulPlacement = placement;\n let middlewareData = {};\n let _debug_loop_count_ = 0;\n\n for (let i = 0; i < middleware.length; i++) {\n if (process.env.NODE_ENV !== \"production\") {\n _debug_loop_count_++;\n\n if (_debug_loop_count_ > 100) {\n throw new Error(['Floating UI: The middleware lifecycle appears to be', 'running in an infinite loop. This is usually caused by a `reset`', 'continually being returned without a break condition.'].join(' '));\n }\n }\n\n const {\n name,\n fn\n } = middleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = { ...middlewareData,\n [name]: data != null ? data : {}\n };\n\n if (reset) {\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n\n ({\n x,\n y\n } = computeCoordsFromPlacement({ ...rects,\n placement: statefulPlacement\n }));\n }\n\n i = -1;\n continue;\n }\n }\n\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\n\nfunction getSideObjectFromPadding(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\n\nfunction rectToClientRect(rect) {\n return { ...rect,\n top: rect.y,\n left: rect.x,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n };\n}\n\nasync function detectOverflow(middlewareArguments, options) {\n if (options === void 0) {\n options = {};\n }\n\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = middlewareArguments;\n const {\n boundary = 'clippingParents',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = options;\n const paddingObject = getSideObjectFromPadding(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = await platform.getClippingClientRect({\n element: (await platform.isElement(element)) ? element : element.contextElement || (await platform.getDocumentElement({\n element: elements.floating\n })),\n boundary,\n rootBoundary\n });\n const elementClientRect = rectToClientRect(await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n rect: elementContext === 'floating' ? { ...rects.floating,\n x,\n y\n } : rects.reference,\n offsetParent: await platform.getOffsetParent({\n element: elements.floating\n }),\n strategy\n })); // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n return {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n}\n\nconst min = Math.min;\nconst max = Math.max;\n\nfunction within(min$1, value, max$1) {\n return max(min$1, min(value, max$1));\n}\n\nconst arrow = options => ({\n name: 'arrow',\n options,\n\n async fn(middlewareArguments) {\n // Since `element` is required, we don't Partial<> the type\n const {\n element,\n padding = 0\n } = options != null ? options : {};\n const {\n x,\n y,\n placement,\n rects,\n platform\n } = middlewareArguments;\n\n if (element == null) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn('Floating UI: No `element` was passed to the `arrow` middleware.');\n }\n\n return {};\n }\n\n const paddingObject = getSideObjectFromPadding(padding);\n const coords = {\n x,\n y\n };\n const basePlacement = getBasePlacement(placement);\n const axis = getMainAxisFromPlacement(basePlacement);\n const length = getLengthFromAxis(axis);\n const arrowDimensions = await platform.getDimensions({\n element\n });\n const minProp = axis === 'y' ? 'top' : 'left';\n const maxProp = axis === 'y' ? 'bottom' : 'right';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await platform.getOffsetParent({\n element\n });\n const clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n const centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside of the floating element's bounds\n\n const min = paddingObject[minProp];\n const max = clientSize - arrowDimensions[length] - paddingObject[maxProp];\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = within(min, center, max);\n return {\n data: {\n [axis]: offset,\n centerOffset: center - offset\n }\n };\n }\n\n});\n\nconst hash$1 = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, matched => hash$1[matched]);\n}\n\nfunction getAlignmentSides(placement, rects) {\n const isStart = getAlignment(placement) === 'start';\n const mainAxis = getMainAxisFromPlacement(placement);\n const length = getLengthFromAxis(mainAxis);\n let mainAlignmentSide = mainAxis === 'x' ? isStart ? 'right' : 'left' : isStart ? 'bottom' : 'top';\n\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n\n return {\n main: mainAlignmentSide,\n cross: getOppositePlacement(mainAlignmentSide)\n };\n}\n\nconst hash = {\n start: 'end',\n end: 'start'\n};\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, matched => hash[matched]);\n}\n\nconst basePlacements = ['top', 'right', 'bottom', 'left'];\nconst allPlacements = /*#__PURE__*/basePlacements.reduce((acc, basePlacement) => acc.concat(basePlacement, basePlacement + \"-start\", basePlacement + \"-end\"), []);\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getBasePlacement(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n\n return true;\n });\n}\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n name: 'autoPlacement',\n options,\n\n async fn(middlewareArguments) {\n var _middlewareData$autoP, _middlewareData$autoP2, _middlewareData$autoP3, _middlewareData$autoP4, _middlewareData$autoP5, _placementsSortedByLe;\n\n const {\n x,\n y,\n rects,\n middlewareData,\n placement\n } = middlewareArguments;\n const {\n alignment = null,\n allowedPlacements = allPlacements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = options;\n\n if ((_middlewareData$autoP = middlewareData.autoPlacement) != null && _middlewareData$autoP.skip) {\n return {};\n }\n\n const placements = getPlacementList(alignment, autoAlignment, allowedPlacements);\n const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n const currentIndex = (_middlewareData$autoP2 = (_middlewareData$autoP3 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP3.index) != null ? _middlewareData$autoP2 : 0;\n const currentPlacement = placements[currentIndex];\n const {\n main,\n cross\n } = getAlignmentSides(currentPlacement, rects); // Make `computeCoords` start from the right place\n\n if (placement !== currentPlacement) {\n return {\n x,\n y,\n reset: {\n placement: placements[0]\n }\n };\n }\n\n const currentOverflows = [overflow[getBasePlacement(currentPlacement)], overflow[main], overflow[cross]];\n const allOverflows = [...((_middlewareData$autoP4 = (_middlewareData$autoP5 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP5.overflows) != null ? _middlewareData$autoP4 : []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements[currentIndex + 1]; // There are more placements to check\n\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n\n const placementsSortedByLeastOverflow = allOverflows.slice().sort((a, b) => a.overflows[0] - b.overflows[0]);\n const placementThatFitsOnAllSides = (_placementsSortedByLe = placementsSortedByLeastOverflow.find(_ref => {\n let {\n overflows\n } = _ref;\n return overflows.every(overflow => overflow <= 0);\n })) == null ? void 0 : _placementsSortedByLe.placement;\n return {\n data: {\n skip: true\n },\n reset: {\n placement: placementThatFitsOnAllSides != null ? placementThatFitsOnAllSides : placementsSortedByLeastOverflow[0].placement\n }\n };\n }\n\n };\n};\n\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\n\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n name: 'flip',\n options,\n\n async fn(middlewareArguments) {\n var _middlewareData$flip, _middlewareData$flip2;\n\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement\n } = middlewareArguments;\n\n if ((_middlewareData$flip = middlewareData.flip) != null && _middlewareData$flip.skip) {\n return {};\n }\n\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n flipAlignment = true,\n ...detectOverflowOptions\n } = options;\n const basePlacement = getBasePlacement(placement);\n const isBasePlacement = basePlacement === initialPlacement;\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.overflows) || [];\n\n if (checkMainAxis) {\n overflows.push(overflow[basePlacement]);\n }\n\n if (checkCrossAxis) {\n const {\n main,\n cross\n } = getAlignmentSides(placement, rects);\n overflows.push(overflow[main], overflow[cross]);\n }\n\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }]; // One or more sides is overflowing\n\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip$, _middlewareData$flip3;\n\n const nextIndex = ((_middlewareData$flip$ = (_middlewareData$flip3 = middlewareData.flip) == null ? void 0 : _middlewareData$flip3.index) != null ? _middlewareData$flip$ : 0) + 1;\n const nextPlacement = placements[nextIndex];\n\n if (nextPlacement) {\n // Try next placement and re-run the lifecycle\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n\n let resetPlacement = 'bottom';\n\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$slice$;\n\n const placement = (_overflowsData$slice$ = overflowsData.slice().sort((a, b) => a.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0) - b.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0))[0]) == null ? void 0 : _overflowsData$slice$.placement;\n\n if (placement) {\n resetPlacement = placement;\n }\n\n break;\n }\n\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n\n return {\n data: {\n skip: true\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n\n return {};\n }\n\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return basePlacements.some(side => overflow[side] >= 0);\n}\n\nconst hide = () => ({\n name: 'hide',\n\n async fn(modifierArguments) {\n const referenceOverflow = await detectOverflow(modifierArguments, {\n elementContext: 'reference'\n });\n const floatingAltOverflow = await detectOverflow(modifierArguments, {\n altBoundary: true\n });\n const referenceHiddenOffsets = getSideOffsets(referenceOverflow, modifierArguments.rects.reference);\n const escapedOffsets = getSideOffsets(floatingAltOverflow, modifierArguments.rects.floating);\n const referenceHidden = isAnySideFullyClipped(referenceHiddenOffsets);\n const escaped = isAnySideFullyClipped(escapedOffsets);\n return {\n data: {\n referenceHidden,\n referenceHiddenOffsets,\n escaped,\n escapedOffsets\n }\n };\n }\n\n});\n\nfunction convertValueToCoords(_ref) {\n let {\n placement,\n rects,\n value\n } = _ref;\n const basePlacement = getBasePlacement(placement);\n const multiplier = ['left', 'top'].includes(basePlacement) ? -1 : 1;\n const rawValue = typeof value === 'function' ? value({ ...rects,\n placement\n }) : value;\n const {\n mainAxis,\n crossAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawValue\n };\n return getMainAxisFromPlacement(basePlacement) === 'x' ? {\n x: crossAxis,\n y: mainAxis * multiplier\n } : {\n x: mainAxis * multiplier,\n y: crossAxis\n };\n}\nconst offset = function (value) {\n if (value === void 0) {\n value = 0;\n }\n\n return {\n name: 'offset',\n options: value,\n\n fn(middlewareArguments) {\n const {\n x,\n y,\n placement,\n rects\n } = middlewareArguments;\n const diffCoords = convertValueToCoords({\n placement,\n rects,\n value\n });\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: diffCoords\n };\n }\n\n };\n};\n\nfunction getCrossAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\n\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n name: 'shift',\n options,\n\n async fn(middlewareArguments) {\n const {\n x,\n y,\n placement\n } = middlewareArguments;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = options;\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n const mainAxis = getMainAxisFromPlacement(getBasePlacement(placement));\n const crossAxis = getCrossAxis(mainAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = within(min, mainAxisCoord, max);\n }\n\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = within(min, crossAxisCoord, max);\n }\n\n const limitedCoords = limiter.fn({ ...middlewareArguments,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return { ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y\n }\n };\n }\n\n };\n};\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n options,\n\n fn(middlewareArguments) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = middlewareArguments;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = options;\n const coords = {\n x,\n y\n };\n const mainAxis = getMainAxisFromPlacement(placement);\n const crossAxis = getCrossAxis(mainAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = typeof offset === 'function' ? offset({ ...rects,\n placement\n }) : offset;\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2, _middlewareData$offse3, _middlewareData$offse4;\n\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = ['top', 'left'].includes(getBasePlacement(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? (_middlewareData$offse = (_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) != null ? _middlewareData$offse : 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : (_middlewareData$offse3 = (_middlewareData$offse4 = middlewareData.offset) == null ? void 0 : _middlewareData$offse4[crossAxis]) != null ? _middlewareData$offse3 : 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n\n };\n};\n\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n name: 'size',\n options,\n\n async fn(middlewareArguments) {\n var _middlewareData$size;\n\n const {\n placement,\n rects,\n middlewareData\n } = middlewareArguments;\n const {\n apply,\n ...detectOverflowOptions\n } = options;\n\n if ((_middlewareData$size = middlewareData.size) != null && _middlewareData$size.skip) {\n return {};\n }\n\n const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n const basePlacement = getBasePlacement(placement);\n const isEnd = getAlignment(placement) === 'end';\n let heightSide;\n let widthSide;\n\n if (basePlacement === 'top' || basePlacement === 'bottom') {\n heightSide = basePlacement;\n widthSide = isEnd ? 'left' : 'right';\n } else {\n widthSide = basePlacement;\n heightSide = isEnd ? 'top' : 'bottom';\n }\n\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n const dimensions = {\n height: rects.floating.height - (['left', 'right'].includes(placement) ? 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom)) : overflow[heightSide]),\n width: rects.floating.width - (['top', 'bottom'].includes(placement) ? 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right)) : overflow[widthSide])\n };\n apply == null ? void 0 : apply({ ...dimensions,\n ...rects\n });\n return {\n data: {\n skip: true\n },\n reset: {\n rects: true\n }\n };\n }\n\n };\n};\n\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n name: 'inline',\n options,\n\n async fn(middlewareArguments) {\n var _middlewareData$inlin, _await$platform$getCl;\n\n const {\n placement,\n elements,\n rects,\n platform,\n strategy,\n middlewareData\n } = middlewareArguments; // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n\n const {\n padding = 2,\n x,\n y\n } = options;\n\n if ((_middlewareData$inlin = middlewareData.inline) != null && _middlewareData$inlin.skip) {\n return {};\n }\n\n const fallback = rectToClientRect(await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n rect: rects.reference,\n offsetParent: await platform.getOffsetParent({\n element: elements.floating\n }),\n strategy\n }));\n const clientRects = Array.from((_await$platform$getCl = await (platform.getClientRects == null ? void 0 : platform.getClientRects({\n element: elements.reference\n }))) != null ? _await$platform$getCl : []);\n const paddingObject = getSideObjectFromPadding(padding);\n\n function getBoundingClientRect() {\n // There are two rects and they are disjoined\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n var _clientRects$find;\n\n // Find the first rect in which the point is fully inside\n return (_clientRects$find = clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom)) != null ? _clientRects$find : fallback;\n } // There are 2 or more connected rects\n\n\n if (clientRects.length >= 2) {\n if (getMainAxisFromPlacement(placement) === 'x') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getBasePlacement(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n\n const isLeftPlacement = getBasePlacement(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftPlacement ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n\n return fallback;\n }\n\n return {\n data: {\n skip: true\n },\n reset: {\n rects: await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n })\n }\n };\n }\n\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, rectToClientRect, shift, size };\n","import { rectToClientRect, computePosition as computePosition$1 } from '@floating-ui/core';\nexport { arrow, autoPlacement, detectOverflow, flip, hide, inline, limitShift, offset, shift, size } from '@floating-ui/core';\n\nfunction isWindow(value) {\n return (value == null ? void 0 : value.toString()) === '[object Window]';\n}\nfunction getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (!isWindow(node)) {\n const ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}\n\nfunction getComputedStyle$1(element) {\n return getWindow(element).getComputedStyle(element);\n}\n\nfunction getNodeName(node) {\n return isWindow(node) ? '' : node ? (node.nodeName || '').toLowerCase() : '';\n}\n\nfunction isHTMLElement(value) {\n return value instanceof getWindow(value).HTMLElement;\n}\nfunction isElement(value) {\n return value instanceof getWindow(value).Element;\n}\nfunction isNode(value) {\n return value instanceof getWindow(value).Node;\n}\nfunction isShadowRoot(node) {\n const OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\nfunction isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n const {\n overflow,\n overflowX,\n overflowY\n } = getComputedStyle$1(element);\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n // TODO: Try and use feature detection here instead\n const isFirefox = navigator.userAgent.toLowerCase().includes('firefox');\n const css = getComputedStyle$1(element); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n return css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].includes(css.willChange) || isFirefox && css.willChange === 'filter' || isFirefox && (css.filter ? css.filter !== 'none' : false);\n}\n\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\n\nfunction getBoundingClientRect(element, includeScale) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n const clientRect = element.getBoundingClientRect();\n let scaleX = 1;\n let scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n return {\n width: clientRect.width / scaleX,\n height: clientRect.height / scaleY,\n top: clientRect.top / scaleY,\n right: clientRect.right / scaleX,\n bottom: clientRect.bottom / scaleY,\n left: clientRect.left / scaleX,\n x: clientRect.left / scaleX,\n y: clientRect.top / scaleY\n };\n}\n\nfunction getDocumentElement(node) {\n return ((isNode(node) ? node.ownerDocument : node.document) || window.document).documentElement;\n}\n\nfunction getNodeScroll(element) {\n if (isWindow(element)) {\n return {\n scrollLeft: element.pageXOffset,\n scrollTop: element.pageYOffset\n };\n }\n\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}\n\nfunction getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\nfunction isScaled(element) {\n const rect = getBoundingClientRect(element);\n return round(rect.width) !== element.offsetWidth || round(rect.height) !== element.offsetHeight;\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const rect = getBoundingClientRect(element, isOffsetParentAnElement && isScaled(offsetParent));\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n if (getNodeName(offsetParent) !== 'body' || isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent, true);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // @ts-ignore\n node.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n node.parentNode || ( // DOM Element detected\n isShadowRoot(node) ? node.host : null) || // ShadowRoot detected\n getDocumentElement(node) // fallback\n\n );\n}\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n}\n\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n\n while (isHTMLElement(currentNode) && !['html', 'body'].includes(getNodeName(currentNode))) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nfunction getOffsetParent(element) {\n const window = getWindow(element);\n let offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}\n\nfunction getDimensions(element) {\n return {\n width: element.offsetWidth,\n height: element.offsetHeight\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n\n if (offsetParent === documentElement) {\n return rect;\n }\n\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n if (getNodeName(offsetParent) !== 'body' || isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent, true);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } // This doesn't appear to be need to be negated.\n // else if (documentElement) {\n // offsets.x = getWindowScrollBarX(documentElement);\n // }\n\n }\n\n return { ...rect,\n x: rect.x - scroll.scrollLeft + offsets.x,\n y: rect.y - scroll.scrollTop + offsets.y\n };\n}\n\nfunction getViewportRect(element) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n // errors due to floating point numbers, so we need to check precision.\n // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n\n if (Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) < 0.01) {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// of the `` and `` rect bounds if horizontally scrollable\n\nfunction getDocumentRect(element) {\n var _element$ownerDocumen;\n\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n const width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n const height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n\n if (getComputedStyle$1(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width,\n height,\n x,\n y\n };\n}\n\nfunction getScrollParent(node) {\n if (['html', 'body', '#document'].includes(getNodeName(node))) {\n // @ts-ignore assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}\n\nfunction getScrollParents(node, list) {\n var _node$ownerDocument;\n\n if (list === void 0) {\n list = [];\n }\n\n const scrollParent = getScrollParent(node);\n const isBody = scrollParent === ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.body);\n const win = getWindow(scrollParent);\n const target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n const updatedList = list.concat(target);\n return isBody ? updatedList : // @ts-ignore: isBody tells us target will be an HTMLElement here\n updatedList.concat(getScrollParents(getParentNode(target)));\n}\n\nfunction contains(parent, child) {\n const rootNode = child.getRootNode == null ? void 0 : child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n let next = child;\n\n do {\n // use `===` replace node.isSameNode()\n if (next && parent === next) {\n return true;\n } // @ts-ignore: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n }\n\n return false;\n}\n\nfunction getInnerBoundingClientRect(element) {\n const clientRect = getBoundingClientRect(element);\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n return {\n top,\n left,\n x: left,\n y: top,\n right: left + element.clientWidth,\n bottom: top + element.clientHeight,\n width: element.clientWidth,\n height: element.clientHeight\n };\n}\n\nfunction getClientRectFromClippingParent(element, clippingParent) {\n if (clippingParent === 'viewport') {\n return rectToClientRect(getViewportRect(element));\n }\n\n if (isElement(clippingParent)) {\n return getInnerBoundingClientRect(clippingParent);\n }\n\n return rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n const clippingParents = getScrollParents(getParentNode(element));\n const canEscapeClipping = ['absolute', 'fixed'].includes(getComputedStyle$1(element).position);\n const clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // @ts-ignore isElement check ensures we return Array\n\n\n return clippingParents.filter(clippingParent => isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body');\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nfunction getClippingClientRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary\n } = _ref;\n const mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n const clippingParents = [...mainClippingParents, rootBoundary];\n const firstClippingParent = clippingParents[0];\n const clippingRect = clippingParents.reduce((accRect, clippingParent) => {\n const rect = getClientRectFromClippingParent(element, clippingParent);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingParent(element, firstClippingParent));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}\n\nconst platform = {\n getElementRects: _ref => {\n let {\n reference,\n floating,\n strategy\n } = _ref;\n return {\n reference: getRectRelativeToOffsetParent(reference, getOffsetParent(floating), strategy),\n floating: { ...getDimensions(floating),\n x: 0,\n y: 0\n }\n };\n },\n convertOffsetParentRelativeRectToViewportRelativeRect: args => convertOffsetParentRelativeRectToViewportRelativeRect(args),\n getOffsetParent: _ref2 => {\n let {\n element\n } = _ref2;\n return getOffsetParent(element);\n },\n isElement: value => isElement(value),\n getDocumentElement: _ref3 => {\n let {\n element\n } = _ref3;\n return getDocumentElement(element);\n },\n getClippingClientRect: args => getClippingClientRect(args),\n getDimensions: _ref4 => {\n let {\n element\n } = _ref4;\n return getDimensions(element);\n },\n getClientRects: _ref5 => {\n let {\n element\n } = _ref5;\n return element.getClientRects();\n }\n};\n\nconst computePosition = (reference, floating, options) => computePosition$1(reference, floating, {\n platform,\n ...options\n});\n\nexport { computePosition, getScrollParents };\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nimport { offset, autoPlacement, shift, flip, arrow, size, computePosition, getScrollParents } from \"@floating-ui/dom\";\nimport Vue from \"vue\";\nfunction assign(to, from) {\n for (const key in from) {\n if (Object.prototype.hasOwnProperty.call(from, key)) {\n if (typeof from[key] === \"object\" && to[key]) {\n assign(to[key], from[key]);\n } else {\n to[key] = from[key];\n }\n }\n }\n}\nconst config = {\n disabled: false,\n distance: 5,\n skidding: 0,\n container: \"body\",\n boundary: void 0,\n instantMove: false,\n disposeTimeout: 5e3,\n popperTriggers: [],\n strategy: \"absolute\",\n preventOverflow: true,\n flip: true,\n shift: true,\n overflowPadding: 0,\n arrowPadding: 0,\n arrowOverflow: true,\n themes: {\n tooltip: {\n placement: \"top\",\n triggers: [\"hover\", \"focus\", \"touch\"],\n hideTriggers: (events) => [...events, \"click\"],\n delay: {\n show: 200,\n hide: 0\n },\n handleResize: false,\n html: false,\n loadingContent: \"...\"\n },\n dropdown: {\n placement: \"bottom\",\n triggers: [\"click\"],\n delay: 0,\n handleResize: true,\n autoHide: true\n },\n menu: {\n $extend: \"dropdown\",\n triggers: [\"hover\", \"focus\"],\n popperTriggers: [\"hover\", \"focus\"],\n delay: {\n show: 0,\n hide: 400\n }\n }\n }\n};\nfunction getDefaultConfig(theme, key) {\n let themeConfig = config.themes[theme] || {};\n let value;\n do {\n value = themeConfig[key];\n if (typeof value === \"undefined\") {\n if (themeConfig.$extend) {\n themeConfig = config.themes[themeConfig.$extend] || {};\n } else {\n themeConfig = null;\n value = config[key];\n }\n } else {\n themeConfig = null;\n }\n } while (themeConfig);\n return value;\n}\nfunction getThemeClasses(theme) {\n const result = [theme];\n let themeConfig = config.themes[theme] || {};\n do {\n if (themeConfig.$extend && !themeConfig.$resetCss) {\n result.push(themeConfig.$extend);\n themeConfig = config.themes[themeConfig.$extend] || {};\n } else {\n themeConfig = null;\n }\n } while (themeConfig);\n return result.map((c) => `v-popper--theme-${c}`);\n}\nfunction getAllParentThemes(theme) {\n const result = [theme];\n let themeConfig = config.themes[theme] || {};\n do {\n if (themeConfig.$extend) {\n result.push(themeConfig.$extend);\n themeConfig = config.themes[themeConfig.$extend] || {};\n } else {\n themeConfig = null;\n }\n } while (themeConfig);\n return result;\n}\nvar vueResize = \"\";\nlet supportsPassive = false;\nif (typeof window !== \"undefined\") {\n supportsPassive = false;\n try {\n const opts = Object.defineProperty({}, \"passive\", {\n get() {\n supportsPassive = true;\n }\n });\n window.addEventListener(\"test\", null, opts);\n } catch (e) {\n }\n}\nlet isIOS = false;\nif (typeof window !== \"undefined\" && typeof navigator !== \"undefined\") {\n isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n}\nconst placements = [\"auto\", \"top\", \"bottom\", \"left\", \"right\"].reduce((acc, base) => acc.concat([\n base,\n `${base}-start`,\n `${base}-end`\n]), []);\nconst SHOW_EVENT_MAP = {\n hover: \"mouseenter\",\n focus: \"focus\",\n click: \"click\",\n touch: \"touchstart\"\n};\nconst HIDE_EVENT_MAP = {\n hover: \"mouseleave\",\n focus: \"blur\",\n click: \"click\",\n touch: \"touchend\"\n};\nfunction removeFromArray(array, item) {\n const index = array.indexOf(item);\n if (index !== -1) {\n array.splice(index, 1);\n }\n}\nfunction nextFrame() {\n return new Promise((resolve) => requestAnimationFrame(() => {\n requestAnimationFrame(resolve);\n }));\n}\nconst shownPoppers = [];\nlet hidingPopper = null;\nconst shownPoppersByTheme = {};\nfunction getShownPoppersByTheme(theme) {\n let list = shownPoppersByTheme[theme];\n if (!list) {\n list = shownPoppersByTheme[theme] = [];\n }\n return list;\n}\nlet Element = function() {\n};\nif (typeof window !== \"undefined\") {\n Element = window.Element;\n}\nfunction defaultPropFactory(prop) {\n return function() {\n const props = this.$props;\n return getDefaultConfig(props.theme, prop);\n };\n}\nconst PROVIDE_KEY = \"__floating-vue__popper\";\nvar PrivatePopper = () => ({\n name: \"VPopper\",\n props: {\n theme: {\n type: String,\n required: true\n },\n targetNodes: {\n type: Function,\n required: true\n },\n referenceNode: {\n type: Function,\n required: true\n },\n popperNode: {\n type: Function,\n required: true\n },\n shown: {\n type: Boolean,\n default: false\n },\n showGroup: {\n type: String,\n default: null\n },\n ariaId: {\n default: null\n },\n disabled: {\n type: Boolean,\n default: defaultPropFactory(\"disabled\")\n },\n positioningDisabled: {\n type: Boolean,\n default: defaultPropFactory(\"positioningDisabled\")\n },\n placement: {\n type: String,\n default: defaultPropFactory(\"placement\"),\n validator: (value) => placements.includes(value)\n },\n delay: {\n type: [String, Number, Object],\n default: defaultPropFactory(\"delay\")\n },\n distance: {\n type: [Number, String],\n default: defaultPropFactory(\"distance\")\n },\n skidding: {\n type: [Number, String],\n default: defaultPropFactory(\"skidding\")\n },\n triggers: {\n type: Array,\n default: defaultPropFactory(\"triggers\")\n },\n showTriggers: {\n type: [Array, Function],\n default: defaultPropFactory(\"showTriggers\")\n },\n hideTriggers: {\n type: [Array, Function],\n default: defaultPropFactory(\"hideTriggers\")\n },\n popperTriggers: {\n type: Array,\n default: defaultPropFactory(\"popperTriggers\")\n },\n popperShowTriggers: {\n type: [Array, Function],\n default: defaultPropFactory(\"popperShowTriggers\")\n },\n popperHideTriggers: {\n type: [Array, Function],\n default: defaultPropFactory(\"popperHideTriggers\")\n },\n container: {\n type: [String, Object, Element, Boolean],\n default: defaultPropFactory(\"container\")\n },\n boundary: {\n type: [String, Element],\n default: defaultPropFactory(\"boundary\")\n },\n strategy: {\n type: String,\n validator: (value) => [\"absolute\", \"fixed\"].includes(value),\n default: defaultPropFactory(\"strategy\")\n },\n autoHide: {\n type: [Boolean, Function],\n default: defaultPropFactory(\"autoHide\")\n },\n handleResize: {\n type: Boolean,\n default: defaultPropFactory(\"handleResize\")\n },\n instantMove: {\n type: Boolean,\n default: defaultPropFactory(\"instantMove\")\n },\n eagerMount: {\n type: Boolean,\n default: defaultPropFactory(\"eagerMount\")\n },\n popperClass: {\n type: [String, Array, Object],\n default: defaultPropFactory(\"popperClass\")\n },\n computeTransformOrigin: {\n type: Boolean,\n default: defaultPropFactory(\"computeTransformOrigin\")\n },\n autoMinSize: {\n type: Boolean,\n default: defaultPropFactory(\"autoMinSize\")\n },\n autoSize: {\n type: [Boolean, String],\n default: defaultPropFactory(\"autoSize\")\n },\n autoMaxSize: {\n type: Boolean,\n default: defaultPropFactory(\"autoMaxSize\")\n },\n autoBoundaryMaxSize: {\n type: Boolean,\n default: defaultPropFactory(\"autoBoundaryMaxSize\")\n },\n preventOverflow: {\n type: Boolean,\n default: defaultPropFactory(\"preventOverflow\")\n },\n overflowPadding: {\n type: [Number, String],\n default: defaultPropFactory(\"overflowPadding\")\n },\n arrowPadding: {\n type: [Number, String],\n default: defaultPropFactory(\"arrowPadding\")\n },\n arrowOverflow: {\n type: Boolean,\n default: defaultPropFactory(\"arrowOverflow\")\n },\n flip: {\n type: Boolean,\n default: defaultPropFactory(\"flip\")\n },\n shift: {\n type: Boolean,\n default: defaultPropFactory(\"shift\")\n },\n shiftCrossAxis: {\n type: Boolean,\n default: defaultPropFactory(\"shiftCrossAxis\")\n },\n noAutoFocus: {\n type: Boolean,\n default: defaultPropFactory(\"noAutoFocus\")\n }\n },\n provide() {\n return {\n [PROVIDE_KEY]: {\n parentPopper: this\n }\n };\n },\n inject: {\n [PROVIDE_KEY]: { default: null }\n },\n data() {\n return {\n isShown: false,\n isMounted: false,\n skipTransition: false,\n classes: {\n showFrom: false,\n showTo: false,\n hideFrom: false,\n hideTo: true\n },\n result: {\n x: 0,\n y: 0,\n placement: \"\",\n strategy: this.strategy,\n arrow: {\n x: 0,\n y: 0,\n centerOffset: 0\n },\n transformOrigin: null\n },\n shownChildren: /* @__PURE__ */ new Set(),\n lastAutoHide: true\n };\n },\n computed: {\n popperId() {\n return this.ariaId != null ? this.ariaId : this.randomId;\n },\n shouldMountContent() {\n return this.eagerMount || this.isMounted;\n },\n slotData() {\n return {\n popperId: this.popperId,\n isShown: this.isShown,\n shouldMountContent: this.shouldMountContent,\n skipTransition: this.skipTransition,\n autoHide: typeof this.autoHide === \"function\" ? this.lastAutoHide : this.autoHide,\n show: this.show,\n hide: this.hide,\n handleResize: this.handleResize,\n onResize: this.onResize,\n classes: __spreadProps(__spreadValues({}, this.classes), {\n popperClass: this.popperClass\n }),\n result: this.positioningDisabled ? null : this.result\n };\n },\n parentPopper() {\n var _a;\n return (_a = this[PROVIDE_KEY]) == null ? void 0 : _a.parentPopper;\n },\n hasPopperShowTriggerHover() {\n var _a, _b;\n return ((_a = this.popperTriggers) == null ? void 0 : _a.includes(\"hover\")) || ((_b = this.popperShowTriggers) == null ? void 0 : _b.includes(\"hover\"));\n }\n },\n watch: __spreadValues(__spreadValues({\n shown: \"$_autoShowHide\",\n disabled(value) {\n if (value) {\n this.dispose();\n } else {\n this.init();\n }\n },\n async container() {\n if (this.isShown) {\n this.$_ensureTeleport();\n await this.$_computePosition();\n }\n }\n }, [\n \"triggers\",\n \"positioningDisabled\"\n ].reduce((acc, prop) => {\n acc[prop] = \"$_refreshListeners\";\n return acc;\n }, {})), [\n \"placement\",\n \"distance\",\n \"skidding\",\n \"boundary\",\n \"strategy\",\n \"overflowPadding\",\n \"arrowPadding\",\n \"preventOverflow\",\n \"shift\",\n \"shiftCrossAxis\",\n \"flip\"\n ].reduce((acc, prop) => {\n acc[prop] = \"$_computePosition\";\n return acc;\n }, {})),\n created() {\n this.$_isDisposed = true;\n this.randomId = `popper_${[Math.random(), Date.now()].map((n) => n.toString(36).substring(2, 10)).join(\"_\")}`;\n if (this.autoMinSize) {\n console.warn('[floating-vue] `autoMinSize` option is deprecated. Use `autoSize=\"min\"` instead.');\n }\n if (this.autoMaxSize) {\n console.warn(\"[floating-vue] `autoMaxSize` option is deprecated. Use `autoBoundaryMaxSize` instead.\");\n }\n },\n mounted() {\n this.init();\n this.$_detachPopperNode();\n },\n activated() {\n this.$_autoShowHide();\n },\n deactivated() {\n this.hide();\n },\n beforeDestroy() {\n this.dispose();\n },\n methods: {\n show({ event = null, skipDelay = false, force = false } = {}) {\n var _a, _b;\n if (((_a = this.parentPopper) == null ? void 0 : _a.lockedChild) && this.parentPopper.lockedChild !== this)\n return;\n this.$_pendingHide = false;\n if (force || !this.disabled) {\n if (((_b = this.parentPopper) == null ? void 0 : _b.lockedChild) === this) {\n this.parentPopper.lockedChild = null;\n }\n this.$_scheduleShow(event, skipDelay);\n this.$emit(\"show\");\n this.$_showFrameLocked = true;\n requestAnimationFrame(() => {\n this.$_showFrameLocked = false;\n });\n }\n this.$emit(\"update:shown\", true);\n },\n hide({ event = null, skipDelay = false, skipAiming = false } = {}) {\n var _a;\n if (this.$_hideInProgress)\n return;\n if (this.shownChildren.size > 0) {\n this.$_pendingHide = true;\n return;\n }\n if (!skipAiming && this.hasPopperShowTriggerHover && this.$_isAimingPopper()) {\n if (this.parentPopper) {\n this.parentPopper.lockedChild = this;\n clearTimeout(this.parentPopper.lockedChildTimer);\n this.parentPopper.lockedChildTimer = setTimeout(() => {\n if (this.parentPopper.lockedChild === this) {\n this.parentPopper.lockedChild.hide({ skipDelay });\n this.parentPopper.lockedChild = null;\n }\n }, 1e3);\n }\n return;\n }\n if (((_a = this.parentPopper) == null ? void 0 : _a.lockedChild) === this) {\n this.parentPopper.lockedChild = null;\n }\n this.$_pendingHide = false;\n this.$_scheduleHide(event, skipDelay);\n this.$emit(\"hide\");\n this.$emit(\"update:shown\", false);\n },\n init() {\n if (!this.$_isDisposed)\n return;\n this.$_isDisposed = false;\n this.isMounted = false;\n this.$_events = [];\n this.$_preventShow = false;\n this.$_referenceNode = this.referenceNode();\n this.$_targetNodes = this.targetNodes().filter((e) => e.nodeType === e.ELEMENT_NODE);\n this.$_popperNode = this.popperNode();\n this.$_innerNode = this.$_popperNode.querySelector(\".v-popper__inner\");\n this.$_arrowNode = this.$_popperNode.querySelector(\".v-popper__arrow-container\");\n this.$_swapTargetAttrs(\"title\", \"data-original-title\");\n this.$_detachPopperNode();\n if (this.triggers.length) {\n this.$_addEventListeners();\n }\n if (this.shown) {\n this.show();\n }\n },\n dispose() {\n if (this.$_isDisposed)\n return;\n this.$_isDisposed = true;\n this.$_removeEventListeners();\n this.hide({ skipDelay: true });\n this.$_detachPopperNode();\n this.isMounted = false;\n this.isShown = false;\n this.$_updateParentShownChildren(false);\n this.$_swapTargetAttrs(\"data-original-title\", \"title\");\n this.$emit(\"dispose\");\n },\n async onResize() {\n if (this.isShown) {\n await this.$_computePosition();\n this.$emit(\"resize\");\n }\n },\n async $_computePosition() {\n var _a;\n if (this.$_isDisposed || this.positioningDisabled)\n return;\n const options2 = {\n strategy: this.strategy,\n middleware: []\n };\n if (this.distance || this.skidding) {\n options2.middleware.push(offset({\n mainAxis: this.distance,\n crossAxis: this.skidding\n }));\n }\n const isPlacementAuto = this.placement.startsWith(\"auto\");\n if (isPlacementAuto) {\n options2.middleware.push(autoPlacement({\n alignment: (_a = this.placement.split(\"-\")[1]) != null ? _a : \"\"\n }));\n } else {\n options2.placement = this.placement;\n }\n if (this.preventOverflow) {\n if (this.shift) {\n options2.middleware.push(shift({\n padding: this.overflowPadding,\n boundary: this.boundary,\n crossAxis: this.shiftCrossAxis\n }));\n }\n if (!isPlacementAuto && this.flip) {\n options2.middleware.push(flip({\n padding: this.overflowPadding,\n boundary: this.boundary\n }));\n }\n }\n options2.middleware.push(arrow({\n element: this.$_arrowNode,\n padding: this.arrowPadding\n }));\n if (this.arrowOverflow) {\n options2.middleware.push({\n name: \"arrowOverflow\",\n fn: ({ placement, rects, middlewareData }) => {\n let overflow;\n const { centerOffset } = middlewareData.arrow;\n if (placement.startsWith(\"top\") || placement.startsWith(\"bottom\")) {\n overflow = Math.abs(centerOffset) > rects.reference.width / 2;\n } else {\n overflow = Math.abs(centerOffset) > rects.reference.height / 2;\n }\n return {\n data: {\n overflow\n }\n };\n }\n });\n }\n if (this.autoMinSize || this.autoSize) {\n const autoSize = this.autoSize ? this.autoSize : this.autoMinSize ? \"min\" : null;\n options2.middleware.push({\n name: \"autoSize\",\n fn: ({ rects, placement, middlewareData }) => {\n var _a2;\n if ((_a2 = middlewareData.autoSize) == null ? void 0 : _a2.skip) {\n return {};\n }\n let width;\n let height;\n if (placement.startsWith(\"top\") || placement.startsWith(\"bottom\")) {\n width = rects.reference.width;\n } else {\n height = rects.reference.height;\n }\n this.$_innerNode.style[autoSize === \"min\" ? \"minWidth\" : autoSize === \"max\" ? \"maxWidth\" : \"width\"] = width != null ? `${width}px` : null;\n this.$_innerNode.style[autoSize === \"min\" ? \"minHeight\" : autoSize === \"max\" ? \"maxHeight\" : \"height\"] = height != null ? `${height}px` : null;\n return {\n data: {\n skip: true\n },\n reset: {\n rects: true\n }\n };\n }\n });\n }\n if (this.autoMaxSize || this.autoBoundaryMaxSize) {\n this.$_innerNode.style.maxWidth = null;\n this.$_innerNode.style.maxHeight = null;\n options2.middleware.push(size({\n boundary: this.boundary,\n padding: this.overflowPadding,\n apply: ({ width, height }) => {\n this.$_innerNode.style.maxWidth = width != null ? `${width}px` : null;\n this.$_innerNode.style.maxHeight = height != null ? `${height}px` : null;\n }\n }));\n }\n const data = await computePosition(this.$_referenceNode, this.$_popperNode, options2);\n Object.assign(this.result, {\n x: data.x,\n y: data.y,\n placement: data.placement,\n strategy: data.strategy,\n arrow: __spreadValues(__spreadValues({}, data.middlewareData.arrow), data.middlewareData.arrowOverflow)\n });\n },\n $_scheduleShow(event = null, skipDelay = false) {\n this.$_updateParentShownChildren(true);\n this.$_hideInProgress = false;\n clearTimeout(this.$_scheduleTimer);\n if (hidingPopper && this.instantMove && hidingPopper.instantMove && hidingPopper !== this.parentPopper) {\n hidingPopper.$_applyHide(true);\n this.$_applyShow(true);\n return;\n }\n if (skipDelay) {\n this.$_applyShow();\n } else {\n this.$_scheduleTimer = setTimeout(this.$_applyShow.bind(this), this.$_computeDelay(\"show\"));\n }\n },\n $_scheduleHide(event = null, skipDelay = false) {\n if (this.shownChildren.size > 0) {\n this.$_pendingHide = true;\n return;\n }\n this.$_updateParentShownChildren(false);\n this.$_hideInProgress = true;\n clearTimeout(this.$_scheduleTimer);\n if (this.isShown) {\n hidingPopper = this;\n }\n if (skipDelay) {\n this.$_applyHide();\n } else {\n this.$_scheduleTimer = setTimeout(this.$_applyHide.bind(this), this.$_computeDelay(\"hide\"));\n }\n },\n $_computeDelay(type) {\n const delay = this.delay;\n return parseInt(delay && delay[type] || delay || 0);\n },\n async $_applyShow(skipTransition = false) {\n clearTimeout(this.$_disposeTimer);\n clearTimeout(this.$_scheduleTimer);\n this.skipTransition = skipTransition;\n if (this.isShown) {\n return;\n }\n this.$_ensureTeleport();\n await nextFrame();\n await this.$_computePosition();\n await this.$_applyShowEffect();\n if (!this.positioningDisabled) {\n this.$_registerEventListeners([\n ...getScrollParents(this.$_referenceNode),\n ...getScrollParents(this.$_popperNode)\n ], \"scroll\", () => {\n this.$_computePosition();\n });\n }\n },\n async $_applyShowEffect() {\n if (this.$_hideInProgress)\n return;\n if (this.computeTransformOrigin) {\n const bounds = this.$_referenceNode.getBoundingClientRect();\n const popperWrapper = this.$_popperNode.querySelector(\".v-popper__wrapper\");\n const parentBounds = popperWrapper.parentNode.getBoundingClientRect();\n const x = bounds.x + bounds.width / 2 - (parentBounds.left + popperWrapper.offsetLeft);\n const y = bounds.y + bounds.height / 2 - (parentBounds.top + popperWrapper.offsetTop);\n this.result.transformOrigin = `${x}px ${y}px`;\n }\n this.isShown = true;\n this.$_applyAttrsToTarget({\n \"aria-describedby\": this.popperId,\n \"data-popper-shown\": \"\"\n });\n const showGroup = this.showGroup;\n if (showGroup) {\n let popover;\n for (let i = 0; i < shownPoppers.length; i++) {\n popover = shownPoppers[i];\n if (popover.showGroup !== showGroup) {\n popover.hide();\n popover.$emit(\"close-group\");\n }\n }\n }\n shownPoppers.push(this);\n document.body.classList.add(\"v-popper--some-open\");\n for (const theme of getAllParentThemes(this.theme)) {\n getShownPoppersByTheme(theme).push(this);\n document.body.classList.add(`v-popper--some-open--${theme}`);\n }\n this.$emit(\"apply-show\");\n this.classes.showFrom = true;\n this.classes.showTo = false;\n this.classes.hideFrom = false;\n this.classes.hideTo = false;\n await nextFrame();\n this.classes.showFrom = false;\n this.classes.showTo = true;\n if (!this.noAutoFocus)\n this.$_popperNode.focus();\n },\n async $_applyHide(skipTransition = false) {\n if (this.shownChildren.size > 0) {\n this.$_pendingHide = true;\n this.$_hideInProgress = false;\n return;\n }\n clearTimeout(this.$_scheduleTimer);\n if (!this.isShown) {\n return;\n }\n this.skipTransition = skipTransition;\n removeFromArray(shownPoppers, this);\n if (shownPoppers.length === 0) {\n document.body.classList.remove(\"v-popper--some-open\");\n }\n for (const theme of getAllParentThemes(this.theme)) {\n const list = getShownPoppersByTheme(theme);\n removeFromArray(list, this);\n if (list.length === 0) {\n document.body.classList.remove(`v-popper--some-open--${theme}`);\n }\n }\n if (hidingPopper === this) {\n hidingPopper = null;\n }\n this.isShown = false;\n this.$_applyAttrsToTarget({\n \"aria-describedby\": void 0,\n \"data-popper-shown\": void 0\n });\n clearTimeout(this.$_disposeTimer);\n const disposeTime = getDefaultConfig(this.theme, \"disposeTimeout\");\n if (disposeTime !== null) {\n this.$_disposeTimer = setTimeout(() => {\n if (this.$_popperNode) {\n this.$_detachPopperNode();\n this.isMounted = false;\n }\n }, disposeTime);\n }\n this.$_removeEventListeners(\"scroll\");\n this.$emit(\"apply-hide\");\n this.classes.showFrom = false;\n this.classes.showTo = false;\n this.classes.hideFrom = true;\n this.classes.hideTo = false;\n await nextFrame();\n this.classes.hideFrom = false;\n this.classes.hideTo = true;\n },\n $_autoShowHide() {\n if (this.shown) {\n this.show();\n } else {\n this.hide();\n }\n },\n $_ensureTeleport() {\n if (this.$_isDisposed)\n return;\n let container = this.container;\n if (typeof container === \"string\") {\n container = window.document.querySelector(container);\n } else if (container === false) {\n container = this.$_targetNodes[0].parentNode;\n }\n if (!container) {\n throw new Error(\"No container for popover: \" + this.container);\n }\n container.appendChild(this.$_popperNode);\n this.isMounted = true;\n },\n $_addEventListeners() {\n const handleShow = (event) => {\n if (this.isShown && !this.$_hideInProgress) {\n return;\n }\n event.usedByTooltip = true;\n !this.$_preventShow && this.show({ event });\n };\n this.$_registerTriggerListeners(this.$_targetNodes, SHOW_EVENT_MAP, this.triggers, this.showTriggers, handleShow);\n this.$_registerTriggerListeners([this.$_popperNode], SHOW_EVENT_MAP, this.popperTriggers, this.popperShowTriggers, handleShow);\n const handleHide = (skipAiming) => (event) => {\n if (event.usedByTooltip) {\n return;\n }\n this.hide({ event, skipAiming });\n };\n this.$_registerTriggerListeners(this.$_targetNodes, HIDE_EVENT_MAP, this.triggers, this.hideTriggers, handleHide(false));\n this.$_registerTriggerListeners([this.$_popperNode], HIDE_EVENT_MAP, this.popperTriggers, this.popperHideTriggers, handleHide(true));\n },\n $_registerEventListeners(targetNodes, eventType, handler) {\n this.$_events.push({ targetNodes, eventType, handler });\n targetNodes.forEach((node) => node.addEventListener(eventType, handler, supportsPassive ? {\n passive: true\n } : void 0));\n },\n $_registerTriggerListeners(targetNodes, eventMap, commonTriggers, customTrigger, handler) {\n let triggers = commonTriggers;\n if (customTrigger != null) {\n triggers = typeof customTrigger === \"function\" ? customTrigger(triggers) : customTrigger;\n }\n triggers.forEach((trigger) => {\n const eventType = eventMap[trigger];\n if (eventType) {\n this.$_registerEventListeners(targetNodes, eventType, handler);\n }\n });\n },\n $_removeEventListeners(filterEventType) {\n const newList = [];\n this.$_events.forEach((listener) => {\n const { targetNodes, eventType, handler } = listener;\n if (!filterEventType || filterEventType === eventType) {\n targetNodes.forEach((node) => node.removeEventListener(eventType, handler));\n } else {\n newList.push(listener);\n }\n });\n this.$_events = newList;\n },\n $_refreshListeners() {\n if (!this.$_isDisposed) {\n this.$_removeEventListeners();\n this.$_addEventListeners();\n }\n },\n $_handleGlobalClose(event, touch = false) {\n if (this.$_showFrameLocked)\n return;\n this.hide({ event });\n if (event.closePopover) {\n this.$emit(\"close-directive\");\n } else {\n this.$emit(\"auto-hide\");\n }\n if (touch) {\n this.$_preventShow = true;\n setTimeout(() => {\n this.$_preventShow = false;\n }, 300);\n }\n },\n $_detachPopperNode() {\n this.$_popperNode.parentNode && this.$_popperNode.parentNode.removeChild(this.$_popperNode);\n },\n $_swapTargetAttrs(attrFrom, attrTo) {\n for (const el of this.$_targetNodes) {\n const value = el.getAttribute(attrFrom);\n if (value) {\n el.removeAttribute(attrFrom);\n el.setAttribute(attrTo, value);\n }\n }\n },\n $_applyAttrsToTarget(attrs) {\n for (const el of this.$_targetNodes) {\n for (const n in attrs) {\n const value = attrs[n];\n if (value == null) {\n el.removeAttribute(n);\n } else {\n el.setAttribute(n, value);\n }\n }\n }\n },\n $_updateParentShownChildren(value) {\n let parent = this.parentPopper;\n while (parent) {\n if (value) {\n parent.shownChildren.add(this.randomId);\n } else {\n parent.shownChildren.delete(this.randomId);\n if (parent.$_pendingHide) {\n parent.hide();\n }\n }\n parent = parent.parentPopper;\n }\n },\n $_isAimingPopper() {\n const referenceBounds = this.$el.getBoundingClientRect();\n if (mouseX >= referenceBounds.left && mouseX <= referenceBounds.right && mouseY >= referenceBounds.top && mouseY <= referenceBounds.bottom) {\n const popperBounds = this.$_popperNode.getBoundingClientRect();\n const vectorX = mouseX - mousePreviousX;\n const vectorY = mouseY - mousePreviousY;\n const distance = popperBounds.left + popperBounds.width / 2 - mousePreviousX + (popperBounds.top + popperBounds.height / 2) - mousePreviousY;\n const newVectorLength = distance + popperBounds.width + popperBounds.height;\n const edgeX = mousePreviousX + vectorX * newVectorLength;\n const edgeY = mousePreviousY + vectorY * newVectorLength;\n return lineIntersectsLine(mousePreviousX, mousePreviousY, edgeX, edgeY, popperBounds.left, popperBounds.top, popperBounds.left, popperBounds.bottom) || lineIntersectsLine(mousePreviousX, mousePreviousY, edgeX, edgeY, popperBounds.left, popperBounds.top, popperBounds.right, popperBounds.top) || lineIntersectsLine(mousePreviousX, mousePreviousY, edgeX, edgeY, popperBounds.right, popperBounds.top, popperBounds.right, popperBounds.bottom) || lineIntersectsLine(mousePreviousX, mousePreviousY, edgeX, edgeY, popperBounds.left, popperBounds.bottom, popperBounds.right, popperBounds.bottom);\n }\n return false;\n }\n },\n render() {\n return this.$scopedSlots.default(this.slotData)[0];\n }\n});\nif (typeof document !== \"undefined\" && typeof window !== \"undefined\") {\n if (isIOS) {\n document.addEventListener(\"touchstart\", handleGlobalMousedown, supportsPassive ? {\n passive: true,\n capture: true\n } : true);\n document.addEventListener(\"touchend\", handleGlobalTouchend, supportsPassive ? {\n passive: true,\n capture: true\n } : true);\n } else {\n window.addEventListener(\"mousedown\", handleGlobalMousedown, true);\n window.addEventListener(\"click\", handleGlobalClick, true);\n }\n window.addEventListener(\"resize\", computePositionAllShownPoppers);\n}\nfunction handleGlobalMousedown(event) {\n for (let i = 0; i < shownPoppers.length; i++) {\n const popper = shownPoppers[i];\n try {\n const popperContent = popper.popperNode();\n popper.$_mouseDownContains = popperContent.contains(event.target);\n } catch (e) {\n }\n }\n}\nfunction handleGlobalClick(event) {\n handleGlobalClose(event);\n}\nfunction handleGlobalTouchend(event) {\n handleGlobalClose(event, true);\n}\nfunction handleGlobalClose(event, touch = false) {\n const preventClose = {};\n for (let i = shownPoppers.length - 1; i >= 0; i--) {\n const popper = shownPoppers[i];\n try {\n const contains = popper.$_containsGlobalTarget = isContainingEventTarget(popper, event);\n popper.$_pendingHide = false;\n requestAnimationFrame(() => {\n popper.$_pendingHide = false;\n if (preventClose[popper.randomId])\n return;\n if (shouldAutoHide(popper, contains, event)) {\n popper.$_handleGlobalClose(event, touch);\n if (!event.closeAllPopover && event.closePopover && contains) {\n let parent2 = popper.parentPopper;\n while (parent2) {\n preventClose[parent2.randomId] = true;\n parent2 = parent2.parentPopper;\n }\n return;\n }\n let parent = popper.parentPopper;\n while (parent) {\n if (shouldAutoHide(parent, parent.$_containsGlobalTarget, event)) {\n parent.$_handleGlobalClose(event, touch);\n } else {\n break;\n }\n parent = parent.parentPopper;\n }\n }\n });\n } catch (e) {\n }\n }\n}\nfunction isContainingEventTarget(popper, event) {\n const popperContent = popper.popperNode();\n return popper.$_mouseDownContains || popperContent.contains(event.target);\n}\nfunction shouldAutoHide(popper, contains, event) {\n return event.closeAllPopover || event.closePopover && contains || getAutoHideResult(popper, event) && !contains;\n}\nfunction getAutoHideResult(popper, event) {\n if (typeof popper.autoHide === \"function\") {\n const result = popper.autoHide(event);\n popper.lastAutoHide = result;\n return result;\n }\n return popper.autoHide;\n}\nfunction computePositionAllShownPoppers(event) {\n for (let i = 0; i < shownPoppers.length; i++) {\n const popper = shownPoppers[i];\n popper.$_computePosition(event);\n }\n}\nfunction hideAllPoppers() {\n for (let i = 0; i < shownPoppers.length; i++) {\n const popper = shownPoppers[i];\n popper.hide();\n }\n}\nlet mousePreviousX = 0;\nlet mousePreviousY = 0;\nlet mouseX = 0;\nlet mouseY = 0;\nif (typeof window !== \"undefined\") {\n window.addEventListener(\"mousemove\", (event) => {\n mousePreviousX = mouseX;\n mousePreviousY = mouseY;\n mouseX = event.clientX;\n mouseY = event.clientY;\n }, supportsPassive ? {\n passive: true\n } : void 0);\n}\nfunction lineIntersectsLine(x1, y1, x2, y2, x3, y3, x4, y4) {\n const uA = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1));\n const uB = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1));\n return uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1;\n}\nfunction getInternetExplorerVersion() {\n var ua = window.navigator.userAgent;\n var msie = ua.indexOf(\"MSIE \");\n if (msie > 0) {\n return parseInt(ua.substring(msie + 5, ua.indexOf(\".\", msie)), 10);\n }\n var trident = ua.indexOf(\"Trident/\");\n if (trident > 0) {\n var rv = ua.indexOf(\"rv:\");\n return parseInt(ua.substring(rv + 3, ua.indexOf(\".\", rv)), 10);\n }\n var edge = ua.indexOf(\"Edge/\");\n if (edge > 0) {\n return parseInt(ua.substring(edge + 5, ua.indexOf(\".\", edge)), 10);\n }\n return -1;\n}\nvar isIE;\nfunction initCompat() {\n if (!initCompat.init) {\n initCompat.init = true;\n isIE = getInternetExplorerVersion() !== -1;\n }\n}\nvar script = {\n name: \"ResizeObserver\",\n props: {\n emitOnMount: {\n type: Boolean,\n default: false\n },\n ignoreWidth: {\n type: Boolean,\n default: false\n },\n ignoreHeight: {\n type: Boolean,\n default: false\n }\n },\n mounted: function mounted() {\n var _this = this;\n initCompat();\n this.$nextTick(function() {\n _this._w = _this.$el.offsetWidth;\n _this._h = _this.$el.offsetHeight;\n if (_this.emitOnMount) {\n _this.emitSize();\n }\n });\n var object = document.createElement(\"object\");\n this._resizeObject = object;\n object.setAttribute(\"aria-hidden\", \"true\");\n object.setAttribute(\"tabindex\", -1);\n object.onload = this.addResizeHandlers;\n object.type = \"text/html\";\n if (isIE) {\n this.$el.appendChild(object);\n }\n object.data = \"about:blank\";\n if (!isIE) {\n this.$el.appendChild(object);\n }\n },\n beforeDestroy: function beforeDestroy() {\n this.removeResizeHandlers();\n },\n methods: {\n compareAndNotify: function compareAndNotify() {\n if (!this.ignoreWidth && this._w !== this.$el.offsetWidth || !this.ignoreHeight && this._h !== this.$el.offsetHeight) {\n this._w = this.$el.offsetWidth;\n this._h = this.$el.offsetHeight;\n this.emitSize();\n }\n },\n emitSize: function emitSize() {\n this.$emit(\"notify\", {\n width: this._w,\n height: this._h\n });\n },\n addResizeHandlers: function addResizeHandlers() {\n this._resizeObject.contentDocument.defaultView.addEventListener(\"resize\", this.compareAndNotify);\n this.compareAndNotify();\n },\n removeResizeHandlers: function removeResizeHandlers() {\n if (this._resizeObject && this._resizeObject.onload) {\n if (!isIE && this._resizeObject.contentDocument) {\n this._resizeObject.contentDocument.defaultView.removeEventListener(\"resize\", this.compareAndNotify);\n }\n this.$el.removeChild(this._resizeObject);\n this._resizeObject.onload = null;\n this._resizeObject = null;\n }\n }\n }\n};\nfunction normalizeComponent$1(template, style, script2, scopeId, isFunctionalTemplate, moduleIdentifier, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {\n if (typeof shadowMode !== \"boolean\") {\n createInjectorSSR = createInjector;\n createInjector = shadowMode;\n shadowMode = false;\n }\n var options2 = typeof script2 === \"function\" ? script2.options : script2;\n if (template && template.render) {\n options2.render = template.render;\n options2.staticRenderFns = template.staticRenderFns;\n options2._compiled = true;\n if (isFunctionalTemplate) {\n options2.functional = true;\n }\n }\n if (scopeId) {\n options2._scopeId = scopeId;\n }\n var hook;\n if (moduleIdentifier) {\n hook = function hook2(context) {\n context = context || this.$vnode && this.$vnode.ssrContext || this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext;\n if (!context && typeof __VUE_SSR_CONTEXT__ !== \"undefined\") {\n context = __VUE_SSR_CONTEXT__;\n }\n if (style) {\n style.call(this, createInjectorSSR(context));\n }\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier);\n }\n };\n options2._ssrRegister = hook;\n } else if (style) {\n hook = shadowMode ? function(context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot));\n } : function(context) {\n style.call(this, createInjector(context));\n };\n }\n if (hook) {\n if (options2.functional) {\n var originalRender = options2.render;\n options2.render = function renderWithStyleInjection(h, context) {\n hook.call(context);\n return originalRender(h, context);\n };\n } else {\n var existing = options2.beforeCreate;\n options2.beforeCreate = existing ? [].concat(existing, hook) : [hook];\n }\n }\n return script2;\n}\nvar __vue_script__ = script;\nvar __vue_render__ = function __vue_render__2() {\n var _vm = this;\n var _h = _vm.$createElement;\n var _c = _vm._self._c || _h;\n return _c(\"div\", {\n staticClass: \"resize-observer\",\n attrs: {\n tabindex: \"-1\"\n }\n });\n};\nvar __vue_staticRenderFns__ = [];\n__vue_render__._withStripped = true;\nvar __vue_inject_styles__ = void 0;\nvar __vue_scope_id__ = \"data-v-8859cc6c\";\nvar __vue_module_identifier__ = void 0;\nvar __vue_is_functional_template__ = false;\nvar __vue_component__ = /* @__PURE__ */ normalizeComponent$1({\n render: __vue_render__,\n staticRenderFns: __vue_staticRenderFns__\n}, __vue_inject_styles__, __vue_script__, __vue_scope_id__, __vue_is_functional_template__, __vue_module_identifier__, false, void 0, void 0, void 0);\nfunction install$1(Vue2) {\n Vue2.component(\"resize-observer\", __vue_component__);\n Vue2.component(\"ResizeObserver\", __vue_component__);\n}\nvar plugin$1 = {\n version: \"1.0.1\",\n install: install$1\n};\nvar GlobalVue$1 = null;\nif (typeof window !== \"undefined\") {\n GlobalVue$1 = window.Vue;\n} else if (typeof global !== \"undefined\") {\n GlobalVue$1 = global.Vue;\n}\nif (GlobalVue$1) {\n GlobalVue$1.use(plugin$1);\n}\nvar PrivateThemeClass = {\n computed: {\n themeClass() {\n return getThemeClasses(this.theme);\n }\n }\n};\nvar __vue2_script$5 = {\n name: \"VPopperContent\",\n components: {\n ResizeObserver: __vue_component__\n },\n mixins: [\n PrivateThemeClass\n ],\n props: {\n popperId: String,\n theme: String,\n shown: Boolean,\n mounted: Boolean,\n skipTransition: Boolean,\n autoHide: Boolean,\n handleResize: Boolean,\n classes: Object,\n result: Object\n },\n methods: {\n toPx(value) {\n if (value != null && !isNaN(value)) {\n return `${value}px`;\n }\n return null;\n }\n }\n};\nvar render$2 = function() {\n var _vm = this;\n var _h = _vm.$createElement;\n var _c = _vm._self._c || _h;\n return _c(\"div\", { ref: \"popover\", staticClass: \"v-popper__popper\", class: [\n _vm.themeClass,\n _vm.classes.popperClass,\n {\n \"v-popper__popper--shown\": _vm.shown,\n \"v-popper__popper--hidden\": !_vm.shown,\n \"v-popper__popper--show-from\": _vm.classes.showFrom,\n \"v-popper__popper--show-to\": _vm.classes.showTo,\n \"v-popper__popper--hide-from\": _vm.classes.hideFrom,\n \"v-popper__popper--hide-to\": _vm.classes.hideTo,\n \"v-popper__popper--skip-transition\": _vm.skipTransition,\n \"v-popper__popper--arrow-overflow\": _vm.result && _vm.result.arrow.overflow,\n \"v-popper__popper--no-positioning\": !_vm.result\n }\n ], style: _vm.result ? {\n position: _vm.result.strategy,\n transform: \"translate3d(\" + Math.round(_vm.result.x) + \"px,\" + Math.round(_vm.result.y) + \"px,0)\"\n } : void 0, attrs: { \"id\": _vm.popperId, \"aria-hidden\": _vm.shown ? \"false\" : \"true\", \"tabindex\": _vm.autoHide ? 0 : void 0, \"data-popper-placement\": _vm.result ? _vm.result.placement : void 0 }, on: { \"keyup\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"esc\", 27, $event.key, [\"Esc\", \"Escape\"])) {\n return null;\n }\n _vm.autoHide && _vm.$emit(\"hide\");\n } } }, [_c(\"div\", { staticClass: \"v-popper__backdrop\", on: { \"click\": function($event) {\n _vm.autoHide && _vm.$emit(\"hide\");\n } } }), _c(\"div\", { staticClass: \"v-popper__wrapper\", style: _vm.result ? {\n transformOrigin: _vm.result.transformOrigin\n } : void 0 }, [_c(\"div\", { ref: \"inner\", staticClass: \"v-popper__inner\" }, [_vm.mounted ? [_c(\"div\", [_vm._t(\"default\")], 2), _vm.handleResize ? _c(\"ResizeObserver\", { on: { \"notify\": function($event) {\n return _vm.$emit(\"resize\", $event);\n } } }) : _vm._e()] : _vm._e()], 2), _c(\"div\", { ref: \"arrow\", staticClass: \"v-popper__arrow-container\", style: _vm.result ? {\n left: _vm.toPx(_vm.result.arrow.x),\n top: _vm.toPx(_vm.result.arrow.y)\n } : void 0 }, [_c(\"div\", { staticClass: \"v-popper__arrow-outer\" }), _c(\"div\", { staticClass: \"v-popper__arrow-inner\" })])])]);\n};\nvar staticRenderFns$2 = [];\nvar PopperContent_vue_vue_type_style_index_0_lang = \"\";\nfunction normalizeComponent(scriptExports, render2, staticRenderFns2, functionalTemplate, injectStyles, scopeId, moduleIdentifier, shadowMode) {\n var options2 = typeof scriptExports === \"function\" ? scriptExports.options : scriptExports;\n if (render2) {\n options2.render = render2;\n options2.staticRenderFns = staticRenderFns2;\n options2._compiled = true;\n }\n if (functionalTemplate) {\n options2.functional = true;\n }\n if (scopeId) {\n options2._scopeId = \"data-v-\" + scopeId;\n }\n var hook;\n if (moduleIdentifier) {\n hook = function(context) {\n context = context || this.$vnode && this.$vnode.ssrContext || this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext;\n if (!context && typeof __VUE_SSR_CONTEXT__ !== \"undefined\") {\n context = __VUE_SSR_CONTEXT__;\n }\n if (injectStyles) {\n injectStyles.call(this, context);\n }\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier);\n }\n };\n options2._ssrRegister = hook;\n } else if (injectStyles) {\n hook = shadowMode ? function() {\n injectStyles.call(this, (options2.functional ? this.parent : this).$root.$options.shadowRoot);\n } : injectStyles;\n }\n if (hook) {\n if (options2.functional) {\n options2._injectStyles = hook;\n var originalRender = options2.render;\n options2.render = function renderWithStyleInjection(h, context) {\n hook.call(context);\n return originalRender(h, context);\n };\n } else {\n var existing = options2.beforeCreate;\n options2.beforeCreate = existing ? [].concat(existing, hook) : [hook];\n }\n }\n return {\n exports: scriptExports,\n options: options2\n };\n}\nconst __cssModules$5 = {};\nvar __component__$5 = /* @__PURE__ */ normalizeComponent(__vue2_script$5, render$2, staticRenderFns$2, false, __vue2_injectStyles$5, null, null, null);\nfunction __vue2_injectStyles$5(context) {\n for (let o in __cssModules$5) {\n this[o] = __cssModules$5[o];\n }\n}\nvar PrivatePopperContent = /* @__PURE__ */ function() {\n return __component__$5.exports;\n}();\nvar PrivatePopperMethods = {\n methods: {\n show(...args) {\n return this.$refs.popper.show(...args);\n },\n hide(...args) {\n return this.$refs.popper.hide(...args);\n },\n dispose(...args) {\n return this.$refs.popper.dispose(...args);\n },\n onResize(...args) {\n return this.$refs.popper.onResize(...args);\n }\n }\n};\nvar __vue2_script$4 = {\n name: \"VPopperWrapper\",\n components: {\n Popper: PrivatePopper(),\n PopperContent: PrivatePopperContent\n },\n mixins: [\n PrivatePopperMethods,\n PrivateThemeClass\n ],\n inheritAttrs: false,\n props: {\n theme: {\n type: String,\n default() {\n return this.$options.vPopperTheme;\n }\n }\n },\n methods: {\n getTargetNodes() {\n return Array.from(this.$refs.reference.children).filter((node) => node !== this.$refs.popperContent.$el);\n }\n }\n};\nvar render$1 = function() {\n var _vm = this;\n var _h = _vm.$createElement;\n var _c = _vm._self._c || _h;\n return _c(\"Popper\", _vm._g(_vm._b({ ref: \"popper\", attrs: { \"theme\": _vm.theme, \"target-nodes\": _vm.getTargetNodes, \"reference-node\": function() {\n return _vm.$refs.reference;\n }, \"popper-node\": function() {\n return _vm.$refs.popperContent.$el;\n } }, scopedSlots: _vm._u([{ key: \"default\", fn: function(ref) {\n var popperId = ref.popperId;\n var isShown = ref.isShown;\n var shouldMountContent = ref.shouldMountContent;\n var skipTransition = ref.skipTransition;\n var autoHide = ref.autoHide;\n var show = ref.show;\n var hide = ref.hide;\n var handleResize = ref.handleResize;\n var onResize = ref.onResize;\n var classes = ref.classes;\n var result = ref.result;\n return [_c(\"div\", { ref: \"reference\", staticClass: \"v-popper\", class: [\n _vm.themeClass,\n {\n \"v-popper--shown\": isShown\n }\n ] }, [_vm._t(\"default\", null, { \"shown\": isShown, \"show\": show, \"hide\": hide }), _c(\"PopperContent\", { ref: \"popperContent\", attrs: { \"popper-id\": popperId, \"theme\": _vm.theme, \"shown\": isShown, \"mounted\": shouldMountContent, \"skip-transition\": skipTransition, \"auto-hide\": autoHide, \"handle-resize\": handleResize, \"classes\": classes, \"result\": result }, on: { \"hide\": hide, \"resize\": onResize } }, [_vm._t(\"popper\", null, { \"shown\": isShown, \"hide\": hide })], 2)], 2)];\n } }], null, true) }, \"Popper\", _vm.$attrs, false), _vm.$listeners));\n};\nvar staticRenderFns$1 = [];\nconst __cssModules$4 = {};\nvar __component__$4 = /* @__PURE__ */ normalizeComponent(__vue2_script$4, render$1, staticRenderFns$1, false, __vue2_injectStyles$4, null, null, null);\nfunction __vue2_injectStyles$4(context) {\n for (let o in __cssModules$4) {\n this[o] = __cssModules$4[o];\n }\n}\nvar PrivatePopperWrapper = /* @__PURE__ */ function() {\n return __component__$4.exports;\n}();\nvar __vue2_script$3 = __spreadProps(__spreadValues({}, PrivatePopperWrapper), {\n name: \"VDropdown\",\n vPopperTheme: \"dropdown\"\n});\nvar Dropdown_vue_vue_type_style_index_0_lang = \"\";\nlet __vue2_render$2, __vue2_staticRenderFns$2;\nconst __cssModules$3 = {};\nvar __component__$3 = /* @__PURE__ */ normalizeComponent(__vue2_script$3, __vue2_render$2, __vue2_staticRenderFns$2, false, __vue2_injectStyles$3, null, null, null);\nfunction __vue2_injectStyles$3(context) {\n for (let o in __cssModules$3) {\n this[o] = __cssModules$3[o];\n }\n}\nvar PrivateDropdown = /* @__PURE__ */ function() {\n return __component__$3.exports;\n}();\nvar __vue2_script$2 = __spreadProps(__spreadValues({}, PrivatePopperWrapper), {\n name: \"VMenu\",\n vPopperTheme: \"menu\"\n});\nlet __vue2_render$1, __vue2_staticRenderFns$1;\nconst __cssModules$2 = {};\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(__vue2_script$2, __vue2_render$1, __vue2_staticRenderFns$1, false, __vue2_injectStyles$2, null, null, null);\nfunction __vue2_injectStyles$2(context) {\n for (let o in __cssModules$2) {\n this[o] = __cssModules$2[o];\n }\n}\nvar PrivateMenu = /* @__PURE__ */ function() {\n return __component__$2.exports;\n}();\nvar __vue2_script$1 = __spreadProps(__spreadValues({}, PrivatePopperWrapper), {\n name: \"VTooltip\",\n vPopperTheme: \"tooltip\"\n});\nvar Tooltip_vue_vue_type_style_index_0_lang = \"\";\nlet __vue2_render, __vue2_staticRenderFns;\nconst __cssModules$1 = {};\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(__vue2_script$1, __vue2_render, __vue2_staticRenderFns, false, __vue2_injectStyles$1, null, null, null);\nfunction __vue2_injectStyles$1(context) {\n for (let o in __cssModules$1) {\n this[o] = __cssModules$1[o];\n }\n}\nvar PrivateTooltip = /* @__PURE__ */ function() {\n return __component__$1.exports;\n}();\nvar __vue2_script = {\n name: \"VTooltipDirective\",\n components: {\n Popper: PrivatePopper(),\n PopperContent: PrivatePopperContent\n },\n mixins: [\n PrivatePopperMethods\n ],\n inheritAttrs: false,\n props: {\n theme: {\n type: String,\n default: \"tooltip\"\n },\n html: {\n type: Boolean,\n default() {\n return getDefaultConfig(this.theme, \"html\");\n }\n },\n content: {\n type: [String, Number, Function],\n default: null\n },\n loadingContent: {\n type: String,\n default() {\n return getDefaultConfig(this.theme, \"loadingContent\");\n }\n }\n },\n data() {\n return {\n asyncContent: null\n };\n },\n computed: {\n isContentAsync() {\n return typeof this.content === \"function\";\n },\n loading() {\n return this.isContentAsync && this.asyncContent == null;\n },\n finalContent() {\n if (this.isContentAsync) {\n return this.loading ? this.loadingContent : this.asyncContent;\n }\n return this.content;\n }\n },\n watch: {\n content: {\n handler() {\n this.fetchContent(true);\n },\n immediate: true\n },\n async finalContent(value) {\n await this.$nextTick();\n this.$refs.popper.onResize();\n }\n },\n created() {\n this.$_fetchId = 0;\n },\n methods: {\n fetchContent(force) {\n if (typeof this.content === \"function\" && this.$_isShown && (force || !this.$_loading && this.asyncContent == null)) {\n this.asyncContent = null;\n this.$_loading = true;\n const fetchId = ++this.$_fetchId;\n const result = this.content(this);\n if (result.then) {\n result.then((res) => this.onResult(fetchId, res));\n } else {\n this.onResult(fetchId, result);\n }\n }\n },\n onResult(fetchId, result) {\n if (fetchId !== this.$_fetchId)\n return;\n this.$_loading = false;\n this.asyncContent = result;\n },\n onShow() {\n this.$_isShown = true;\n this.fetchContent();\n },\n onHide() {\n this.$_isShown = false;\n }\n }\n};\nvar render = function() {\n var _vm = this;\n var _h = _vm.$createElement;\n var _c = _vm._self._c || _h;\n return _c(\"Popper\", _vm._g(_vm._b({ ref: \"popper\", attrs: { \"theme\": _vm.theme, \"popper-node\": function() {\n return _vm.$refs.popperContent.$el;\n } }, on: { \"apply-show\": _vm.onShow, \"apply-hide\": _vm.onHide }, scopedSlots: _vm._u([{ key: \"default\", fn: function(ref) {\n var popperId = ref.popperId;\n var isShown = ref.isShown;\n var shouldMountContent = ref.shouldMountContent;\n var skipTransition = ref.skipTransition;\n var autoHide = ref.autoHide;\n var hide = ref.hide;\n var handleResize = ref.handleResize;\n var onResize = ref.onResize;\n var classes = ref.classes;\n var result = ref.result;\n return [_c(\"PopperContent\", { ref: \"popperContent\", class: {\n \"v-popper--tooltip-loading\": _vm.loading\n }, attrs: { \"popper-id\": popperId, \"theme\": _vm.theme, \"shown\": isShown, \"mounted\": shouldMountContent, \"skip-transition\": skipTransition, \"auto-hide\": autoHide, \"handle-resize\": handleResize, \"classes\": classes, \"result\": result }, on: { \"hide\": hide, \"resize\": onResize } }, [_vm.html ? _c(\"div\", { domProps: { \"innerHTML\": _vm._s(_vm.finalContent) } }) : _c(\"div\", { domProps: { \"textContent\": _vm._s(_vm.finalContent) } })])];\n } }]) }, \"Popper\", _vm.$attrs, false), _vm.$listeners));\n};\nvar staticRenderFns = [];\nconst __cssModules = {};\nvar __component__ = /* @__PURE__ */ normalizeComponent(__vue2_script, render, staticRenderFns, false, __vue2_injectStyles, null, null, null);\nfunction __vue2_injectStyles(context) {\n for (let o in __cssModules) {\n this[o] = __cssModules[o];\n }\n}\nvar PrivateTooltipDirective = /* @__PURE__ */ function() {\n return __component__.exports;\n}();\nconst TARGET_CLASS = \"v-popper--has-tooltip\";\nfunction getPlacement(options2, modifiers) {\n let result = options2.placement;\n if (!result && modifiers) {\n for (const pos of placements) {\n if (modifiers[pos]) {\n result = pos;\n }\n }\n }\n if (!result) {\n result = getDefaultConfig(options2.theme || \"tooltip\", \"placement\");\n }\n return result;\n}\nfunction getOptions(el, value, modifiers) {\n let options2;\n const type = typeof value;\n if (type === \"string\") {\n options2 = { content: value };\n } else if (value && type === \"object\") {\n options2 = value;\n } else {\n options2 = { content: false };\n }\n options2.placement = getPlacement(options2, modifiers);\n options2.targetNodes = () => [el];\n options2.referenceNode = () => el;\n return options2;\n}\nfunction createTooltip(el, value, modifiers) {\n const options2 = getOptions(el, value, modifiers);\n const tooltipApp = el.$_popper = new Vue({\n mixins: [\n PrivatePopperMethods\n ],\n data() {\n return {\n options: options2\n };\n },\n render(h) {\n const _a = this.options, {\n theme,\n html,\n content,\n loadingContent\n } = _a, otherOptions = __objRest(_a, [\n \"theme\",\n \"html\",\n \"content\",\n \"loadingContent\"\n ]);\n return h(PrivateTooltipDirective, {\n props: {\n theme,\n html,\n content,\n loadingContent\n },\n attrs: otherOptions,\n ref: \"popper\"\n });\n },\n devtools: {\n hide: true\n }\n });\n const mountTarget = document.createElement(\"div\");\n document.body.appendChild(mountTarget);\n tooltipApp.$mount(mountTarget);\n if (el.classList) {\n el.classList.add(TARGET_CLASS);\n }\n return tooltipApp;\n}\nfunction destroyTooltip(el) {\n if (el.$_popper) {\n el.$_popper.$destroy();\n delete el.$_popper;\n delete el.$_popperOldShown;\n }\n if (el.classList) {\n el.classList.remove(TARGET_CLASS);\n }\n}\nfunction bind(el, { value, oldValue, modifiers }) {\n const options2 = getOptions(el, value, modifiers);\n if (!options2.content || getDefaultConfig(options2.theme || \"tooltip\", \"disabled\")) {\n destroyTooltip(el);\n } else {\n let tooltipApp;\n if (el.$_popper) {\n tooltipApp = el.$_popper;\n tooltipApp.options = options2;\n } else {\n tooltipApp = createTooltip(el, value, modifiers);\n }\n if (typeof value.shown !== \"undefined\" && value.shown !== el.$_popperOldShown) {\n el.$_popperOldShown = value.shown;\n value.shown ? tooltipApp.show() : tooltipApp.hide();\n }\n }\n}\nvar PrivateVTooltip = {\n bind,\n update: bind,\n unbind(el) {\n destroyTooltip(el);\n }\n};\nfunction addListeners(el) {\n el.addEventListener(\"click\", onClick);\n el.addEventListener(\"touchstart\", onTouchStart, supportsPassive ? {\n passive: true\n } : false);\n}\nfunction removeListeners(el) {\n el.removeEventListener(\"click\", onClick);\n el.removeEventListener(\"touchstart\", onTouchStart);\n el.removeEventListener(\"touchend\", onTouchEnd);\n el.removeEventListener(\"touchcancel\", onTouchCancel);\n}\nfunction onClick(event) {\n const el = event.currentTarget;\n event.closePopover = !el.$_vclosepopover_touch;\n event.closeAllPopover = el.$_closePopoverModifiers && !!el.$_closePopoverModifiers.all;\n}\nfunction onTouchStart(event) {\n if (event.changedTouches.length === 1) {\n const el = event.currentTarget;\n el.$_vclosepopover_touch = true;\n const touch = event.changedTouches[0];\n el.$_vclosepopover_touchPoint = touch;\n el.addEventListener(\"touchend\", onTouchEnd);\n el.addEventListener(\"touchcancel\", onTouchCancel);\n }\n}\nfunction onTouchEnd(event) {\n const el = event.currentTarget;\n el.$_vclosepopover_touch = false;\n if (event.changedTouches.length === 1) {\n const touch = event.changedTouches[0];\n const firstTouch = el.$_vclosepopover_touchPoint;\n event.closePopover = Math.abs(touch.screenY - firstTouch.screenY) < 20 && Math.abs(touch.screenX - firstTouch.screenX) < 20;\n event.closeAllPopover = el.$_closePopoverModifiers && !!el.$_closePopoverModifiers.all;\n }\n}\nfunction onTouchCancel(event) {\n const el = event.currentTarget;\n el.$_vclosepopover_touch = false;\n}\nvar PrivateVClosePopper = {\n bind(el, { value, modifiers }) {\n el.$_closePopoverModifiers = modifiers;\n if (typeof value === \"undefined\" || value) {\n addListeners(el);\n }\n },\n update(el, { value, oldValue, modifiers }) {\n el.$_closePopoverModifiers = modifiers;\n if (value !== oldValue) {\n if (typeof value === \"undefined\" || value) {\n addListeners(el);\n } else {\n removeListeners(el);\n }\n }\n },\n unbind(el) {\n removeListeners(el);\n }\n};\nconst options = config;\nconst VTooltip = PrivateVTooltip;\nconst VClosePopper = PrivateVClosePopper;\nconst Dropdown = PrivateDropdown;\nconst Menu = PrivateMenu;\nconst Popper = PrivatePopper;\nconst PopperContent = PrivatePopperContent;\nconst PopperMethods = PrivatePopperMethods;\nconst PopperWrapper = PrivatePopperWrapper;\nconst ThemeClass = PrivateThemeClass;\nconst Tooltip = PrivateTooltip;\nconst TooltipDirective = PrivateTooltipDirective;\nfunction install(app, options2 = {}) {\n if (app.$_vTooltipInstalled)\n return;\n app.$_vTooltipInstalled = true;\n assign(config, options2);\n app.directive(\"tooltip\", PrivateVTooltip);\n app.directive(\"close-popper\", PrivateVClosePopper);\n app.component(\"v-tooltip\", PrivateTooltip);\n app.component(\"VTooltip\", PrivateTooltip);\n app.component(\"v-dropdown\", PrivateDropdown);\n app.component(\"VDropdown\", PrivateDropdown);\n app.component(\"v-menu\", PrivateMenu);\n app.component(\"VMenu\", PrivateMenu);\n}\nconst plugin = {\n version: \"1.0.0-beta.19\",\n install,\n options: config\n};\nlet GlobalVue = null;\nif (typeof window !== \"undefined\") {\n GlobalVue = window.Vue;\n} else if (typeof global !== \"undefined\") {\n GlobalVue = global.Vue;\n}\nif (GlobalVue) {\n GlobalVue.use(plugin);\n}\nexport { Dropdown, HIDE_EVENT_MAP, Menu, Popper, PopperContent, PopperMethods, PopperWrapper, SHOW_EVENT_MAP, ThemeClass, Tooltip, TooltipDirective, VClosePopper, VTooltip, createTooltip, plugin as default, destroyTooltip, hideAllPoppers, install, options, placements };\n","/*!\n* tabbable 6.2.0\n* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE\n*/\n// NOTE: separate `:not()` selectors has broader browser support than the newer\n// `:not([inert], [inert] *)` (Feb 2023)\n// CAREFUL: JSDom does not support `:not([inert] *)` as a selector; using it causes\n// the entire query to fail, resulting in no nodes found, which will break a lot\n// of things... so we have to rely on JS to identify nodes inside an inert container\nvar candidateSelectors = ['input:not([inert])', 'select:not([inert])', 'textarea:not([inert])', 'a[href]:not([inert])', 'button:not([inert])', '[tabindex]:not(slot):not([inert])', 'audio[controls]:not([inert])', 'video[controls]:not([inert])', '[contenteditable]:not([contenteditable=\"false\"]):not([inert])', 'details>summary:first-of-type:not([inert])', 'details:not([inert])'];\nvar candidateSelector = /* #__PURE__ */candidateSelectors.join(',');\nvar NoElement = typeof Element === 'undefined';\nvar matches = NoElement ? function () {} : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\nvar getRootNode = !NoElement && Element.prototype.getRootNode ? function (element) {\n var _element$getRootNode;\n return element === null || element === void 0 ? void 0 : (_element$getRootNode = element.getRootNode) === null || _element$getRootNode === void 0 ? void 0 : _element$getRootNode.call(element);\n} : function (element) {\n return element === null || element === void 0 ? void 0 : element.ownerDocument;\n};\n\n/**\n * Determines if a node is inert or in an inert ancestor.\n * @param {Element} [node]\n * @param {boolean} [lookUp] If true and `node` is not inert, looks up at ancestors to\n * see if any of them are inert. If false, only `node` itself is considered.\n * @returns {boolean} True if inert itself or by way of being in an inert ancestor.\n * False if `node` is falsy.\n */\nvar isInert = function isInert(node, lookUp) {\n var _node$getAttribute;\n if (lookUp === void 0) {\n lookUp = true;\n }\n // CAREFUL: JSDom does not support inert at all, so we can't use the `HTMLElement.inert`\n // JS API property; we have to check the attribute, which can either be empty or 'true';\n // if it's `null` (not specified) or 'false', it's an active element\n var inertAtt = node === null || node === void 0 ? void 0 : (_node$getAttribute = node.getAttribute) === null || _node$getAttribute === void 0 ? void 0 : _node$getAttribute.call(node, 'inert');\n var inert = inertAtt === '' || inertAtt === 'true';\n\n // NOTE: this could also be handled with `node.matches('[inert], :is([inert] *)')`\n // if it weren't for `matches()` not being a function on shadow roots; the following\n // code works for any kind of node\n // CAREFUL: JSDom does not appear to support certain selectors like `:not([inert] *)`\n // so it likely would not support `:is([inert] *)` either...\n var result = inert || lookUp && node && isInert(node.parentNode); // recursive\n\n return result;\n};\n\n/**\n * Determines if a node's content is editable.\n * @param {Element} [node]\n * @returns True if it's content-editable; false if it's not or `node` is falsy.\n */\nvar isContentEditable = function isContentEditable(node) {\n var _node$getAttribute2;\n // CAREFUL: JSDom does not support the `HTMLElement.isContentEditable` API so we have\n // to use the attribute directly to check for this, which can either be empty or 'true';\n // if it's `null` (not specified) or 'false', it's a non-editable element\n var attValue = node === null || node === void 0 ? void 0 : (_node$getAttribute2 = node.getAttribute) === null || _node$getAttribute2 === void 0 ? void 0 : _node$getAttribute2.call(node, 'contenteditable');\n return attValue === '' || attValue === 'true';\n};\n\n/**\n * @param {Element} el container to check in\n * @param {boolean} includeContainer add container to check\n * @param {(node: Element) => boolean} filter filter candidates\n * @returns {Element[]}\n */\nvar getCandidates = function getCandidates(el, includeContainer, filter) {\n // even if `includeContainer=false`, we still have to check it for inertness because\n // if it's inert, all its children are inert\n if (isInert(el)) {\n return [];\n }\n var candidates = Array.prototype.slice.apply(el.querySelectorAll(candidateSelector));\n if (includeContainer && matches.call(el, candidateSelector)) {\n candidates.unshift(el);\n }\n candidates = candidates.filter(filter);\n return candidates;\n};\n\n/**\n * @callback GetShadowRoot\n * @param {Element} element to check for shadow root\n * @returns {ShadowRoot|boolean} ShadowRoot if available or boolean indicating if a shadowRoot is attached but not available.\n */\n\n/**\n * @callback ShadowRootFilter\n * @param {Element} shadowHostNode the element which contains shadow content\n * @returns {boolean} true if a shadow root could potentially contain valid candidates.\n */\n\n/**\n * @typedef {Object} CandidateScope\n * @property {Element} scopeParent contains inner candidates\n * @property {Element[]} candidates list of candidates found in the scope parent\n */\n\n/**\n * @typedef {Object} IterativeOptions\n * @property {GetShadowRoot|boolean} getShadowRoot true if shadow support is enabled; falsy if not;\n * if a function, implies shadow support is enabled and either returns the shadow root of an element\n * or a boolean stating if it has an undisclosed shadow root\n * @property {(node: Element) => boolean} filter filter candidates\n * @property {boolean} flatten if true then result will flatten any CandidateScope into the returned list\n * @property {ShadowRootFilter} shadowRootFilter filter shadow roots;\n */\n\n/**\n * @param {Element[]} elements list of element containers to match candidates from\n * @param {boolean} includeContainer add container list to check\n * @param {IterativeOptions} options\n * @returns {Array.}\n */\nvar getCandidatesIteratively = function getCandidatesIteratively(elements, includeContainer, options) {\n var candidates = [];\n var elementsToCheck = Array.from(elements);\n while (elementsToCheck.length) {\n var element = elementsToCheck.shift();\n if (isInert(element, false)) {\n // no need to look up since we're drilling down\n // anything inside this container will also be inert\n continue;\n }\n if (element.tagName === 'SLOT') {\n // add shadow dom slot scope (slot itself cannot be focusable)\n var assigned = element.assignedElements();\n var content = assigned.length ? assigned : element.children;\n var nestedCandidates = getCandidatesIteratively(content, true, options);\n if (options.flatten) {\n candidates.push.apply(candidates, nestedCandidates);\n } else {\n candidates.push({\n scopeParent: element,\n candidates: nestedCandidates\n });\n }\n } else {\n // check candidate element\n var validCandidate = matches.call(element, candidateSelector);\n if (validCandidate && options.filter(element) && (includeContainer || !elements.includes(element))) {\n candidates.push(element);\n }\n\n // iterate over shadow content if possible\n var shadowRoot = element.shadowRoot ||\n // check for an undisclosed shadow\n typeof options.getShadowRoot === 'function' && options.getShadowRoot(element);\n\n // no inert look up because we're already drilling down and checking for inertness\n // on the way down, so all containers to this root node should have already been\n // vetted as non-inert\n var validShadowRoot = !isInert(shadowRoot, false) && (!options.shadowRootFilter || options.shadowRootFilter(element));\n if (shadowRoot && validShadowRoot) {\n // add shadow dom scope IIF a shadow root node was given; otherwise, an undisclosed\n // shadow exists, so look at light dom children as fallback BUT create a scope for any\n // child candidates found because they're likely slotted elements (elements that are\n // children of the web component element (which has the shadow), in the light dom, but\n // slotted somewhere _inside_ the undisclosed shadow) -- the scope is created below,\n // _after_ we return from this recursive call\n var _nestedCandidates = getCandidatesIteratively(shadowRoot === true ? element.children : shadowRoot.children, true, options);\n if (options.flatten) {\n candidates.push.apply(candidates, _nestedCandidates);\n } else {\n candidates.push({\n scopeParent: element,\n candidates: _nestedCandidates\n });\n }\n } else {\n // there's not shadow so just dig into the element's (light dom) children\n // __without__ giving the element special scope treatment\n elementsToCheck.unshift.apply(elementsToCheck, element.children);\n }\n }\n }\n return candidates;\n};\n\n/**\n * @private\n * Determines if the node has an explicitly specified `tabindex` attribute.\n * @param {HTMLElement} node\n * @returns {boolean} True if so; false if not.\n */\nvar hasTabIndex = function hasTabIndex(node) {\n return !isNaN(parseInt(node.getAttribute('tabindex'), 10));\n};\n\n/**\n * Determine the tab index of a given node.\n * @param {HTMLElement} node\n * @returns {number} Tab order (negative, 0, or positive number).\n * @throws {Error} If `node` is falsy.\n */\nvar getTabIndex = function getTabIndex(node) {\n if (!node) {\n throw new Error('No node provided');\n }\n if (node.tabIndex < 0) {\n // in Chrome,
,