UNPKG

p3x-redis-ui-material

Version:

💿 The p3x-redis-ui-material web interface that connects to the p3x-redis-ui-server via http and socket.io

23 lines 385 kB
/*! 
MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
For more information about all licenses, please see 792.89f1f299a1c8be5c78f2.js.LICENSE.txt
 */
(()=>{var e,t,n,r,o,i={14:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n<r;)o[n]=t(e[n],n,e);return o}},89:()=>{p3xr.ng.directive("p3xValidateJson",["$timeout","$rootScope",function(e,t){return{restrict:"A",require:"ngModel",scope:{p3xValidateJsonRequired:"<",model:"=ngModel"},link:function(e,t,n,r){let o,i=e.p3xValidateJsonRequired||!1;const s=e=>{r.$setValidity("p3xValidateJson",e)};e.$watch("p3xValidateJsonRequired",((t,n)=>{if(i=t,i)try{JSON.parse(o),s(!0)}catch(e){s(!1)}else s(!0),e.model=o})),r.$validators.p3xValidateJson=(e,t)=>{if(o=e,!i)return s(!0),e;try{return JSON.parse(e),s(!0),e}catch(e){return s(!1),!1}}}}}])},105:()=>{p3xr.theme.dark=function(e){p3xr.theme.dark.order=3,e.theme("p3xrThemeDarkLayout").primaryPalette("grey",{default:"800","hue-1":"500","hue-2":"700","hue-3":"900"}).accentPalette("grey").warnPalette("grey").backgroundPalette("grey",{default:"900","hue-1":"800","hue-2":"700","hue-3":"900"}),e.theme("p3xrThemeDarkLayout").dark(),e.theme("p3xrThemeDark").primaryPalette("indigo",{default:"300"}).accentPalette("blue").warnPalette("orange").backgroundPalette("grey"),e.theme("p3xrThemeDark").dark(),e.theme("p3xrThemeDarkCommon").primaryPalette("green").accentPalette("grey").warnPalette("indigo",{default:"200"}).backgroundPalette("grey"),e.theme("p3xrThemeDarkCommon").dark()}},119:e=>{e.exports=function(){return[]}},259:(e,t,n)=>{var r=n(5217),o=n(5661),i=n(3287);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var s=n.__data__;if(!o||s.length<199)return s.push([e,t]),this.size=++n.size,this;n=this.__data__=new i(s)}return n.set(e,t),this.size=n.size,this}},275:(e,t,n)=>{n.g.p3xr.api={host:void 0};const r=new URL(location.toString());!0===n.g.p3xrDevMode&&"8080"===r.port?n.g.p3xr.api.host=`http://${r.hostname}:7843`:n.g.p3xr.api.host=`${r.protocol}//${r.host}`},337:(e,t,n)=>{var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},384:(e,t,n)=>{var r=n(4275),o=n(8059);e.exports=function(e,t){for(var n=0,i=(t=r(t,e)).length;null!=e&&n<i;)e=e[o(t[n++])];return n&&n==i?e:void 0}},403:e=>{const t=e=>{const{node:n,status:r,nodeCallback:o}=e;n.$inview=r,o&&o({node:n});for(let n of e.node.children)n.$inview=r,o&&o({node:n}),n.children.length>0&&t({node:n,status:e.status,nodeCallback:o})};e.exports.recursive=e=>{let{status:n,nodes:r,nodeCallback:o}=e;void 0===n&&(n=!1),Array.isArray(r)||(r=[r]);for(let e of r)t({node:e,status:n,nodeCallback:o})}},420:()=>{p3xr.theme.light=function(e,t){return p3xr.theme.light.order=0,e.theme("p3xrThemeLightLayout").primaryPalette("blue-grey",{default:"800","hue-1":"200","hue-2":"700","hue-3":"900"}).accentPalette("blue-grey").warnPalette("grey").backgroundPalette("blue-grey",{default:"A100","hue-1":"50","hue-2":"700","hue-3":"900"}),e.theme("p3xrThemeLight").primaryPalette("deep-purple").accentPalette("purple",{default:"500"}).warnPalette("red",{default:"700"}).backgroundPalette("blue-grey"),e.theme("p3xrThemeLightCommon").primaryPalette("green").accentPalette("grey").warnPalette("blue-grey").backgroundPalette("blue-grey"),this}},427:(e,t,n)=>{var r=n(1595),o=n(5304);e.exports=function(e,t){return e&&r(e,t,o)}},439:(e,t,n)=>{var r=n(5760),o=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,i,s,a){var l=1&n,d=r(e),c=d.length;if(c!=r(t).length&&!l)return!1;for(var u=c;u--;){var m=d[u];if(!(l?m in t:o.call(t,m)))return!1}var p=a.get(e),h=a.get(t);if(p&&h)return p==t&&h==e;var g=!0;a.set(e,t),a.set(t,e);for(var f=l;++u<c;){var x=e[m=d[u]],y=t[m];if(i)var b=l?i(y,x,m,t,e,a):i(x,y,m,e,t,a);if(!(void 0===b?x===y||s(x,y,n,i,a):b)){g=!1;break}f||(f="constructor"==m)}if(g&&!f){var v=e.constructor,T=t.constructor;v==T||!("constructor"in e)||!("constructor"in t)||"function"==typeof v&&v instanceof v&&"function"==typeof T&&T instanceof T||(g=!1)}return a.delete(e),a.delete(t),g}},469:(e,t,n)=>{var r=n(4767);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},520:(e,t,n)=>{p3xr.ng.component("p3xrMainTree",{template:n(1451),bindings:{p3xrResize:"&",p3xrMainRef:"<"},controller:["p3xrCommon","p3xrRedisParser","p3xrSocket","$rootScope","$timeout","$state","$scope","$mdDialog","p3xrDialogKeyNewOrSet","p3xrTheme","$stateParams",function(e,t,r,o,i,s,a,l,d,c,u){this.displayNode=(e,t)=>{e.$inview=t},this.getTreeTheme=()=>c.isDark()?"tree-dark":"tree-classic",this.keysTreeOptions={nodeChildren:"children",dirSelectable:!1,multiSelection:!1},this.selectTreeNode=function(e,t,n,r,o,i,a,l,d,c){s.go("main.key",{key:e.key,resize:this.p3xrResize})},this.showToggle=function(e,t,r,i,s,a,l,d,c,u){t||n(403).recursive({nodes:o.keysTreeRendered}),o.$broadcast("p3xr-main-treecontrol-control-noop")},this.delete=async t=>{try{t.event.preventDefault(),t.event.stopPropagation(),await e.confirm({event:t.$event,message:p3xr.strings.confirm.deleteKey}),await r.request({action:"delete",payload:{key:t.key}}),window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/delete"}),s.go("main.statistics"),e.toast({message:p3xr.strings.status.deletedKey({key:t.key})}),await this.p3xrMainRef.refresh()}catch(t){e.generalHandleError(t)}},this.rename=async t=>{try{const n=l.prompt().title(p3xr.strings.confirm.rename.title).textContent(p3xr.strings.confirm.rename.textContent).placeholder(p3xr.strings.confirm.rename.placeholder).ariaLabel(p3xr.strings.confirm.rename.placeholder).initialValue(t.key).targetEvent(t.$event).required(!0).ok(p3xr.strings.intention.rename).cancel(p3xr.strings.intention.cancel),o=await l.show(n);await r.request({action:"rename",payload:{key:t.key,keyNew:o}}),window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/rename"}),s.go("main.key",{key:o,resize:this.p3xrResize}),e.toast({message:p3xr.strings.status.renamedKey}),await this.p3xrMainRef.refresh()}catch(t){e.generalHandleError(t)}},this.deleteTree=async t=>{try{const{event:n,node:o}=t;n.stopPropagation(),await e.confirm({event:n,message:p3xr.strings.confirm.deleteAllKeys({key:o.key})}),await r.request({action:"key-del-tree",payload:{key:o.key,redisTreeDivider:p3xr.settings.redisTreeDivider}}),e.toast({message:p3xr.strings.status.treeDeleted({key:o.key})}),void 0!==u.key&&u.key.startsWith(o.key+p3xr.settings.redisTreeDivider)&&s.go("main.statistics"),await this.p3xrMainRef.refresh()}catch(t){e.generalHandleError(t)}},this.addKey=async t=>{const{event:n,node:r}=t;n.stopPropagation();try{const e=await d.show({$event:n,node:r,type:"add"});await this.p3xrMainRef.refresh(),s.go("main.key",{key:e.key,resize:this.p3xrResize})}catch(t){e.generalHandleError(t)}},this.extractNodeTooltip=e=>"folder"!==e.type&&void 0!==e.keysInfo?void 0===e.keysInfo?"":p3xr.ui.htmlEncode(p3xr.strings.redisTypes[e.keysInfo.type]+" - "+e.key):p3xr.ui.htmlEncode(e.key),this.extractNodeKey=e=>"folder"===e.type?"":p3xr.ui.htmlEncode(e.key),a.$on("p3xr-key-delete",((e,t)=>{this.delete(t)})),a.$on("p3xr-key-rename",((e,t)=>{this.rename(t)})),a.$on("p3xr-key-new",((e,t)=>{this.addKey(t)})),a.$on("p3xr-main-treecontrol",((e,t)=>{this.isEnabled=t})),this.hover=({node:e})=>{!0!==p3xr.state.connection.readonly&&(e.show=!0)},this.isEnabled=!0;const m=()=>{!0===this.isEnabled&&(this.isEnabled=!1,o.$digest(),i((()=>{this.isEnabled=!0,o.$digest()})))};window.addEventListener("focus",m),a.$on("$destroy",(()=>{window.removeEventListener("focus",m)}))}]})},533:(e,t,n)=>{var r;!function(){var o=Object.assign||function(e){for(var t,n=1;n<arguments.length;n++)for(var r in t=arguments[n])g(t,r)&&(e[r]=t[r]);return e},i=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},s=l((function(e){return 1===e?"χρόνος":"χρόνια"}),(function(e){return 1===e?"μήνας":"μήνες"}),(function(e){return 1===e?"εβδομάδα":"εβδομάδες"}),(function(e){return 1===e?"μέρα":"μέρες"}),(function(e){return 1===e?"ώρα":"ώρες"}),(function(e){return 1===e?"λεπτό":"λεπτά"}),(function(e){return 1===e?"δευτερόλεπτο":"δευτερόλεπτα"}),(function(e){return(1===e?"χιλιοστό":"χιλιοστά")+" του δευτερολέπτου"}),","),a={af:l("jaar",(function(e){return"maand"+(1===e?"":"e")}),(function(e){return 1===e?"week":"weke"}),(function(e){return 1===e?"dag":"dae"}),(function(e){return 1===e?"uur":"ure"}),(function(e){return 1===e?"minuut":"minute"}),(function(e){return"sekonde"+(1===e?"":"s")}),(function(e){return"millisekonde"+(1===e?"":"s")}),","),am:l("ዓመት","ወር","ሳምንት","ቀን","ሰዓት","ደቂቃ","ሰከንድ","ሚሊሰከንድ"),ar:o(l((function(e){return["سنة","سنتان","سنوات"][d(e)]}),(function(e){return["شهر","شهران","أشهر"][d(e)]}),(function(e){return["أسبوع","أسبوعين","أسابيع"][d(e)]}),(function(e){return["يوم","يومين","أيام"][d(e)]}),(function(e){return["ساعة","ساعتين","ساعات"][d(e)]}),(function(e){return["دقيقة","دقيقتان","دقائق"][d(e)]}),(function(e){return["ثانية","ثانيتان","ثواني"][d(e)]}),(function(e){return["جزء من الثانية","جزآن من الثانية","أجزاء من الثانية"][d(e)]}),","),{delimiter:" ﻭ ",_hideCountIf2:!0,_digitReplacements:["۰","١","٢","٣","٤","٥","٦","٧","٨","٩"]}),bg:l((function(e){return["години","година","години"][u(e)]}),(function(e){return["месеца","месец","месеца"][u(e)]}),(function(e){return["седмици","седмица","седмици"][u(e)]}),(function(e){return["дни","ден","дни"][u(e)]}),(function(e){return["часа","час","часа"][u(e)]}),(function(e){return["минути","минута","минути"][u(e)]}),(function(e){return["секунди","секунда","секунди"][u(e)]}),(function(e){return["милисекунди","милисекунда","милисекунди"][u(e)]}),","),bn:l("বছর","মাস","সপ্তাহ","দিন","ঘন্টা","মিনিট","সেকেন্ড","মিলিসেকেন্ড"),ca:l((function(e){return"any"+(1===e?"":"s")}),(function(e){return"mes"+(1===e?"":"os")}),(function(e){return"setman"+(1===e?"a":"es")}),(function(e){return"di"+(1===e?"a":"es")}),(function(e){return"hor"+(1===e?"a":"es")}),(function(e){return"minut"+(1===e?"":"s")}),(function(e){return"segon"+(1===e?"":"s")}),(function(e){return"milisegon"+(1===e?"":"s")}),","),ckb:l("ساڵ","مانگ","هەفتە","ڕۆژ","کاژێر","خولەک","چرکە","میلی چرکە","."),cs:l((function(e){return["rok","roku","roky","let"][m(e)]}),(function(e){return["měsíc","měsíce","měsíce","měsíců"][m(e)]}),(function(e){return["týden","týdne","týdny","týdnů"][m(e)]}),(function(e){return["den","dne","dny","dní"][m(e)]}),(function(e){return["hodina","hodiny","hodiny","hodin"][m(e)]}),(function(e){return["minuta","minuty","minuty","minut"][m(e)]}),(function(e){return["sekunda","sekundy","sekundy","sekund"][m(e)]}),(function(e){return["milisekunda","milisekundy","milisekundy","milisekund"][m(e)]}),","),cy:l("flwyddyn","mis","wythnos","diwrnod","awr","munud","eiliad","milieiliad"),da:l("år",(function(e){return"måned"+(1===e?"":"er")}),(function(e){return"uge"+(1===e?"":"r")}),(function(e){return"dag"+(1===e?"":"e")}),(function(e){return"time"+(1===e?"":"r")}),(function(e){return"minut"+(1===e?"":"ter")}),(function(e){return"sekund"+(1===e?"":"er")}),(function(e){return"millisekund"+(1===e?"":"er")}),","),de:l((function(e){return"Jahr"+(1===e?"":"e")}),(function(e){return"Monat"+(1===e?"":"e")}),(function(e){return"Woche"+(1===e?"":"n")}),(function(e){return"Tag"+(1===e?"":"e")}),(function(e){return"Stunde"+(1===e?"":"n")}),(function(e){return"Minute"+(1===e?"":"n")}),(function(e){return"Sekunde"+(1===e?"":"n")}),(function(e){return"Millisekunde"+(1===e?"":"n")}),","),el:s,en:l((function(e){return"year"+(1===e?"":"s")}),(function(e){return"month"+(1===e?"":"s")}),(function(e){return"week"+(1===e?"":"s")}),(function(e){return"day"+(1===e?"":"s")}),(function(e){return"hour"+(1===e?"":"s")}),(function(e){return"minute"+(1===e?"":"s")}),(function(e){return"second"+(1===e?"":"s")}),(function(e){return"millisecond"+(1===e?"":"s")})),eo:l((function(e){return"jaro"+(1===e?"":"j")}),(function(e){return"monato"+(1===e?"":"j")}),(function(e){return"semajno"+(1===e?"":"j")}),(function(e){return"tago"+(1===e?"":"j")}),(function(e){return"horo"+(1===e?"":"j")}),(function(e){return"minuto"+(1===e?"":"j")}),(function(e){return"sekundo"+(1===e?"":"j")}),(function(e){return"milisekundo"+(1===e?"":"j")}),","),es:l((function(e){return"año"+(1===e?"":"s")}),(function(e){return"mes"+(1===e?"":"es")}),(function(e){return"semana"+(1===e?"":"s")}),(function(e){return"día"+(1===e?"":"s")}),(function(e){return"hora"+(1===e?"":"s")}),(function(e){return"minuto"+(1===e?"":"s")}),(function(e){return"segundo"+(1===e?"":"s")}),(function(e){return"milisegundo"+(1===e?"":"s")}),","),et:l((function(e){return"aasta"+(1===e?"":"t")}),(function(e){return"kuu"+(1===e?"":"d")}),(function(e){return"nädal"+(1===e?"":"at")}),(function(e){return"päev"+(1===e?"":"a")}),(function(e){return"tund"+(1===e?"":"i")}),(function(e){return"minut"+(1===e?"":"it")}),(function(e){return"sekund"+(1===e?"":"it")}),(function(e){return"millisekund"+(1===e?"":"it")}),","),eu:l("urte","hilabete","aste","egun","ordu","minutu","segundo","milisegundo",","),fa:l("سال","ماه","هفته","روز","ساعت","دقیقه","ثانیه","میلی ثانیه"),fi:l((function(e){return 1===e?"vuosi":"vuotta"}),(function(e){return 1===e?"kuukausi":"kuukautta"}),(function(e){return"viikko"+(1===e?"":"a")}),(function(e){return"päivä"+(1===e?"":"ä")}),(function(e){return"tunti"+(1===e?"":"a")}),(function(e){return"minuutti"+(1===e?"":"a")}),(function(e){return"sekunti"+(1===e?"":"a")}),(function(e){return"millisekunti"+(1===e?"":"a")}),","),fo:l("ár",(function(e){return 1===e?"mánaður":"mánaðir"}),(function(e){return 1===e?"vika":"vikur"}),(function(e){return 1===e?"dagur":"dagar"}),(function(e){return 1===e?"tími":"tímar"}),(function(e){return 1===e?"minuttur":"minuttir"}),"sekund","millisekund",","),fr:l((function(e){return"an"+(e>=2?"s":"")}),"mois",(function(e){return"semaine"+(e>=2?"s":"")}),(function(e){return"jour"+(e>=2?"s":"")}),(function(e){return"heure"+(e>=2?"s":"")}),(function(e){return"minute"+(e>=2?"s":"")}),(function(e){return"seconde"+(e>=2?"s":"")}),(function(e){return"milliseconde"+(e>=2?"s":"")}),","),gr:s,he:l((function(e){return 1===e?"שנה":"שנים"}),(function(e){return 1===e?"חודש":"חודשים"}),(function(e){return 1===e?"שבוע":"שבועות"}),(function(e){return 1===e?"יום":"ימים"}),(function(e){return 1===e?"שעה":"שעות"}),(function(e){return 1===e?"דקה":"דקות"}),(function(e){return 1===e?"שניה":"שניות"}),(function(e){return 1===e?"מילישנייה":"מילישניות"})),hr:l((function(e){return e%10==2||e%10==3||e%10==4?"godine":"godina"}),(function(e){return 1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci"}),(function(e){return e%10==1&&11!==e?"tjedan":"tjedna"}),(function(e){return 1===e?"dan":"dana"}),(function(e){return 1===e?"sat":2===e||3===e||4===e?"sata":"sati"}),(function(e){var t=e%10;return 2!==t&&3!==t&&4!==t||!(e<10||e>14)?"minuta":"minute"}),(function(e){var t=e%10;return 5===t||Math.floor(e)===e&&e>=10&&e<=19?"sekundi":1===t?"sekunda":2===t||3===t||4===t?"sekunde":"sekundi"}),(function(e){return 1===e?"milisekunda":e%10==2||e%10==3||e%10==4?"milisekunde":"milisekundi"}),","),hi:l("साल",(function(e){return 1===e?"महीना":"महीने"}),(function(e){return 1===e?"हफ़्ता":"हफ्ते"}),"दिन",(function(e){return 1===e?"घंटा":"घंटे"}),"मिनट","सेकंड","मिलीसेकंड"),hu:l("év","hónap","hét","nap","óra","perc","másodperc","ezredmásodperc",","),id:l("tahun","bulan","minggu","hari","jam","menit","detik","milidetik"),is:l("ár",(function(e){return"mánuð"+(1===e?"ur":"ir")}),(function(e){return"vik"+(1===e?"a":"ur")}),(function(e){return"dag"+(1===e?"ur":"ar")}),(function(e){return"klukkutím"+(1===e?"i":"ar")}),(function(e){return"mínút"+(1===e?"a":"ur")}),(function(e){return"sekúnd"+(1===e?"a":"ur")}),(function(e){return"millisekúnd"+(1===e?"a":"ur")})),it:l((function(e){return"ann"+(1===e?"o":"i")}),(function(e){return"mes"+(1===e?"e":"i")}),(function(e){return"settiman"+(1===e?"a":"e")}),(function(e){return"giorn"+(1===e?"o":"i")}),(function(e){return"or"+(1===e?"a":"e")}),(function(e){return"minut"+(1===e?"o":"i")}),(function(e){return"second"+(1===e?"o":"i")}),(function(e){return"millisecond"+(1===e?"o":"i")}),","),ja:l("年","ヶ月","週間","日","時間","分","秒","ミリ秒"),km:l("ឆ្នាំ","ខែ","សប្តាហ៍","ថ្ងៃ","ម៉ោង","នាទី","វិនាទី","មិល្លីវិនាទី"),kn:l((function(e){return 1===e?"ವರ್ಷ":"ವರ್ಷಗಳು"}),(function(e){return 1===e?"ತಿಂಗಳು":"ತಿಂಗಳುಗಳು"}),(function(e){return 1===e?"ವಾರ":"ವಾರಗಳು"}),(function(e){return 1===e?"ದಿನ":"ದಿನಗಳು"}),(function(e){return 1===e?"ಗಂಟೆ":"ಗಂಟೆಗಳು"}),(function(e){return 1===e?"ನಿಮಿಷ":"ನಿಮಿಷಗಳು"}),(function(e){return 1===e?"ಸೆಕೆಂಡ್":"ಸೆಕೆಂಡುಗಳು"}),(function(e){return 1===e?"ಮಿಲಿಸೆಕೆಂಡ್":"ಮಿಲಿಸೆಕೆಂಡುಗಳು"})),ko:l("년","개월","주일","일","시간","분","초","밀리 초"),ku:l("sal","meh","hefte","roj","seet","deqe","saniye","mîlîçirk",","),lo:l("ປີ","ເດືອນ","ອາທິດ","ມື້","ຊົ່ວໂມງ","ນາທີ","ວິນາທີ","ມິນລິວິນາທີ",","),lt:l((function(e){return e%10==0||e%100>=10&&e%100<=20?"metų":"metai"}),(function(e){return["mėnuo","mėnesiai","mėnesių"][p(e)]}),(function(e){return["savaitė","savaitės","savaičių"][p(e)]}),(function(e){return["diena","dienos","dienų"][p(e)]}),(function(e){return["valanda","valandos","valandų"][p(e)]}),(function(e){return["minutė","minutės","minučių"][p(e)]}),(function(e){return["sekundė","sekundės","sekundžių"][p(e)]}),(function(e){return["milisekundė","milisekundės","milisekundžių"][p(e)]}),","),lv:l((function(e){return h(e)?"gads":"gadi"}),(function(e){return h(e)?"mēnesis":"mēneši"}),(function(e){return h(e)?"nedēļa":"nedēļas"}),(function(e){return h(e)?"diena":"dienas"}),(function(e){return h(e)?"stunda":"stundas"}),(function(e){return h(e)?"minūte":"minūtes"}),(function(e){return h(e)?"sekunde":"sekundes"}),(function(e){return h(e)?"milisekunde":"milisekundes"}),","),mk:l((function(e){return 1===e?"година":"години"}),(function(e){return 1===e?"месец":"месеци"}),(function(e){return 1===e?"недела":"недели"}),(function(e){return 1===e?"ден":"дена"}),(function(e){return 1===e?"час":"часа"}),(function(e){return 1===e?"минута":"минути"}),(function(e){return 1===e?"секунда":"секунди"}),(function(e){return 1===e?"милисекунда":"милисекунди"}),","),mn:l("жил","сар","долоо хоног","өдөр","цаг","минут","секунд","миллисекунд"),mr:l((function(e){return 1===e?"वर्ष":"वर्षे"}),(function(e){return 1===e?"महिना":"महिने"}),(function(e){return 1===e?"आठवडा":"आठवडे"}),"दिवस","तास",(function(e){return 1===e?"मिनिट":"मिनिटे"}),"सेकंद","मिलिसेकंद"),ms:l("tahun","bulan","minggu","hari","jam","minit","saat","milisaat"),nl:l("jaar",(function(e){return 1===e?"maand":"maanden"}),(function(e){return 1===e?"week":"weken"}),(function(e){return 1===e?"dag":"dagen"}),"uur",(function(e){return 1===e?"minuut":"minuten"}),(function(e){return 1===e?"seconde":"seconden"}),(function(e){return 1===e?"milliseconde":"milliseconden"}),","),no:l("år",(function(e){return"måned"+(1===e?"":"er")}),(function(e){return"uke"+(1===e?"":"r")}),(function(e){return"dag"+(1===e?"":"er")}),(function(e){return"time"+(1===e?"":"r")}),(function(e){return"minutt"+(1===e?"":"er")}),(function(e){return"sekund"+(1===e?"":"er")}),(function(e){return"millisekund"+(1===e?"":"er")}),","),pl:l((function(e){return["rok","roku","lata","lat"][c(e)]}),(function(e){return["miesiąc","miesiąca","miesiące","miesięcy"][c(e)]}),(function(e){return["tydzień","tygodnia","tygodnie","tygodni"][c(e)]}),(function(e){return["dzień","dnia","dni","dni"][c(e)]}),(function(e){return["godzina","godziny","godziny","godzin"][c(e)]}),(function(e){return["minuta","minuty","minuty","minut"][c(e)]}),(function(e){return["sekunda","sekundy","sekundy","sekund"][c(e)]}),(function(e){return["milisekunda","milisekundy","milisekundy","milisekund"][c(e)]}),","),pt:l((function(e){return"ano"+(1===e?"":"s")}),(function(e){return 1===e?"mês":"meses"}),(function(e){return"semana"+(1===e?"":"s")}),(function(e){return"dia"+(1===e?"":"s")}),(function(e){return"hora"+(1===e?"":"s")}),(function(e){return"minuto"+(1===e?"":"s")}),(function(e){return"segundo"+(1===e?"":"s")}),(function(e){return"milissegundo"+(1===e?"":"s")}),","),ro:l((function(e){return 1===e?"an":"ani"}),(function(e){return 1===e?"lună":"luni"}),(function(e){return 1===e?"săptămână":"săptămâni"}),(function(e){return 1===e?"zi":"zile"}),(function(e){return 1===e?"oră":"ore"}),(function(e){return 1===e?"minut":"minute"}),(function(e){return 1===e?"secundă":"secunde"}),(function(e){return 1===e?"milisecundă":"milisecunde"}),","),ru:l((function(e){return["лет","год","года"][u(e)]}),(function(e){return["месяцев","месяц","месяца"][u(e)]}),(function(e){return["недель","неделя","недели"][u(e)]}),(function(e){return["дней","день","дня"][u(e)]}),(function(e){return["часов","час","часа"][u(e)]}),(function(e){return["минут","минута","минуты"][u(e)]}),(function(e){return["секунд","секунда","секунды"][u(e)]}),(function(e){return["миллисекунд","миллисекунда","миллисекунды"][u(e)]}),","),sq:l((function(e){return 1===e?"vit":"vjet"}),"muaj","javë","ditë","orë",(function(e){return"minut"+(1===e?"ë":"a")}),(function(e){return"sekond"+(1===e?"ë":"a")}),(function(e){return"milisekond"+(1===e?"ë":"a")}),","),sr:l((function(e){return["години","година","године"][u(e)]}),(function(e){return["месеци","месец","месеца"][u(e)]}),(function(e){return["недељи","недеља","недеље"][u(e)]}),(function(e){return["дани","дан","дана"][u(e)]}),(function(e){return["сати","сат","сата"][u(e)]}),(function(e){return["минута","минут","минута"][u(e)]}),(function(e){return["секунди","секунда","секунде"][u(e)]}),(function(e){return["милисекунди","милисекунда","милисекунде"][u(e)]}),","),sr_Latn:l((function(e){return["godini","godina","godine"][u(e)]}),(function(e){return["meseci","mesec","meseca"][u(e)]}),(function(e){return["nedelji","nedelja","nedelje"][u(e)]}),(function(e){return["dani","dan","dana"][u(e)]}),(function(e){return["sati","sat","sata"][u(e)]}),(function(e){return["minuta","minut","minuta"][u(e)]}),(function(e){return["sekundi","sekunda","sekunde"][u(e)]}),(function(e){return["milisekundi","milisekunda","milisekunde"][u(e)]}),","),ta:l((function(e){return 1===e?"வருடம்":"ஆண்டுகள்"}),(function(e){return 1===e?"மாதம்":"மாதங்கள்"}),(function(e){return 1===e?"வாரம்":"வாரங்கள்"}),(function(e){return 1===e?"நாள்":"நாட்கள்"}),(function(e){return 1===e?"மணி":"மணிநேரம்"}),(function(e){return"நிமிட"+(1===e?"ம்":"ங்கள்")}),(function(e){return"வினாடி"+(1===e?"":"கள்")}),(function(e){return"மில்லி விநாடி"+(1===e?"":"கள்")})),te:l((function(e){return"సంవత్స"+(1===e?"రం":"రాల")}),(function(e){return"నెల"+(1===e?"":"ల")}),(function(e){return 1===e?"వారం":"వారాలు"}),(function(e){return"రోజు"+(1===e?"":"లు")}),(function(e){return"గంట"+(1===e?"":"లు")}),(function(e){return 1===e?"నిమిషం":"నిమిషాలు"}),(function(e){return 1===e?"సెకను":"సెకన్లు"}),(function(e){return 1===e?"మిల్లీసెకన్":"మిల్లీసెకన్లు"})),uk:l((function(e){return["років","рік","роки"][u(e)]}),(function(e){return["місяців","місяць","місяці"][u(e)]}),(function(e){return["тижнів","тиждень","тижні"][u(e)]}),(function(e){return["днів","день","дні"][u(e)]}),(function(e){return["годин","година","години"][u(e)]}),(function(e){return["хвилин","хвилина","хвилини"][u(e)]}),(function(e){return["секунд","секунда","секунди"][u(e)]}),(function(e){return["мілісекунд","мілісекунда","мілісекунди"][u(e)]}),","),ur:l("سال",(function(e){return 1===e?"مہینہ":"مہینے"}),(function(e){return 1===e?"ہفتہ":"ہفتے"}),"دن",(function(e){return 1===e?"گھنٹہ":"گھنٹے"}),"منٹ","سیکنڈ","ملی سیکنڈ"),sk:l((function(e){return["rok","roky","roky","rokov"][m(e)]}),(function(e){return["mesiac","mesiace","mesiace","mesiacov"][m(e)]}),(function(e){return["týždeň","týždne","týždne","týždňov"][m(e)]}),(function(e){return["deň","dni","dni","dní"][m(e)]}),(function(e){return["hodina","hodiny","hodiny","hodín"][m(e)]}),(function(e){return["minúta","minúty","minúty","minút"][m(e)]}),(function(e){return["sekunda","sekundy","sekundy","sekúnd"][m(e)]}),(function(e){return["milisekunda","milisekundy","milisekundy","milisekúnd"][m(e)]}),","),sl:l((function(e){return e%10==1?"leto":e%100==2?"leti":e%100==3||e%100==4||Math.floor(e)!==e&&e%100<=5?"leta":"let"}),(function(e){return e%10==1?"mesec":e%100==2||Math.floor(e)!==e&&e%100<=5?"meseca":e%10==3||e%10==4?"mesece":"mesecev"}),(function(e){return e%10==1?"teden":e%10==2||Math.floor(e)!==e&&e%100<=4?"tedna":e%10==3||e%10==4?"tedne":"tednov"}),(function(e){return e%100==1?"dan":"dni"}),(function(e){return e%10==1?"ura":e%100==2?"uri":e%10==3||e%10==4||Math.floor(e)!==e?"ure":"ur"}),(function(e){return e%10==1?"minuta":e%10==2?"minuti":e%10==3||e%10==4||Math.floor(e)!==e&&e%100<=4?"minute":"minut"}),(function(e){return e%10==1?"sekunda":e%100==2?"sekundi":e%100==3||e%100==4||Math.floor(e)!==e?"sekunde":"sekund"}),(function(e){return e%10==1?"milisekunda":e%100==2?"milisekundi":e%100==3||e%100==4||Math.floor(e)!==e?"milisekunde":"milisekund"}),","),sv:l("år",(function(e){return"månad"+(1===e?"":"er")}),(function(e){return"veck"+(1===e?"a":"or")}),(function(e){return"dag"+(1===e?"":"ar")}),(function(e){return"timm"+(1===e?"e":"ar")}),(function(e){return"minut"+(1===e?"":"er")}),(function(e){return"sekund"+(1===e?"":"er")}),(function(e){return"millisekund"+(1===e?"":"er")}),","),sw:o(l((function(e){return 1===e?"mwaka":"miaka"}),(function(e){return 1===e?"mwezi":"miezi"}),"wiki",(function(e){return 1===e?"siku":"masiku"}),(function(e){return 1===e?"saa":"masaa"}),"dakika","sekunde","milisekunde"),{_numberFirst:!0}),tr:l("yıl","ay","hafta","gün","saat","dakika","saniye","milisaniye",","),th:l("ปี","เดือน","สัปดาห์","วัน","ชั่วโมง","นาที","วินาที","มิลลิวินาที"),uz:l("yil","oy","hafta","kun","soat","minut","sekund","millisekund"),uz_CYR:l("йил","ой","ҳафта","кун","соат","минут","секунд","миллисекунд"),vi:l("năm","tháng","tuần","ngày","giờ","phút","giây","mili giây",","),zh_CN:l("年","个月","周","天","小时","分钟","秒","毫秒"),zh_TW:l("年","個月","周","天","小時","分鐘","秒","毫秒")};function l(e,t,n,r,o,i,s,a,l){var d={y:e,mo:t,w:n,d:r,h:o,m:i,s,ms:a};return void 0!==l&&(d.decimal=l),d}function d(e){return 2===e?1:e>2&&e<11?2:0}function c(e){return 1===e?0:Math.floor(e)!==e?1:e%10>=2&&e%10<=4&&!(e%100>10&&e%100<20)?2:3}function u(e){return Math.floor(e)!==e?2:e%100>=5&&e%100<=20||e%10>=5&&e%10<=9||e%10==0?0:e%10==1?1:e>1?2:0}function m(e){return 1===e?0:Math.floor(e)!==e?1:e%10>=2&&e%10<=4&&e%100<10?2:3}function p(e){return 1===e||e%10==1&&e%100>20?0:Math.floor(e)!==e||e%10>=2&&e%100>20||e%10>=2&&e%100<10?1:2}function h(e){return e%10==1&&e%100!=11}function g(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function f(e,t,n){var r,o,i,s=e.unitName,a=e.unitCount,l=n.spacer,d=n.maxDecimalPoints;r=g(n,"decimal")?n.decimal:g(t,"decimal")?t.decimal:".","digitReplacements"in n?o=n.digitReplacements:"_digitReplacements"in t&&(o=t._digitReplacements);var c=(void 0===d?a:Math.floor(a*Math.pow(10,d))/Math.pow(10,d)).toString();if(t._hideCountIf2&&2===a)i="",l="";else if(o){i="";for(var u=0;u<c.length;u++){var m=c[u];i+="."===m?r:o[m]}}else i=c.replace(".",r);var p,h=t[s];return p="function"==typeof h?h(a):h,t._numberFirst?p+l+i:i+l+p}function x(e,t){var n=function(e){var t=[e.language];if(g(e,"fallbacks")){if(!i(e.fallbacks)||!e.fallbacks.length)throw new Error("fallbacks must be an array with at least one element");t=t.concat(e.fallbacks)}for(var n=0;n<t.length;n++){var r=t[n];if(g(e.languages,r))return e.languages[r];if(g(a,r))return a[r]}throw new Error("No language found.")}(t);if(!e.length){var r=t.units;return f({unitName:r[r.length-1],unitCount:0},n,t)}var o,s=t.conjunction,l=t.serialComma;o=g(t,"delimiter")?t.delimiter:g(n,"delimiter")?n.delimiter:", ";for(var d=[],c=0;c<e.length;c++)d.push(f(e[c],n,t));return s&&1!==e.length?2===e.length?d.join(s):d.slice(0,-1).join(o)+(l?",":"")+s+d.slice(-1):d.join(o)}function y(e){var t=function(e,n){e=Math.abs(e);var r=o({},t,n||{}),i=function(e,t){var n,r,o,i,s=t.units,a=t.unitMeasures,l="largest"in t?t.largest:1/0;if(!s.length)return[];var d={};for(i=e,r=0;r<s.length;r++){var c=a[n=s[r]];o=r===s.length-1?i/c:Math.floor(i/c),d[n]=o,i-=o*c}if(t.round){var u=l;for(r=0;r<s.length;r++)if(0!==(o=d[n=s[r]])&&0==--u){for(var m=r+1;m<s.length;m++){var p=s[m],h=d[p];d[n]+=h*a[p]/a[n],d[p]=0}break}for(r=s.length-1;r>=0;r--)if(0!==(o=d[n=s[r]])){var g=Math.round(o);if(d[n]=g,0===r)break;var f=s[r-1],x=a[f],y=Math.floor(g*a[n]/x);if(!y)break;d[f]+=y,d[n]=0}}var b=[];for(r=0;r<s.length&&b.length<l;r++)(o=d[n=s[r]])&&b.push({unitName:n,unitCount:o});return b}(e,r);return x(i,r)};return o(t,{language:"en",spacer:" ",conjunction:"",serialComma:!0,units:["y","mo","w","d","h","m","s"],languages:{},round:!1,unitMeasures:{y:315576e5,mo:26298e5,w:6048e5,d:864e5,h:36e5,m:6e4,s:1e3,ms:1}},e)}var b=o(y({}),{getSupportedLanguages:function(){var e=[];for(var t in a)g(a,t)&&"gr"!==t&&e.push(t);return e},humanizer:y});void 0===(r=function(){return b}.call(t,n,t,e))||(e.exports=r)}()},552:e=>{e.exports='<p3xr-key-pager p3xr-controller="$ctrl"></p3xr-key-pager> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start center" layout-align="center center" md-colors="{ background: \'primary-300\' }"> <div flex style="padding-left:3px"> {{ $root.p3xr.strings.page.key.set.table.value }} </div> <div flex="5" style="text-align:right" class="p3xr-connected-readonly-filler"> <md-button class="md-icon-button" ng-click="$ctrl.addSet({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.add }}</md-tooltip> <md-icon>add</md-icon> </md-button> </div> </div> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start start" layout-align="center center" ng-repeat="value in $ctrl.pageBasedList() track by $index" ng-class="{ \'p3xr-list-key-odd-item\': $odd }" class="p3xr-list-key-item"> <div flex="95" style="padding-left:3px;align-items:flex-start;max-height:200px;overflow:auto!important" ng-click="$ctrl.editValue({  $index: $index + (($ctrl.page -1) * $root.p3xr.settings.keyPageCount  ),value: value, $event: $event})"> <span class="p3xr-pre" ng-if="$root.p3xr.settings.maxValueDisplay > 0 && value.length > $root.p3xr.settings.maxValueDisplay">{{ value.substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span> <span class="p3xr-pre" ng-if="$root.p3xr.settings.maxValueDisplay === 0 || value.length <= $root.p3xr.settings.maxValueDisplay || $root.p3xr.settings.maxValueDisplay === -1 ">{{ value }}</span> </div> <div flex="5" style="text-align:right"> <md-button class="md-icon-button md-warn" ng-click="$ctrl.deleteSetMember({ $index: $index + (($ctrl.page -1) * $root.p3xr.settings.keyPageCount ), $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.delete }}</md-tooltip> <md-icon>delete</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.showJson({ value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.jsonViewShow }}</md-tooltip> <md-icon>table_chart</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.copy({ $event: $event, value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.copy }}</md-tooltip> <md-icon>content_copy</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.downloadBuffer({ $index: $index + (($ctrl.page -1) * $root.p3xr.settings.keyPageCount  ), $event: $event})"> <md-icon>download</md-icon> <md-tooltip>{{ $root.p3xr.strings.intention.downloadBuffer }} </md-tooltip> </md-button> <md-button class="md-icon-button md-primary" ng-click="$ctrl.editValue({ $index: $index + (($ctrl.page -1) * $root.p3xr.settings.keyPageCount  ), value: value, $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.edit }}</md-tooltip> <md-icon>edit</md-icon> </md-button> </div> </div> '},559:e=>{e.exports='<md-dialog class="fullscreen-dialog"> <form novalidate name="p3xrConnectionForm" ng-submit="submit()"> <md-toolbar md-theme="{{ $root.p3xr.state.themeLayout }}" class="md-hue-3"> <div class="md-toolbar-tools"> <h2 flex md-truncate>{{ $root.p3xr.state.cfg.readonlyConnections ? $root.p3xr.strings.label.connectiondView : options.type === \'new\' ? $root.p3xr.strings.label.connectiondAdd : $root.p3xr.strings.label.connectiondEdit }}</h2> <md-button class="md-icon-button" ng-click="cancel()"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content md-theme="{{ $root.p3xr.state.theme }}"> <md-content> <div class="p3xr-padding"> <span ng-if="model.id"> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.label.id.id }}</label> <input required name="id" ng-model="model.id" disabled="disabled"> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.id.info}} </div> </span> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.name }}</label> <input required name="name" ng-model="model.name" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> <div ng-messages="p3xrConnectionForm.name.$error"> <div ng-message="required">{{ $root.p3xr.strings.form.error.required }}</div> </div> </md-input-container> <span ng-if="$root.p3xr.state.donated"> <md-switch ng-model="model.ssh" name="ssh" aria-label="" style="margin:0" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> {{ model.ssh ? $root.p3xr.strings.label.ssh.on : $root.p3xr.strings.label.ssh.off }} </md-switch> <fieldset ng-if="model.ssh"> <legend>SSH</legend> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.label.ssh.sshHost }}</label> <input required name="sshHost" ng-model="model.sshHost" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> <div ng-messages="p3xrConnectionForm.sshHost.$error"> <div ng-message="required">{{ $root.p3xr.strings.form.error.required }}</div> </div> </md-input-container> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.label.ssh.sshPort }}</label> <input required name="sshPort" type="number" min="1" max="65535" ng-model="model.sshPort" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> <div ng-messages="p3xrConnectionForm.sshPort.$error"> <div ng-message="required">{{ $root.p3xr.strings.form.error.required }}</div> </div> </md-input-container> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.label.ssh.sshUsername }}</label> <input required name="sshUsername" ng-model="model.sshUsername" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> <div ng-messages="p3xrConnectionForm.sshPort.$error"> <div ng-message="required">{{ $root.p3xr.strings.form.error.required }}</div> </div> </md-input-container> <md-input-container md-no-float class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.label.ssh.sshPassword }}</label> <input name="sshPassword" type="{{ !sshPasswordType ? \'password\' : \'text\'}}" ng-model="model.sshPassword" ng-disabled="$root.p3xr.state.cfg.readonlyConnections" autocomplete="off"> <md-icon ng-click="sshPasswordType = !sshPasswordType " ng-show="!$root.p3xr.state.cfg.readonlyConnections"> {{!sshPasswordType ? \'visibility\' : \'visibility_off\'}} </md-icon> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.passwordSecure }} </div> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.label.ssh.sshPrivateKey }}</label> <textarea name="sshPrivateKey" ng-model="model.sshPrivateKey" ng-disabled="$root.p3xr.state.cfg.readonlyConnections" autocomplete="off"></textarea> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.secureFeature }} </div> <br/> </fieldset> </span> <br/> <fieldset> <legend>Node 1</legend> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.host }}</label> <input name="host" ng-model="model.host" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> </md-input-container> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.port }}</label> <input name="port" type="number" min="1" max="65535" ng-model="model.port" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> <div ng-messages="p3xrConnectionForm.port.$error"> <div ng-message-exp="[\'min\', \'max\']"> {{ $root.p3xr.strings.form.error.port }} </div> </div> </md-input-container> <md-switch ng-model="model.askAuth" name="askAuth" aria-label="" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> {{ $root.p3xr.strings.label.askAuth }} </md-switch> <span> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.username }}</label> <input name="username" type="text" ng-model="model.username" ng-disabled="$root.p3xr.state.cfg.readonlyConnections" autocomplete="off"> </md-input-container> <md-input-container md-no-float class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.connection.label.password }}</label> <input name="password" type="{{ !passwordType ? \'password\' : \'text\'}}" ng-model="model.password" ng-disabled="$root.p3xr.state.cfg.readonlyConnections" autocomplete="off"> <md-icon ng-click="passwordType = !passwordType " ng-show="!$root.p3xr.state.cfg.readonlyConnections"> {{!passwordType ? \'visibility\' : \'visibility_off\'}} </md-icon> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.passwordSecure }} </div> <br/> </span> </fieldset> <br/> <span ng-if="$root.p3xr.state.donated"> <md-switch ng-model="model.readonly" name="readonly" aria-label="" style="margin:0" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> {{ model.readonly ? $root.p3xr.strings.label.readonly.on : $root.p3xr.strings.label.readonly.off }} </md-switch> </span> <br/> <div layout="row" layout-align="start center"> <div> <md-switch ng-model="model.cluster" name="cluster" aria-label="" style="margin:0" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> {{ model.cluster ? $root.p3xr.strings.label.cluster.on : $root.p3xr.strings.label.cluster.off }} </md-switch> </div> <div style="margin-left:15px"> <md-switch ng-model="model.sentinel" name="sentinel" aria-label="" style="margin:0" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> {{ model.sentinel ? $root.p3xr.strings.label.sentinel.on : $root.p3xr.strings.label.sentinel.off }} </md-switch> </div> <span flex></span> <div ng-if="(model.cluster === true || model.sentinel === true) && !$root.p3xr.state.cfg.readonlyConnections" ng-click="addNode()"> {{ $root.p3xr.strings.label.addNode }} <md-button class="md-fab md-primary md-mini"> <md-icon>add</md-icon> </md-button> </div> </div> <span ng-if="model.sentinel === true"> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.label.sentinel.name }}</label> <input required name="sentinelName" ng-model="model.sentinelName" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> <div ng-messages="p3xrConnectionForm.sentinelName.$error"> <div ng-message="required">{{ $root.p3xr.strings.form.error.required }}</div> </div> </md-input-container> </span> <div ng-if="(model.cluster === true || model.sentinel === true)"> <div ng-repeat="node in model.nodes"> <fieldset> <legend>Node {{$index + 2}}</legend> <div style="float:right" ng-if="!$root.p3xr.state.cfg.readonlyConnections"> <md-button class="md-fab md-warn md-mini" ng-click="removeNode($event, $index)"> <md-tooltip>{{ $root.p3xr.strings.confirm.deleteConnectionText }}</md-tooltip> <md-icon>delete</md-icon> </md-button> <md-button class="md-fab md-primary md-mini" ng-click="addNode($index)"> <md-tooltip>{{ $root.p3xr.strings.label.addNode }}</md-tooltip> <md-icon>add</md-icon> </md-button> </div> <br/> <span ng-if="node.id"> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.label.id.nodeId }}</label> <input ng-model="node.id" disabled="disabled"> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.id.info}} </div> </span> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.host }}</label> <input name="host{{$index}}" ng-model="node.host" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> </md-input-container> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.port }}</label> <input required name="port{{$index}}" type="number" min="1" max="65535" ng-model="node.port" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> <div ng-messages="p3xrConnectionForm[\'port\' +  $index].$error"> <div ng-message-exp="[\'min\', \'max\']"> {{ $root.p3xr.strings.form.error.port }} </div> <div ng-message="required">{{ $root.p3xr.strings.form.error.required }}</div> </div> </md-input-container> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.username }}</label> <input name="username{{$index}}" type="text" ng-model="node.username" ng-disabled="$root.p3xr.state.cfg.readonlyConnections" autocomplete="off"> </md-input-container> <md-input-container md-no-float class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.connection.label.password }}</label> <input name="password{{$index}}" type="{{ !$scope[\'password\' + $index] ? \'password\' : \'text\'}}" ng-model="node.password" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> <md-icon ng-click="$scope[\'password\' + $index] = !$scope[\'password\' + $index] " ng-show="!$root.p3xr.state.cfg.readonlyConnections"> {{!$scope[\'password\' + $index] ? \'visibility\' : \'visibility_off\'}} </md-icon> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.passwordSecure }} </div> </fieldset> <div ng-if="$last !== true" style="margin-bottom:16px"> &nbsp; </div> <div style="clear:both"></div> </div> </div> <md-switch ng-model="model.tlsWithoutCert" name="tlsWithoutCert" aria-label="" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> {{ $root.p3xr.strings.label.tlsWithoutCert }} </md-switch> <md-switch ng-model="model.tlsRejectUnauthorized" name="tlsRejectUnauthorized" aria-label="" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> {{ $root.p3xr.strings.label.tlsRejectUnauthorized }} </md-switch> <div ng-if="model.tlsWithoutCert !== true" style="padding-top:4px"> <fieldset> <legend>TLS</legend> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>TLS (redis.crt)</label> <textarea name="tlsCrt" ng-model="model.tlsCrt" ng-disabled="$root.p3xr.state.cfg.readonlyConnections" autocomplete="off"></textarea> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.tlsSecure }} </div> <br/> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>TLS (redis.key)</label> <textarea name="tlsKey" ng-model="model.tlsKey" ng-disabled="$root.p3xr.state.cfg.readonlyConnections" autocomplete="off"></textarea> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.tlsSecure }} </div> <br/> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>TLS (ca.crt)</label> <textarea name="tlsCa" ng-model="model.tlsCa" ng-disabled="$root.p3xr.state.cfg.readonlyConnections" autocomplete="off"></textarea> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.tlsSecure }} </div> <br/> </fieldset> </div> </div> </md-content> </md-dialog-content> <md-dialog-actions md-theme="{{ $root.p3xr.state.theme }}" class="p3xr-dialog-connection-actions"> <md-button class="md-raised md-warn" ng-click="cancel()" md-autofocus> <md-icon>cancel</md-icon> <span ng-if="$root.$mdMedia(\'(min-width: 699px)\')">{{ $root.p3xr.strings.intention.cancel }}</span> <md-tooltip ng-if="$root.$mdMedia(\'(max-width: 699px)\')" md-direction="top">{{ $root.p3xr.strings.intention.cancel }} </md-tooltip> </md-button> <span md-theme="{{ $root.p3xr.state.themeCommon }}"> <md-button class="md-raised md-primary" ng-click="testConnection($event)"> <i class="fas fa-plug"></i> {{ $root.p3xr.strings.intention.testConnection }} </md-button> </span> <md-button class="md-raised md-primary" type="submit" ng-if="!$root.p3xr.state.cfg.readonlyConnections"> <md-icon>{{ options.type === \'new\' ? \'add\' : \'save\' }}</md-icon> {{ options.type === \'new\' ? $root.p3xr.strings.intention.add : $root.p3xr.strings.intention.save }} </md-button> </md-dialog-actions> </form> </md-dialog> '},562:e=>{e.exports=function(e,t){for(var n=-1,r=t.length,o=e.length;++n<r;)e[o+n]=t[n];return e}},567:e=>{var t="\\ud800-\\udfff",n="\\u2700-\\u27bf",r="a-z\\xdf-\\xf6\\xf8-\\xff",o="A-Z\\xc0-\\xd6\\xd8-\\xde",i="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",s="["+i+"]",a="\\d+",l="["+n+"]",d="["+r+"]",c="[^"+t+i+a+n+r+o+"]",u="(?:\\ud83c[\\udde6-\\uddff]){2}",m="[\\ud800-\\udbff][\\udc00-\\udfff]",p="["+o+"]",h="(?:"+d+"|"+c+")",g="(?:"+p+"|"+c+")",f="(?:['’](?:d|ll|m|re|s|t|ve))?",x="(?:['’](?:D|LL|M|RE|S|T|VE))?",y="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",b="[\\ufe0e\\ufe0f]?",v=b+y+("(?:\\u200d(?:"+["[^"+t+"]",u,m].join("|")+")"+b+y+")*"),T="(?:"+[l,u,m].join("|")+")"+v,S=RegExp([p+"?"+d+"+"+f+"(?="+[s,p,"$"].join("|")+")",g+"+"+x+"(?="+[s,p+h,"$"].join("|")+")",p+"?"+h+"+"+f,p+"+"+x,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",a,T].join("|"),"g");e.exports=function(e){return e.match(S)||[]}},663:(e,t,n)=>{var r=n(6929);e.exports=function(e){return r(this,e).has(e)}},695:(e,t,n)=>{var r=n(7230),o=n(5661),i=n(9102),s=n(5963),a=n(2850),l=n(6522),d=n(1543),c="[object Map]",u="[object Promise]",m="[object Set]",p="[object WeakMap]",h="[object DataView]",g=d(r),f=d(o),x=d(i),y=d(s),b=d(a),v=l;(r&&v(new r(new ArrayBuffer(1)))!=h||o&&v(new o)!=c||i&&v(i.resolve())!=u||s&&v(new s)!=m||a&&v(new a)!=p)&&(v=function(e){var t=l(e),n="[object Object]"==t?e.constructor:void 0,r=n?d(n):"";if(r)switch(r){case g:return h;case f:return c;case x:return u;case y:return m;case b:return p}return t}),e.exports=v},733:(e,t,n)=>{p3xr.ng.component("p3xrLayout",{template:n(8690),controller:["p3xrTheme","$rootScope","p3xrSocket","p3xrCommon","$state","$cookies","$timeout","$scope","p3xrDialogAskAuthorization",function(e,t,r,o,i,s,a,l,d){let c;this.getThemeKey=e=>{if(void 0===c){const t=Object.keys(e);c=t.sort(((t,n)=>e[t].order-e[n].order))}return c},this.getVersionColor=()=>"p3xrThemeMatrix"===e.getCurrentThemeName()?"grey-900":"background-A100",this.setTheme=t=>{e.setTheme(e.generateThemeName(t))},this.openLink={github:()=>{location.href="https://github.com/patrikx3/redis-ui"},githubRelease:()=>{location.href="https://github.com/patrikx3/redis-ui/releases"},githubChangelog:()=>{location.href="https://github.com/patrikx3/redis-ui/blob/master/change-log.md#change-log"},donate:()=>{location.href="https://www.paypal.me/patrikx3"}};const u=n(6036);let m;Object.defineProperty(this,"themeSelectedKey",{get:()=>{let e=p3xr.state.theme;return e=e.slice(9),e=u(e),e}});const p=()=>{m.css("left",document.documentElement.clientWidth/2-m.outerWidth()/2+"px")};this.reducedFunctionalty=()=>{o.confirm({disableCancel:!0,message:p3xr.strings.label.tooManyKeys({count:t.p3xr.state.keysRaw.length,maxLightKeysCount:p3xr.settings.maxLightKeysCount})})},this.$onInit=()=>{m=$("#p3xr-layout-reduced"),p(),$window.on("resize",p);const e=s.getObject(p3xr.settings.connectInfo.cookieName);void 0!==e&&this.connect(e),a((()=>{n.g.p3xrSetLanguage=e=>{t.$apply((()=>{t.isElectron=!0,this.setLanguage(e)}))},n.g.p3xrSetMenu=e=>{t.$apply((()=>{t.isElectron=!0,i.go(e)}))}}),3e3)},this.$onDestroy=function(){$window.off("resize",p)},n.g.p3xr.isBot()||t.$on("$locationChangeSuccess",(async function(e,t,n){const r=new URL(t);r.pathname.toLowerCase().startsWith("/main/key/")?window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/main/key"}):(console.log("$locationChangeSuccess gtag",r.pathname),window.gtag("config",p3xr.settings.googleAnalytics,{page_path:r.pathname}))})),l.$on("p3xr-connect",((e,{connection:t})=>{this.connect(t,!0)})),l.$on("p3xr-disconnect",(e=>{this.disconnect()})),this.connect=async(e,l=!1)=>{console.time("connect"),e=n.g.p3xr.clone(e);try{const n=location.pathname.split("/");n.shift();let c=n.join(".");""===c&&(c="main");const u=s.get(p3xr.settings.connection.getCookieNameCurrentDatabase(e.id));if(!0===e.askAuth){const t=await d.show({$event:void 0});e.username=void 0,e.password=void 0,t.username&&(e.username=t.username),t.password&&(e.password=t.password)}p3xr.ui.overlay.show({message:p3xr.strings.title.connectingRedis});const m=await r.request({action:"connection-connect",payload:{connection:e,db:u}});t.p3xr.state.page=1,t.p3xr.state.monitor=!1,p3xr.state.dbsize=m.dbsize;let p=0;const h=[];for(;p<m.databases;)h.push(p++);p3xr.state.commands=[],Object.keys(m.commands).forEach((e=>{p3xr.state.commands.push(m.commands[e][0])})),p3xr.state.commands.sort(),t.p3xr.state.databaseIndexes=h,t.p3xr.state.connection=e,o.loadRedisInfoResponse({response:m}),s.putObject(p3xr.settings.connectInfo.cookieName,e,{expires:p3xr.settings.cookieExpiry}),!0===l&&c.startsWith("main.key")&&(c="main"),a((()=>{"main"===c?i.go("main.statistics"):c.startsWith("main.key")?i.go("main.key",{key:decodeURIComponent(n[2].replace(/~/g,"%"))}):i.go(c)}),p3xr.settings.debounce)}catch(e){s.remove(p3xr.settings.connectInfo.cookieName),t.p3xr.state.connection=void 0,o.generalHandleError(e)}finally{p3xr.ui.overlay.hide()}console.timeEnd("connect")},this.disconnect=async()=>{try{s.remove(p3xr.settings.connectInfo.cookieName),await r.request({action:"connection-disconnect",payload:{connectionId:p3xr.state.connection.id}}),t.p3xr.state.connection=void 0}catch(e){o.generalHandleError(e)}finally{i.go("settings")}},Object.defineProperty(this,"connectionName",{get:()=>void 0!==t.p3xr.state.connection?t.p3xr.strings.label.connected({name:t.p3xr.state.connection.name}):t.p3xr.strings.intention.connect}),this.isMain=()=>i.current.name.startsWith("main"),this.isElectronInitialized=!1,this.setLanguage=async e=>{try{t.p3xr.settings.language.current=e,t.isElectron&&(await r.request({action:"set-language",payload:{key:e}}),this.isElectronInitialized=!0,l.$digest())}catch(e){o.generalHandleError(e)}}}]})},747:(e,t,n)=>{var r=n(6060);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},784:e=>{var t=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;e.exports=function(e){return t.test(e)}},874:(e,t,n)=>{var r=n(9513);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},889:e=>{e.exports=function(e,t){return function(n){return e(t(n))}}},905:(e,t,n)=>{var r=n(6711),o=Object.prototype,i=o.hasOwnProperty,s=o.toString,a=r?r.toStringTag:void 0;e.exports=function(e){var t=i.call(e,a),n=e[a];try{e[a]=void 0;var r=!0}catch(e){}var o=s.call(e);return r&&(t?e[a]=n:delete e[a]),o}},951:e=>{e.exports=function(e){return function(t,n,r){for(var o=-1,i=Object(t),s=r(t),a=s.length;a--;){var l=s[e?a:++o];if(!1===n(i[l],l,i))break}return t}}},968:(e,t,n)=>{n.g.p3xr.random=()=>(Math.floor(9e16*Math.random())+1e16).toString(16)},1013:e=>{e.exports=' <div ng-if="$ctrl.loading" layout="row" layout-align="center center" flex style="min-height:100%"> <div> <md-progress-circular md-mode="indeterminate"></md-progress-circular> </div> </div> <div ng-if="!$ctrl.loading"> <div style="text-align:right"> <md-button class="md-button md-raised md-accent" ng-click="$ctrl.addKey({ $event: $event, key: $ctrl.$stateParams.key})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-icon>add</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.addKey }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.addKey }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-warn" ng-click="$ctrl.delete({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-icon>delete</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.delete }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.delete }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.setTtl({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-icon>timer</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.ttl }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.ttl }} </md-tooltip> <md-tooltip ng-if="$root.$mdMedia(\'gt-sm\')">{{ $root.p3xr.strings.label.ttlTitle }}</md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.rename({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-icon>fingerprint</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.rename }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.rename }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-accent" ng-click="$ctrl.refresh()"> <md-icon>refresh</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.reloadKey }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\')" md-direction="bottom">{{ $root.p3xr.strings.intention.reloadKey }} </md-tooltip> </md-button> </div> <md-list flex md-theme="{{ $root.p3xr.state.theme}}"> <md-divider></md-divider> <md-list-item ng-click="$ctrl.rename({ $event: $event})"> <p>{{ $root.p3xr.strings.page.key.label.key }}:&nbsp;</p> <span class="p3xr-typography-ellipsis" title="{{ $root.p3xr.ui.htmlEncode($ctrl.$stateParams.key) }}">{{ $ctrl.$stateParams.key }}</span> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.setTtl({ $event: $event})" ng-if="$ctrl.response.ttl === -1"> <p title="{{ $root.p3xr.strings.page.key.label.ttlTitle  }}"><span class="p3xr-main-key-label-key-title">{{ $root.p3xr.strings.page.key.label.ttl }}</span>: </p> <span ng-if="$ctrl.response.ttl === -1"> {{ $root.p3xr.strings.page.key.label.ttlNotExpire }} </span> </md-list-item> <md-list-item class="md-2-line" ng-click="$ctrl.setTtl({ $event: $event})" ng-if="$ctrl.response.ttl !== -1"> <div class="md-list-item-text"> <h3> <div layout="row" flex> <div flex class="p3xr-main-key-label-key-title"> <span>{{ $root.p3xr.strings.page.key.label.ttl }}</span>: </div> <div> <span ng-if="$ctrl.response.ttl == -1"> {{ $root.p3xr.strings.page.key.label.ttlNotExpire }} </span> <span ng-if="$ctrl.response.ttl != -1"> {{ $ctrl.response.ttl }} </span> </div> </div> </h3> <p ng-click="$ctrl.setTtl({ $event: $event})" style="text-align:right"> <span style="opacity:.5;font-weight:400" ng-click="$ctrl.setTtl({ $event: $event})"> <span id="p3xr-main-key-ttl-counter"></span> </span> </p> </div> </md-list-item> <md-divider></md-divider> <md-list-item> <p>{{ $root.p3xr.strings.page.key.label.type }}:</p> {{ $root.p3xr.strings.redisTypes[$ctrl.response.type] }} </md-list-item> <md-divider></md-divider> <md-list-item> <p>{{ $root.p3xr.strings.page.key.label.encoding }}:</p> {{ $ctrl.response.encoding }} </md-list-item> <md-divider></md-divider> <md-list-item> <p>{{ $root.p3xr.strings.page.key.label.length }}:</p> <span style="opacity:.5">{{ $ctrl.charactersPrettyBytes($ctrl.response.size) }}&nbsp;</span> {{ $ctrl.response.size }}&nbsp;{{ $root.p3xr.strings.page.key.label.lengthString }} <span ng-if="$ctrl.response.length">, {{ $ctrl.response.length }} {{ $root.p3xr.strings.page.key.label.lengthItem }}</span> </md-list-item> </md-list> <md-divider></md-divider> <span ng-switch="" on="$ctrl.response.type"> <p3xr-main-key-string ng-switch-when="string" p3xr-response="$ctrl.response" p3xr-value="$ctrl.response.value" p3xr-value-buffer="$ctrl.response.valueBuffer" p3xr-key="$ctrl.$stateParams.key"></p3xr-main-key-string> <p3xr-main-key-list ng-switch-when="list" p3xr-response="$ctrl.response" p3xr-value="$ctrl.response.value" p3xr-value-buffer="$ctrl.response.valueBuffer" p3xr-key="$ctrl.$stateParams.key"></p3xr-main-key-list> <p3xr-main-key-hash ng-switch-when="hash" p3xr-response="$ctrl.response" p3xr-value="$ctrl.response.value" p3xr-value-buffer="$ctrl.response.valueBuffer" p3xr-key="$ctrl.$stateParams.key"></p3xr-main-key-hash> <p3xr-main-key-set ng-switch-when="set" p3xr-response="$ctrl.response" p3xr-value="$ctrl.response.value" p3xr-value-buffer="$ctrl.response.valueBuffer" p3xr-key="$ctrl.$stateParams.key"></p3xr-main-key-set> <p3xr-main-key-zset ng-switch-when="zset" p3xr-response="$ctrl.response" p3xr-value="$ctrl.response.value" p3xr-value-buffer="$ctrl.response.valueBuffer" p3xr-key="$ctrl.$stateParams.key"></p3xr-main-key-zset> <p3xr-main-key-stream ng-switch-when="stream" p3xr-response="$ctrl.response" p3xr-value="$ctrl.response.value" p3xr-value-buffer="$ctrl.response.valueBuffer" p3xr-key="$ctrl.$stateParams.key"></p3xr-main-key-stream> </span>  </div> '},1066:e=>{e.exports='<md-dialog style="min-width:320px"> <form novalidate name="p3xrAskAuthorization" ng-submit="submit()"> <md-toolbar md-theme="{{ $root.p3xr.state.themeLayout }}" class="md-hue-3"> <div class="md-toolbar-tools"> <h2 flex md-truncate>{{ $root.p3xr.strings.label.askAuth}}</h2> <md-button class="md-icon-button" ng-click="cancel()"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content md-theme="{{ $root.p3xr.state.theme }}"> <md-content class="p3xr-padding"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.username }}</label> <input name="username" type="text" ng-model="model.username" autocomplete="off"> </md-input-container> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.password }}</label> <input name="password" type="password" ng-model="model.password" autocomplete="off"> </md-input-container> </md-content> </md-dialog-content> <md-dialog-actions md-theme="{{ $root.p3xr.state.theme }}"> <md-button class="md-raised md-warn" ng-click="cancel()" md-autofocus> <md-icon>cancel</md-icon> {{ $root.p3xr.strings.intention.cancel }} </md-button> <md-button class="md-raised md-primary" type="submit"> <md-icon>done</md-icon> {{ $root.p3xr.strings.intention.ok }} </md-button> </md-dialog-actions> </form> </md-dialog> '},1074:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},1127:e=>{e.exports=function(e,n,o){o=Object.assign({},t,o||{}),("number"==typeof e||e.match(/^[-+]?[0-9.]+$/g))&&(e=parseInt(e)+"ms");let i=0;const s=function(e){const t={ms:.001,s:1,m:60,h:3600};return t.d=e.hoursPerDay*t.h,t.w=e.daysPerWeek*t.d,t.mth=e.daysPerYear/e.monthsPerYear*t.d,t.y=e.daysPerYear*t.d,t}(o),a=e.toLowerCase().replace(/[^.\w+-]+/g,"").match(/[-+]?[0-9.]+[a-z]+/g);if(null===a)throw new Error(`The value [${e}] could not be parsed by timestring`);if(a.forEach((e=>{const t=e.match(/[0-9.]+/g)[0],n=e.match(/[a-z]+/g)[0];i+=function(e,t,n){return e*n[r(t)]}(t,n,s)})),n)return function(e,t,n){return e/n[r(t)]}(i,n,s);return i};const t={hoursPerDay:24,daysPerWeek:7,weeksPerMonth:4,monthsPerYear:12,daysPerYear:365.25},n={ms:["ms","milli","millisecond","milliseconds"],s:["s","sec","secs","second","seconds"],m:["m","min","mins","minute","minutes"],h:["h","hr","hrs","hour","hours"],d:["d","day","days"],w:["w","week","weeks"],mth:["mon","mth","mths","month","months"],y:["y","yr","yrs","year","years"]};function r(e){for(const t of Object.keys(n))if(n[t].indexOf(e)>-1)return t;throw new Error(`The unit [${e}] is not supported by timestring`)}},1161:(e,t,n)=>{var r=n(4767);e.exports=function(e){return r(this.__data__,e)>-1}},1171:e=>{e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},1182:e=>{e.exports='<p3xr-key-pager p3xr-controller="$ctrl"></p3xr-key-pager> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start center" layout-align="center center" md-colors="{ background: \'primary-300\' }"> <div flex="20"><span ng-if="!$root.$mdMedia(\'xs\')">&nbsp;</span>{{ $root.p3xr.strings.page.key.hash.table.hashkey }}</div> <div flex="60"> {{ $root.p3xr.strings.page.key.hash.table.value }} </div> <div flex="20" style="text-align:right" class="p3xr-connected-readonly-filler"> <md-button class="md-icon-button" ng-click="$ctrl.addHash({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.add }}</md-tooltip> <md-icon>add</md-icon> </md-button> </div> </div> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start start" layout-align="center center" ng-repeat="(key, value) in $ctrl.pageBasedList()" ng-class="{ \'p3xr-list-key-odd-item\': $odd }" class="p3xr-list-key-item"> <div flex="20" ng-click="$ctrl.editValue({ hashKey: key, value: value, $event: $event})"><span ng-if="!$root.$mdMedia(\'xs\')">&nbsp;</span><span ng-if="$root.p3xr.settings.maxValueDisplay > 0 && key.length > $root.p3xr.settings.maxValueDisplay">{{ key.substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span><span ng-if="$root.p3xr.settings.maxValueDisplay === 0 || key.length <= $root.p3xr.settings.maxValueDisplay || $root.p3xr.settings.maxValueDisplay === -1 ">{{ key }}</span></div> <div flex="60" style="overflow:auto;align-items:flex-start;max-height:200px" ng-click="$ctrl.editValue({ hashKey: key, value: value, $event: $event})"> <span class="p3xr-pre" ng-if="$root.p3xr.settings.maxValueDisplay > 0 && value.length > $root.p3xr.settings.maxValueDisplay">{{ value.substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span> <span class="p3xr-pre" ng-if="$root.p3xr.settings.maxValueDisplay === 0 || value.length <= $root.p3xr.settings.maxValueDisplay || $root.p3xr.settings.maxValueDisplay === -1 ">{{ value }}</span> </div> <div flex="20" style="text-align:right"> <md-button class="md-icon-button md-warn" ng-click="$ctrl.deleteHashKey({ hashKey: key, $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.delete }}</md-tooltip> <md-icon>delete</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.showJson({ value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.jsonViewShow }}</md-tooltip> <md-icon>table_chart</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.copy({ $event: $event, value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.copy }}</md-tooltip> <md-icon>content_copy</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.downloadBuffer({ key: key, $event: $event})"> <md-icon>download</md-icon> <md-tooltip>{{ $root.p3xr.strings.intention.downloadBuffer }} </md-tooltip> </md-button> <md-button class="md-icon-button md-primary" ng-click="$ctrl.editValue({ hashKey: key, value: value, $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.edit }}</md-tooltip> <md-icon>edit</md-icon> </md-button> </div> </div> '},1214:(e,t,n)=>{var r=n(384);e.exports=function(e,t,n){var o=null==e?void 0:r(e,t);return void 0===o?n:o}},1262:(e,t,n)=>{e=n.nmd(e);var r=n(9107),o=n(2125),i=t&&!t.nodeType&&t,s=i&&e&&!e.nodeType&&e,a=s&&s.exports===i?r.Buffer:void 0,l=(a?a.isBuffer:void 0)||o;e.exports=l},1303:(e,t,n)=>{"use strict";n.r(t)},1338:()=>{p3xr.state={treeDividers:[],donated:!1,theme:void 0,connection:void 0,currentDatabase:void 0,redisChanged:!1,databaseIndexes:[0],connections:[],redisConnections:{},keys:[],cfg:void 0,version:void 0,keysInfo:void 0,failed:!1,keysRaw:[],search:"",commands:[],reducedFunctions:!1,dbsize:void 0,monitor:!1,monitorPattern:"*"},Object.defineProperty(p3xr.state,"themeLayout",{get:()=>p3xr.state.theme+"Layout"}),Object.defineProperty(p3xr.state,"themeCommon",{get:()=>p3xr.state.theme+"Common"}),p3xr.connectionsReset=()=>{p3xr.state.connections={list:[]}},p3xr.connectionsReset()},1398:(e,t,n)=>{var r,o=n(3887),i=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!i&&i in e}},1400:()=>{p3xr.theme.darkoBluo=function(e){p3xr.theme.darkoBluo.order=5,e.theme("p3xrThemeDarkoBluoLayout").primaryPalette("indigo",{default:"900","hue-1":"500","hue-2":"700","hue-3":"900"}).accentPalette("indigo",{default:"600","hue-1":"50","hue-2":"700","hue-3":"900"}).warnPalette("indigo").backgroundPalette("grey",{default:"900","hue-1":"900","hue-2":"500","hue-3":"100"}),e.theme("p3xrThemeDarkoBluoLayout").dark(),e.theme("p3xrThemeDarkoBluo").primaryPalette("indigo",{default:"300","hue-1":"50","hue-2":"700","hue-3":"900"}).accentPalette("blue").warnPalette("orange").backgroundPalette("grey"),e.theme("p3xrThemeDarkoBluo").dark(),e.theme("p3xrThemeDarkoBluoCommon").primaryPalette("green").accentPalette("grey").warnPalette("light-blue").backgroundPalette("indigo",{default:"700"}),e.theme("p3xrThemeDarkoBluoCommon").dark()}},1406:(e,t,n)=>{var r=n(9107);e.exports=function(){return r.Date.now()}},1441:(e,t,n)=>{var r=n(4767);e.exports=function(e,t){var n=this.__data__,o=r(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}},1451:e=>{e.exports='<treecontrol ng-if="$root.keysTree.length > 0 && $ctrl.isEnabled" class="{{ $ctrl.getTreeTheme() }} p3xr-main-tree" tree-model="$root.keysTree" options="$ctrl.keysTreeOptions" expanded-nodes="$root.expandedNodes" on-selection="$ctrl.selectTreeNode(node, selected, $parentNode, $index, $first, $middle, $last, $odd, $even, $path)" on-node-toggle="$ctrl.showToggle(node, expanded, $parentNode, $index, $first, $middle, $last, $odd, $even, $path)"> <span in-view="$ctrl.displayNode(node, $inview)" ng-if="!node.$inview" style="display:inline-block;width:89%;margin-left:auto;margin-right:auto;background-color:rgba(128,128,128,.5);height:2px;margin-bottom:10px;margin-top:10px"></span> <span ng-if="node.$inview" ng-mouseover="$ctrl.hover({node})" ng-mouseleave="node.show = false"> <span data-p3xr-tree-key="{{$ctrl.extractNodeKey(node)}}"> <md-tooltip md-direction="top">{{ $ctrl.extractNodeTooltip(node) }}</md-tooltip> <label class="p3xr-main-tree-node" ng-mouseover="$ctrl.hover({node})" ng-mouseleave="node.showTree = false"> <span ng-switch="node.keysInfo.type"> <i ng-switch-when="hash" class="p3xr-main-treecontrol-node-icon fas fa-hashtag" aria-hidden="true"></i> <i ng-switch-when="list" class="p3xr-main-treecontrol-node-icon fas fa-list-ol" aria-hidden="true"></i> <i ng-switch-when="set" class="p3xr-main-treecontrol-node-icon fas fa-list" aria-hidden="true"></i> <i ng-switch-when="string" class="p3xr-main-treecontrol-node-icon fas fa-ellipsis-h" aria-hidden="true"></i> <i ng-switch-when="zset" class="p3xr-main-treecontrol-node-icon fas fa-chart-line" aria-hidden="true"></i> <i ng-switch-when="stream" class="p3xr-main-treecontrol-node-icon fas fa-stream" aria-hidden="true"></i> </span> <span class="p3xr-main-tree-node-label">{{node.label}}</span><span class="p3xr-main-tree-node-count" ng-if="node.type === \'folder\'">{{$root.p3xr.settings.redisTreeDivider}}* <span style="opacity:.5">({{node.childCount}})</span></span> <span class="p3xr-main-tree-node-count" ng-if="node.type !== \'folder\' && node.keysInfo.type !== \'string\' && node.keysInfo !== undefined">({{node.keysInfo.length}})</span> <span ng-if="node.type === \'folder\'" ng-show="node.showTree" style="position:relative;top:-1px"> <span style="position:relative;top:-1px"> <md-tooltip md-direction="right">{{ $root.p3xr.strings.intention.addKey }}</md-tooltip> <md-icon ng-click="$ctrl.addKey({event: $event, node: node})" md-theme="{{ $root.p3xr.state.themeCommon }}" class="md-warn p3xr-main-treecontrol-folder-icon">add</md-icon> </span> </span> </label> </span> <span ng-show="node.show" style="position:relative;top:-1px"> <span ng-if="node.type === \'folder\'"> <md-tooltip md-direction="right">{{ $root.p3xr.strings.confirm.deleteAllKeys({key: node.key}) }}</md-tooltip> <md-icon ng-click="$ctrl.deleteTree({event: $event, node: node})" class="md-warn p3xr-main-treecontrol-folder-icon">close</md-icon> </span> <span ng-if="node.type === \'element\'"> <md-tooltip md-direction="right">{{ $root.p3xr.strings.intention.delete }}</md-tooltip> <md-icon ng-click="$ctrl.delete({event: $event, key: node.key })" class="md-warn p3xr-main-treecontrol-folder-icon">close</md-icon> </span> <span style="position:relative;top:-1px"> <md-tooltip md-direction="right">{{ $root.p3xr.strings.intention.addKey }}</md-tooltip> <md-icon ng-click="$ctrl.addKey({event: $event, node: node})" md-theme="{{ $root.p3xr.state.themeCommon }}" class="md-warn p3xr-main-treecontrol-folder-icon">add</md-icon> </span> </span> </span> </treecontrol> '},1505:(e,t,n)=>{var r=n(1641),o=n(9854),i=n(7585);e.exports=function(e,t,n,s,a,l){var d=1&n,c=e.length,u=t.length;if(c!=u&&!(d&&u>c))return!1;var m=l.get(e),p=l.get(t);if(m&&p)return m==t&&p==e;var h=-1,g=!0,f=2&n?new r:void 0;for(l.set(e,t),l.set(t,e);++h<c;){var x=e[h],y=t[h];if(s)var b=d?s(y,x,h,t,e,l):s(x,y,h,e,t,l);if(void 0!==b){if(b)continue;g=!1;break}if(f){if(!o(t,(function(e,t){if(!i(f,t)&&(x===e||a(x,e,n,s,l)))return f.push(t)}))){g=!1;break}}else if(x!==y&&!a(x,y,n,s,l)){g=!1;break}}return l.delete(e),l.delete(t),g}},1543:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},1563:e=>{e.exports=function(e){return this.__data__.has(e)}},1595:(e,t,n)=>{var r=n(951)();e.exports=r},1641:(e,t,n)=>{var r=n(3287),o=n(2486),i=n(9361);function s(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t<n;)this.add(e[t])}s.prototype.add=s.prototype.push=o,s.prototype.has=i,e.exports=s},1655:function(e,t,n){(e=n.nmd(e)).exports=function(){"use strict";var t,n;function r(){return t.apply(null,arguments)}function o(e){t=e}function i(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function s(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function a(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function l(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(a(e,t))return!1;return!0}function d(e){return void 0===e}function c(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function u(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function m(e,t){var n,r=[],o=e.length;for(n=0;n<o;++n)r.push(t(e[n],n));return r}function p(e,t){for(var n in t)a(t,n)&&(e[n]=t[n]);return a(t,"toString")&&(e.toString=t.toString),a(t,"valueOf")&&(e.valueOf=t.valueOf),e}function h(e,t,n,r){return zn(e,t,n,r,!0).utc()}function g(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function f(e){return null==e._pf&&(e._pf=g()),e._pf}function x(e){var t=null,r=!1,o=e._d&&!isNaN(e._d.getTime());return o&&(t=f(e),r=n.call(t.parsedDateParts,(function(e){return null!=e})),o=t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&r),e._strict&&(o=o&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour)),null!=Object.isFrozen&&Object.isFrozen(e)?o:(e._isValid=o,e._isValid)}function y(e){var t=h(NaN);return null!=e?p(f(t),e):f(t).userInvalidated=!0,t}n=Array.prototype.some?Array.prototype.some:function(e){var t,n=Object(this),r=n.length>>>0;for(t=0;t<r;t++)if(t in n&&e.call(this,n[t],t,n))return!0;return!1};var b=r.momentProperties=[],v=!1;function T(e,t){var n,r,o,i=b.length;if(d(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),d(t._i)||(e._i=t._i),d(t._f)||(e._f=t._f),d(t._l)||(e._l=t._l),d(t._strict)||(e._strict=t._strict),d(t._tzm)||(e._tzm=t._tzm),d(t._isUTC)||(e._isUTC=t._isUTC),d(t._offset)||(e._offset=t._offset),d(t._pf)||(e._pf=f(t)),d(t._locale)||(e._locale=t._locale),i>0)for(n=0;n<i;n++)d(o=t[r=b[n]])||(e[r]=o);return e}function S(e){T(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===v&&(v=!0,r.updateOffset(this),v=!1)}function $(e){return e instanceof S||null!=e&&null!=e._isAMomentObject}function k(e){!1===r.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function w(e,t){var n=!0;return p((function(){if(null!=r.deprecationHandler&&r.deprecationHandler(null,e),n){var o,i,s,l=[],d=arguments.length;for(i=0;i<d;i++){if(o="","object"==typeof arguments[i]){for(s in o+="\n["+i+"] ",arguments[0])a(arguments[0],s)&&(o+=s+": "+arguments[0][s]+", ");o=o.slice(0,-2)}else o=arguments[i];l.push(o)}k(e+"\nArguments: "+Array.prototype.slice.call(l).join("")+"\n"+(new Error).stack),n=!1}return t.apply(this,arguments)}),t)}var M,P={};function C(e,t){null!=r.deprecationHandler&&r.deprecationHandler(e,t),P[e]||(k(t),P[e]=!0)}function A(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function D(e){var t,n;for(n in e)a(e,n)&&(A(t=e[n])?this[n]=t:this["_"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function _(e,t){var n,r=p({},e);for(n in t)a(t,n)&&(s(e[n])&&s(t[n])?(r[n]={},p(r[n],e[n]),p(r[n],t[n])):null!=t[n]?r[n]=t[n]:delete r[n]);for(n in e)a(e,n)&&!a(t,n)&&s(e[n])&&(r[n]=p({},r[n]));return r}function G(e){null!=e&&this.set(e)}r.suppressDeprecationWarnings=!1,r.deprecationHandler=null,M=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)a(e,t)&&n.push(t);return n};var E={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function B(e,t,n){var r=this._calendar[e]||this._calendar.sameElse;return A(r)?r.call(t,n):r}function H(e,t,n){var r=""+Math.abs(e),o=t-r.length;return(e>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,o)).toString().substr(1)+r}var I=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,O=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,N={},V={};function R(e,t,n,r){var o=r;"string"==typeof r&&(o=function(){return this[r]()}),e&&(V[e]=o),t&&(V[t[0]]=function(){return H(o.apply(this,arguments),t[1],t[2])}),n&&(V[n]=function(){return this.localeData().ordinal(o.apply(this,arguments),e)})}function L(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function F(e){var t,n,r=e.match(I);for(t=0,n=r.length;t<n;t++)V[r[t]]?r[t]=V[r[t]]:r[t]=L(r[t]);return function(t){var o,i="";for(o=0;o<n;o++)i+=A(r[o])?r[o].call(t,e):r[o];return i}}function j(e,t){return e.isValid()?(t=K(t,e.localeData()),N[t]=N[t]||F(t),N[t](e)):e.localeData().invalidDate()}function K(e,t){var n=5;function r(e){return t.longDateFormat(e)||e}for(O.lastIndex=0;n>=0&&O.test(e);)e=e.replace(O,r),O.lastIndex=0,n-=1;return e}var W={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function Y(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(I).map((function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e})).join(""),this._longDateFormat[e])}var U="Invalid date";function z(){return this._invalidDate}var X="%d",J=/\d{1,2}/;function q(e){return this._ordinal.replace("%d",e)}var Z={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function Q(e,t,n,r){var o=this._relativeTime[n];return A(o)?o(e,t,n,r):o.replace(/%d/i,e)}function ee(e,t){var n=this._relativeTime[e>0?"future":"past"];return A(n)?n(t):n.replace(/%s/i,t)}var te={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function ne(e){return"string"==typeof e?te[e]||te[e.toLowerCase()]:void 0}function re(e){var t,n,r={};for(n in e)a(e,n)&&(t=ne(n))&&(r[t]=e[n]);return r}var oe={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function ie(e){var t,n=[];for(t in e)a(e,t)&&n.push({unit:t,priority:oe[t]});return n.sort((function(e,t){return e.priority-t.priority})),n}var se,ae=/\d/,le=/\d\d/,de=/\d{3}/,ce=/\d{4}/,ue=/[+-]?\d{6}/,me=/\d\d?/,pe=/\d\d\d\d?/,he=/\d\d\d\d\d\d?/,ge=/\d{1,3}/,fe=/\d{1,4}/,xe=/[+-]?\d{1,6}/,ye=/\d+/,be=/[+-]?\d+/,ve=/Z|[+-]\d\d:?\d\d/gi,Te=/Z|[+-]\d\d(?::?\d\d)?/gi,Se=/[+-]?\d+(\.\d{1,3})?/,$e=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,ke=/^[1-9]\d?/,we=/^([1-9]\d|\d)/;function Me(e,t,n){se[e]=A(t)?t:function(e,r){return e&&n?n:t}}function Pe(e,t){return a(se,e)?se[e](t._strict,t._locale):new RegExp(Ce(e))}function Ce(e){return Ae(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(e,t,n,r,o){return t||n||r||o})))}function Ae(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function De(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function _e(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=De(t)),n}se={};var Ge={};function Ee(e,t){var n,r,o=t;for("string"==typeof e&&(e=[e]),c(t)&&(o=function(e,n){n[t]=_e(e)}),r=e.length,n=0;n<r;n++)Ge[e[n]]=o}function Be(e,t){Ee(e,(function(e,n,r,o){r._w=r._w||{},t(e,r._w,r,o)}))}function He(e,t,n){null!=t&&a(Ge,e)&&Ge[e](t,n._a,n,e)}function Ie(e){return e%4==0&&e%100!=0||e%400==0}var Oe=0,Ne=1,Ve=2,Re=3,Le=4,Fe=5,je=6,Ke=7,We=8;function Ye(e){return Ie(e)?366:365}R("Y",0,0,(function(){var e=this.year();return e<=9999?H(e,4):"+"+e})),R(0,["YY",2],0,(function(){return this.year()%100})),R(0,["YYYY",4],0,"year"),R(0,["YYYYY",5],0,"year"),R(0,["YYYYYY",6,!0],0,"year"),Me("Y",be),Me("YY",me,le),Me("YYYY",fe,ce),Me("YYYYY",xe,ue),Me("YYYYYY",xe,ue),Ee(["YYYYY","YYYYYY"],Oe),Ee("YYYY",(function(e,t){t[Oe]=2===e.length?r.parseTwoDigitYear(e):_e(e)})),Ee("YY",(function(e,t){t[Oe]=r.parseTwoDigitYear(e)})),Ee("Y",(function(e,t){t[Oe]=parseInt(e,10)})),r.parseTwoDigitYear=function(e){return _e(e)+(_e(e)>68?1900:2e3)};var Ue,ze=Je("FullYear",!0);function Xe(){return Ie(this.year())}function Je(e,t){return function(n){return null!=n?(Ze(this,e,n),r.updateOffset(this,t),this):qe(this,e)}}function qe(e,t){if(!e.isValid())return NaN;var n=e._d,r=e._isUTC;switch(t){case"Milliseconds":return r?n.getUTCMilliseconds():n.getMilliseconds();case"Seconds":return r?n.getUTCSeconds():n.getSeconds();case"Minutes":return r?n.getUTCMinutes():n.getMinutes();case"Hours":return r?n.getUTCHours():n.getHours();case"Date":return r?n.getUTCDate():n.getDate();case"Day":return r?n.getUTCDay():n.getDay();case"Month":return r?n.getUTCMonth():n.getMonth();case"FullYear":return r?n.getUTCFullYear():n.getFullYear();default:return NaN}}function Ze(e,t,n){var r,o,i,s,a;if(e.isValid()&&!isNaN(n)){switch(r=e._d,o=e._isUTC,t){case"Milliseconds":return void(o?r.setUTCMilliseconds(n):r.setMilliseconds(n));case"Seconds":return void(o?r.setUTCSeconds(n):r.setSeconds(n));case"Minutes":return void(o?r.setUTCMinutes(n):r.setMinutes(n));case"Hours":return void(o?r.setUTCHours(n):r.setHours(n));case"Date":return void(o?r.setUTCDate(n):r.setDate(n));case"FullYear":break;default:return}i=n,s=e.month(),a=29!==(a=e.date())||1!==s||Ie(i)?a:28,o?r.setUTCFullYear(i,s,a):r.setFullYear(i,s,a)}}function Qe(e){return A(this[e=ne(e)])?this[e]():this}function et(e,t){if("object"==typeof e){var n,r=ie(e=re(e)),o=r.length;for(n=0;n<o;n++)this[r[n].unit](e[r[n].unit])}else if(A(this[e=ne(e)]))return this[e](t);return this}function tt(e,t){return(e%t+t)%t}function nt(e,t){if(isNaN(e)||isNaN(t))return NaN;var n=tt(t,12);return e+=(t-n)/12,1===n?Ie(e)?29:28:31-n%7%2}Ue=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},R("M",["MM",2],"Mo",(function(){return this.month()+1})),R("MMM",0,0,(function(e){return this.localeData().monthsShort(this,e)})),R("MMMM",0,0,(function(e){return this.localeData().months(this,e)})),Me("M",me,ke),Me("MM",me,le),Me("MMM",(function(e,t){return t.monthsShortRegex(e)})),Me("MMMM",(function(e,t){return t.monthsRegex(e)})),Ee(["M","MM"],(function(e,t){t[Ne]=_e(e)-1})),Ee(["MMM","MMMM"],(function(e,t,n,r){var o=n._locale.monthsParse(e,r,n._strict);null!=o?t[Ne]=o:f(n).invalidMonth=e}));var rt="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ot="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),it=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,st=$e,at=$e;function lt(e,t){return e?i(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||it).test(t)?"format":"standalone"][e.month()]:i(this._months)?this._months:this._months.standalone}function dt(e,t){return e?i(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[it.test(t)?"format":"standalone"][e.month()]:i(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function ct(e,t,n){var r,o,i,s=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)i=h([2e3,r]),this._shortMonthsParse[r]=this.monthsShort(i,"").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(i,"").toLocaleLowerCase();return n?"MMM"===t?-1!==(o=Ue.call(this._shortMonthsParse,s))?o:null:-1!==(o=Ue.call(this._longMonthsParse,s))?o:null:"MMM"===t?-1!==(o=Ue.call(this._shortMonthsParse,s))||-1!==(o=Ue.call(this._longMonthsParse,s))?o:null:-1!==(o=Ue.call(this._longMonthsParse,s))||-1!==(o=Ue.call(this._shortMonthsParse,s))?o:null}function ut(e,t,n){var r,o,i;if(this._monthsParseExact)return ct.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(o=h([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(o,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(o,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(i="^"+this.months(o,"")+"|^"+this.monthsShort(o,""),this._monthsParse[r]=new RegExp(i.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}}function mt(e,t){if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=_e(t);else if(!c(t=e.localeData().monthsParse(t)))return e;var n=t,r=e.date();return r=r<29?r:Math.min(r,nt(e.year(),n)),e._isUTC?e._d.setUTCMonth(n,r):e._d.setMonth(n,r),e}function pt(e){return null!=e?(mt(this,e),r.updateOffset(this,!0),this):qe(this,"Month")}function ht(){return nt(this.year(),this.month())}function gt(e){return this._monthsParseExact?(a(this,"_monthsRegex")||xt.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(a(this,"_monthsShortRegex")||(this._monthsShortRegex=st),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)}function ft(e){return this._monthsParseExact?(a(this,"_monthsRegex")||xt.call(this),e?this._monthsStrictRegex:this._monthsRegex):(a(this,"_monthsRegex")||(this._monthsRegex=at),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)}function xt(){function e(e,t){return t.length-e.length}var t,n,r,o,i=[],s=[],a=[];for(t=0;t<12;t++)n=h([2e3,t]),r=Ae(this.monthsShort(n,"")),o=Ae(this.months(n,"")),i.push(r),s.push(o),a.push(o),a.push(r);i.sort(e),s.sort(e),a.sort(e),this._monthsRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+i.join("|")+")","i")}function yt(e,t,n,r,o,i,s){var a;return e<100&&e>=0?(a=new Date(e+400,t,n,r,o,i,s),isFinite(a.getFullYear())&&a.setFullYear(e)):a=new Date(e,t,n,r,o,i,s),a}function bt(e){var t,n;return e<100&&e>=0?((n=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function vt(e,t,n){var r=7+t-n;return-(7+bt(e,0,r).getUTCDay()-t)%7+r-1}function Tt(e,t,n,r,o){var i,s,a=1+7*(t-1)+(7+n-r)%7+vt(e,r,o);return a<=0?s=Ye(i=e-1)+a:a>Ye(e)?(i=e+1,s=a-Ye(e)):(i=e,s=a),{year:i,dayOfYear:s}}function St(e,t,n){var r,o,i=vt(e.year(),t,n),s=Math.floor((e.dayOfYear()-i-1)/7)+1;return s<1?r=s+$t(o=e.year()-1,t,n):s>$t(e.year(),t,n)?(r=s-$t(e.year(),t,n),o=e.year()+1):(o=e.year(),r=s),{week:r,year:o}}function $t(e,t,n){var r=vt(e,t,n),o=vt(e+1,t,n);return(Ye(e)-r+o)/7}function kt(e){return St(e,this._week.dow,this._week.doy).week}R("w",["ww",2],"wo","week"),R("W",["WW",2],"Wo","isoWeek"),Me("w",me,ke),Me("ww",me,le),Me("W",me,ke),Me("WW",me,le),Be(["w","ww","W","WW"],(function(e,t,n,r){t[r.substr(0,1)]=_e(e)}));var wt={dow:0,doy:6};function Mt(){return this._week.dow}function Pt(){return this._week.doy}function Ct(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function At(e){var t=St(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function Dt(e,t){return"string"!=typeof e?e:isNaN(e)?"number"==typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}function _t(e,t){return"string"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function Gt(e,t){return e.slice(t,7).concat(e.slice(0,t))}R("d",0,"do","day"),R("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),R("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),R("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),R("e",0,0,"weekday"),R("E",0,0,"isoWeekday"),Me("d",me),Me("e",me),Me("E",me),Me("dd",(function(e,t){return t.weekdaysMinRegex(e)})),Me("ddd",(function(e,t){return t.weekdaysShortRegex(e)})),Me("dddd",(function(e,t){return t.weekdaysRegex(e)})),Be(["dd","ddd","dddd"],(function(e,t,n,r){var o=n._locale.weekdaysParse(e,r,n._strict);null!=o?t.d=o:f(n).invalidWeekday=e})),Be(["d","e","E"],(function(e,t,n,r){t[r]=_e(e)}));var Et="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Bt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ht="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),It=$e,Ot=$e,Nt=$e;function Vt(e,t){var n=i(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?Gt(n,this._week.dow):e?n[e.day()]:n}function Rt(e){return!0===e?Gt(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function Lt(e){return!0===e?Gt(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function Ft(e,t,n){var r,o,i,s=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)i=h([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(i,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(o=Ue.call(this._weekdaysParse,s))?o:null:"ddd"===t?-1!==(o=Ue.call(this._shortWeekdaysParse,s))?o:null:-1!==(o=Ue.call(this._minWeekdaysParse,s))?o:null:"dddd"===t?-1!==(o=Ue.call(this._weekdaysParse,s))||-1!==(o=Ue.call(this._shortWeekdaysParse,s))||-1!==(o=Ue.call(this._minWeekdaysParse,s))?o:null:"ddd"===t?-1!==(o=Ue.call(this._shortWeekdaysParse,s))||-1!==(o=Ue.call(this._weekdaysParse,s))||-1!==(o=Ue.call(this._minWeekdaysParse,s))?o:null:-1!==(o=Ue.call(this._minWeekdaysParse,s))||-1!==(o=Ue.call(this._weekdaysParse,s))||-1!==(o=Ue.call(this._shortWeekdaysParse,s))?o:null}function jt(e,t,n){var r,o,i;if(this._weekdaysParseExact)return Ft.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(o=h([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(o,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(o,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(o,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(i="^"+this.weekdays(o,"")+"|^"+this.weekdaysShort(o,"")+"|^"+this.weekdaysMin(o,""),this._weekdaysParse[r]=new RegExp(i.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Kt(e){if(!this.isValid())return null!=e?this:NaN;var t=qe(this,"Day");return null!=e?(e=Dt(e,this.localeData()),this.add(e-t,"d")):t}function Wt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function Yt(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=_t(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7}function Ut(e){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||Jt.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(a(this,"_weekdaysRegex")||(this._weekdaysRegex=It),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function zt(e){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||Jt.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(a(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Ot),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Xt(e){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||Jt.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(a(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Nt),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Jt(){function e(e,t){return t.length-e.length}var t,n,r,o,i,s=[],a=[],l=[],d=[];for(t=0;t<7;t++)n=h([2e3,1]).day(t),r=Ae(this.weekdaysMin(n,"")),o=Ae(this.weekdaysShort(n,"")),i=Ae(this.weekdays(n,"")),s.push(r),a.push(o),l.push(i),d.push(r),d.push(o),d.push(i);s.sort(e),a.sort(e),l.sort(e),d.sort(e),this._weekdaysRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+s.join("|")+")","i")}function qt(){return this.hours()%12||12}function Zt(){return this.hours()||24}function Qt(e,t){R(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function en(e,t){return t._meridiemParse}function tn(e){return"p"===(e+"").toLowerCase().charAt(0)}R("H",["HH",2],0,"hour"),R("h",["hh",2],0,qt),R("k",["kk",2],0,Zt),R("hmm",0,0,(function(){return""+qt.apply(this)+H(this.minutes(),2)})),R("hmmss",0,0,(function(){return""+qt.apply(this)+H(this.minutes(),2)+H(this.seconds(),2)})),R("Hmm",0,0,(function(){return""+this.hours()+H(this.minutes(),2)})),R("Hmmss",0,0,(function(){return""+this.hours()+H(this.minutes(),2)+H(this.seconds(),2)})),Qt("a",!0),Qt("A",!1),Me("a",en),Me("A",en),Me("H",me,we),Me("h",me,ke),Me("k",me,ke),Me("HH",me,le),Me("hh",me,le),Me("kk",me,le),Me("hmm",pe),Me("hmmss",he),Me("Hmm",pe),Me("Hmmss",he),Ee(["H","HH"],Re),Ee(["k","kk"],(function(e,t,n){var r=_e(e);t[Re]=24===r?0:r})),Ee(["a","A"],(function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),Ee(["h","hh"],(function(e,t,n){t[Re]=_e(e),f(n).bigHour=!0})),Ee("hmm",(function(e,t,n){var r=e.length-2;t[Re]=_e(e.substr(0,r)),t[Le]=_e(e.substr(r)),f(n).bigHour=!0})),Ee("hmmss",(function(e,t,n){var r=e.length-4,o=e.length-2;t[Re]=_e(e.substr(0,r)),t[Le]=_e(e.substr(r,2)),t[Fe]=_e(e.substr(o)),f(n).bigHour=!0})),Ee("Hmm",(function(e,t,n){var r=e.length-2;t[Re]=_e(e.substr(0,r)),t[Le]=_e(e.substr(r))})),Ee("Hmmss",(function(e,t,n){var r=e.length-4,o=e.length-2;t[Re]=_e(e.substr(0,r)),t[Le]=_e(e.substr(r,2)),t[Fe]=_e(e.substr(o))}));var nn=/[ap]\.?m?\.?/i,rn=Je("Hours",!0);function on(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}var sn,an={calendar:E,longDateFormat:W,invalidDate:U,ordinal:X,dayOfMonthOrdinalParse:J,relativeTime:Z,months:rt,monthsShort:ot,week:wt,weekdays:Et,weekdaysMin:Ht,weekdaysShort:Bt,meridiemParse:nn},ln={},dn={};function cn(e,t){var n,r=Math.min(e.length,t.length);for(n=0;n<r;n+=1)if(e[n]!==t[n])return n;return r}function un(e){return e?e.toLowerCase().replace("_","-"):e}function mn(e){for(var t,n,r,o,i=0;i<e.length;){for(t=(o=un(e[i]).split("-")).length,n=(n=un(e[i+1]))?n.split("-"):null;t>0;){if(r=hn(o.slice(0,t).join("-")))return r;if(n&&n.length>=t&&cn(o,n)>=t-1)break;t--}i++}return sn}function pn(e){return!(!e||!e.match("^[^/\\\\]*$"))}function hn(t){var n=null;if(void 0===ln[t]&&e&&e.exports&&pn(t))try{n=sn._abbr,Object(function(){var e=new Error("Cannot find module 'undefined'");throw e.code="MODULE_NOT_FOUND",e}()),gn(n)}catch(e){ln[t]=null}return ln[t]}function gn(e,t){var n;return e&&((n=d(t)?yn(e):fn(e,t))?sn=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),sn._abbr}function fn(e,t){if(null!==t){var n,r=an;if(t.abbr=e,null!=ln[e])C("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=ln[e]._config;else if(null!=t.parentLocale)if(null!=ln[t.parentLocale])r=ln[t.parentLocale]._config;else{if(null==(n=hn(t.parentLocale)))return dn[t.parentLocale]||(dn[t.parentLocale]=[]),dn[t.parentLocale].push({name:e,config:t}),null;r=n._config}return ln[e]=new G(_(r,t)),dn[e]&&dn[e].forEach((function(e){fn(e.name,e.config)})),gn(e),ln[e]}return delete ln[e],null}function xn(e,t){if(null!=t){var n,r,o=an;null!=ln[e]&&null!=ln[e].parentLocale?ln[e].set(_(ln[e]._config,t)):(null!=(r=hn(e))&&(o=r._config),t=_(o,t),null==r&&(t.abbr=e),(n=new G(t)).parentLocale=ln[e],ln[e]=n),gn(e)}else null!=ln[e]&&(null!=ln[e].parentLocale?(ln[e]=ln[e].parentLocale,e===gn()&&gn(e)):null!=ln[e]&&delete ln[e]);return ln[e]}function yn(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return sn;if(!i(e)){if(t=hn(e))return t;e=[e]}return mn(e)}function bn(){return M(ln)}function vn(e){var t,n=e._a;return n&&-2===f(e).overflow&&(t=n[Ne]<0||n[Ne]>11?Ne:n[Ve]<1||n[Ve]>nt(n[Oe],n[Ne])?Ve:n[Re]<0||n[Re]>24||24===n[Re]&&(0!==n[Le]||0!==n[Fe]||0!==n[je])?Re:n[Le]<0||n[Le]>59?Le:n[Fe]<0||n[Fe]>59?Fe:n[je]<0||n[je]>999?je:-1,f(e)._overflowDayOfYear&&(t<Oe||t>Ve)&&(t=Ve),f(e)._overflowWeeks&&-1===t&&(t=Ke),f(e)._overflowWeekday&&-1===t&&(t=We),f(e).overflow=t),e}var Tn=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Sn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,$n=/Z|[+-]\d\d(?::?\d\d)?/,kn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],wn=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Mn=/^\/?Date\((-?\d+)/i,Pn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Cn={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function An(e){var t,n,r,o,i,s,a=e._i,l=Tn.exec(a)||Sn.exec(a),d=kn.length,c=wn.length;if(l){for(f(e).iso=!0,t=0,n=d;t<n;t++)if(kn[t][1].exec(l[1])){o=kn[t][0],r=!1!==kn[t][2];break}if(null==o)return void(e._isValid=!1);if(l[3]){for(t=0,n=c;t<n;t++)if(wn[t][1].exec(l[3])){i=(l[2]||" ")+wn[t][0];break}if(null==i)return void(e._isValid=!1)}if(!r&&null!=i)return void(e._isValid=!1);if(l[4]){if(!$n.exec(l[4]))return void(e._isValid=!1);s="Z"}e._f=o+(i||"")+(s||""),Ln(e)}else e._isValid=!1}function Dn(e,t,n,r,o,i){var s=[_n(e),ot.indexOf(t),parseInt(n,10),parseInt(r,10),parseInt(o,10)];return i&&s.push(parseInt(i,10)),s}function _n(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}function Gn(e){return e.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function En(e,t,n){return!e||Bt.indexOf(e)===new Date(t[0],t[1],t[2]).getDay()||(f(n).weekdayMismatch=!0,n._isValid=!1,!1)}function Bn(e,t,n){if(e)return Cn[e];if(t)return 0;var r=parseInt(n,10),o=r%100;return(r-o)/100*60+o}function Hn(e){var t,n=Pn.exec(Gn(e._i));if(n){if(t=Dn(n[4],n[3],n[2],n[5],n[6],n[7]),!En(n[1],t,e))return;e._a=t,e._tzm=Bn(n[8],n[9],n[10]),e._d=bt.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),f(e).rfc2822=!0}else e._isValid=!1}function In(e){var t=Mn.exec(e._i);null===t?(An(e),!1===e._isValid&&(delete e._isValid,Hn(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:r.createFromInputFallback(e)))):e._d=new Date(+t[1])}function On(e,t,n){return null!=e?e:null!=t?t:n}function Nn(e){var t=new Date(r.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function Vn(e){var t,n,r,o,i,s=[];if(!e._d){for(r=Nn(e),e._w&&null==e._a[Ve]&&null==e._a[Ne]&&Rn(e),null!=e._dayOfYear&&(i=On(e._a[Oe],r[Oe]),(e._dayOfYear>Ye(i)||0===e._dayOfYear)&&(f(e)._overflowDayOfYear=!0),n=bt(i,0,e._dayOfYear),e._a[Ne]=n.getUTCMonth(),e._a[Ve]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=s[t]=r[t];for(;t<7;t++)e._a[t]=s[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[Re]&&0===e._a[Le]&&0===e._a[Fe]&&0===e._a[je]&&(e._nextDay=!0,e._a[Re]=0),e._d=(e._useUTC?bt:yt).apply(null,s),o=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Re]=24),e._w&&void 0!==e._w.d&&e._w.d!==o&&(f(e).weekdayMismatch=!0)}}function Rn(e){var t,n,r,o,i,s,a,l,d;null!=(t=e._w).GG||null!=t.W||null!=t.E?(i=1,s=4,n=On(t.GG,e._a[Oe],St(Xn(),1,4).year),r=On(t.W,1),((o=On(t.E,1))<1||o>7)&&(l=!0)):(i=e._locale._week.dow,s=e._locale._week.doy,d=St(Xn(),i,s),n=On(t.gg,e._a[Oe],d.year),r=On(t.w,d.week),null!=t.d?((o=t.d)<0||o>6)&&(l=!0):null!=t.e?(o=t.e+i,(t.e<0||t.e>6)&&(l=!0)):o=i),r<1||r>$t(n,i,s)?f(e)._overflowWeeks=!0:null!=l?f(e)._overflowWeekday=!0:(a=Tt(n,r,o,i,s),e._a[Oe]=a.year,e._dayOfYear=a.dayOfYear)}function Ln(e){if(e._f!==r.ISO_8601)if(e._f!==r.RFC_2822){e._a=[],f(e).empty=!0;var t,n,o,i,s,a,l,d=""+e._i,c=d.length,u=0;for(l=(o=K(e._f,e._locale).match(I)||[]).length,t=0;t<l;t++)i=o[t],(n=(d.match(Pe(i,e))||[])[0])&&((s=d.substr(0,d.indexOf(n))).length>0&&f(e).unusedInput.push(s),d=d.slice(d.indexOf(n)+n.length),u+=n.length),V[i]?(n?f(e).empty=!1:f(e).unusedTokens.push(i),He(i,n,e)):e._strict&&!n&&f(e).unusedTokens.push(i);f(e).charsLeftOver=c-u,d.length>0&&f(e).unusedInput.push(d),e._a[Re]<=12&&!0===f(e).bigHour&&e._a[Re]>0&&(f(e).bigHour=void 0),f(e).parsedDateParts=e._a.slice(0),f(e).meridiem=e._meridiem,e._a[Re]=Fn(e._locale,e._a[Re],e._meridiem),null!==(a=f(e).era)&&(e._a[Oe]=e._locale.erasConvertYear(a,e._a[Oe])),Vn(e),vn(e)}else Hn(e);else An(e)}function Fn(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((r=e.isPM(n))&&t<12&&(t+=12),r||12!==t||(t=0),t):t}function jn(e){var t,n,r,o,i,s,a=!1,l=e._f.length;if(0===l)return f(e).invalidFormat=!0,void(e._d=new Date(NaN));for(o=0;o<l;o++)i=0,s=!1,t=T({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[o],Ln(t),x(t)&&(s=!0),i+=f(t).charsLeftOver,i+=10*f(t).unusedTokens.length,f(t).score=i,a?i<r&&(r=i,n=t):(null==r||i<r||s)&&(r=i,n=t,s&&(a=!0));p(e,n||t)}function Kn(e){if(!e._d){var t=re(e._i),n=void 0===t.day?t.date:t.day;e._a=m([t.year,t.month,n,t.hour,t.minute,t.second,t.millisecond],(function(e){return e&&parseInt(e,10)})),Vn(e)}}function Wn(e){var t=new S(vn(Yn(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}function Yn(e){var t=e._i,n=e._f;return e._locale=e._locale||yn(e._l),null===t||void 0===n&&""===t?y({nullInput:!0}):("string"==typeof t&&(e._i=t=e._locale.preparse(t)),$(t)?new S(vn(t)):(u(t)?e._d=t:i(n)?jn(e):n?Ln(e):Un(e),x(e)||(e._d=null),e))}function Un(e){var t=e._i;d(t)?e._d=new Date(r.now()):u(t)?e._d=new Date(t.valueOf()):"string"==typeof t?In(e):i(t)?(e._a=m(t.slice(0),(function(e){return parseInt(e,10)})),Vn(e)):s(t)?Kn(e):c(t)?e._d=new Date(t):r.createFromInputFallback(e)}function zn(e,t,n,r,o){var a={};return!0!==t&&!1!==t||(r=t,t=void 0),!0!==n&&!1!==n||(r=n,n=void 0),(s(e)&&l(e)||i(e)&&0===e.length)&&(e=void 0),a._isAMomentObject=!0,a._useUTC=a._isUTC=o,a._l=n,a._i=e,a._f=t,a._strict=r,Wn(a)}function Xn(e,t,n,r){return zn(e,t,n,r,!1)}r.createFromInputFallback=w("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))})),r.ISO_8601=function(){},r.RFC_2822=function(){};var Jn=w("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Xn.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:y()})),qn=w("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Xn.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:y()}));function Zn(e,t){var n,r;if(1===t.length&&i(t[0])&&(t=t[0]),!t.length)return Xn();for(n=t[0],r=1;r<t.length;++r)t[r].isValid()&&!t[r][e](n)||(n=t[r]);return n}function Qn(){return Zn("isBefore",[].slice.call(arguments,0))}function er(){return Zn("isAfter",[].slice.call(arguments,0))}var tr=function(){return Date.now?Date.now():+new Date},nr=["year","quarter","month","week","day","hour","minute","second","millisecond"];function rr(e){var t,n,r=!1,o=nr.length;for(t in e)if(a(e,t)&&(-1===Ue.call(nr,t)||null!=e[t]&&isNaN(e[t])))return!1;for(n=0;n<o;++n)if(e[nr[n]]){if(r)return!1;parseFloat(e[nr[n]])!==_e(e[nr[n]])&&(r=!0)}return!0}function or(){return this._isValid}function ir(){return Cr(NaN)}function sr(e){var t=re(e),n=t.year||0,r=t.quarter||0,o=t.month||0,i=t.week||t.isoWeek||0,s=t.day||0,a=t.hour||0,l=t.minute||0,d=t.second||0,c=t.millisecond||0;this._isValid=rr(t),this._milliseconds=+c+1e3*d+6e4*l+1e3*a*60*60,this._days=+s+7*i,this._months=+o+3*r+12*n,this._data={},this._locale=yn(),this._bubble()}function ar(e){return e instanceof sr}function lr(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function dr(e,t,n){var r,o=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),s=0;for(r=0;r<o;r++)(n&&e[r]!==t[r]||!n&&_e(e[r])!==_e(t[r]))&&s++;return s+i}function cr(e,t){R(e,0,0,(function(){var e=this.utcOffset(),n="+";return e<0&&(e=-e,n="-"),n+H(~~(e/60),2)+t+H(~~e%60,2)}))}cr("Z",":"),cr("ZZ",""),Me("Z",Te),Me("ZZ",Te),Ee(["Z","ZZ"],(function(e,t,n){n._useUTC=!0,n._tzm=mr(Te,e)}));var ur=/([\+\-]|\d\d)/gi;function mr(e,t){var n,r,o=(t||"").match(e);return null===o?null:0===(r=60*(n=((o[o.length-1]||[])+"").match(ur)||["-",0,0])[1]+_e(n[2]))?0:"+"===n[0]?r:-r}function pr(e,t){var n,o;return t._isUTC?(n=t.clone(),o=($(e)||u(e)?e.valueOf():Xn(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+o),r.updateOffset(n,!1),n):Xn(e).local()}function hr(e){return-Math.round(e._d.getTimezoneOffset())}function gr(e,t,n){var o,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(null===(e=mr(Te,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(o=hr(this)),this._offset=e,this._isUTC=!0,null!=o&&this.add(o,"m"),i!==e&&(!t||this._changeInProgress?Er(this,Cr(e-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,r.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?i:hr(this)}function fr(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function xr(e){return this.utcOffset(0,e)}function yr(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(hr(this),"m")),this}function br(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=mr(ve,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this}function vr(e){return!!this.isValid()&&(e=e?Xn(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function Tr(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Sr(){if(!d(this._isDSTShifted))return this._isDSTShifted;var e,t={};return T(t,this),(t=Yn(t))._a?(e=t._isUTC?h(t._a):Xn(t._a),this._isDSTShifted=this.isValid()&&dr(t._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function $r(){return!!this.isValid()&&!this._isUTC}function kr(){return!!this.isValid()&&this._isUTC}function wr(){return!!this.isValid()&&this._isUTC&&0===this._offset}r.updateOffset=function(){};var Mr=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Pr=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Cr(e,t){var n,r,o,i=e,s=null;return ar(e)?i={ms:e._milliseconds,d:e._days,M:e._months}:c(e)||!isNaN(+e)?(i={},t?i[t]=+e:i.milliseconds=+e):(s=Mr.exec(e))?(n="-"===s[1]?-1:1,i={y:0,d:_e(s[Ve])*n,h:_e(s[Re])*n,m:_e(s[Le])*n,s:_e(s[Fe])*n,ms:_e(lr(1e3*s[je]))*n}):(s=Pr.exec(e))?(n="-"===s[1]?-1:1,i={y:Ar(s[2],n),M:Ar(s[3],n),w:Ar(s[4],n),d:Ar(s[5],n),h:Ar(s[6],n),m:Ar(s[7],n),s:Ar(s[8],n)}):null==i?i={}:"object"==typeof i&&("from"in i||"to"in i)&&(o=_r(Xn(i.from),Xn(i.to)),(i={}).ms=o.milliseconds,i.M=o.months),r=new sr(i),ar(e)&&a(e,"_locale")&&(r._locale=e._locale),ar(e)&&a(e,"_isValid")&&(r._isValid=e._isValid),r}function Ar(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Dr(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function _r(e,t){var n;return e.isValid()&&t.isValid()?(t=pr(t,e),e.isBefore(t)?n=Dr(e,t):((n=Dr(t,e)).milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function Gr(e,t){return function(n,r){var o;return null===r||isNaN(+r)||(C(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),o=n,n=r,r=o),Er(this,Cr(n,r),e),this}}function Er(e,t,n,o){var i=t._milliseconds,s=lr(t._days),a=lr(t._months);e.isValid()&&(o=o??!0,a&&mt(e,qe(e,"Month")+a*n),s&&Ze(e,"Date",qe(e,"Date")+s*n),i&&e._d.setTime(e._d.valueOf()+i*n),o&&r.updateOffset(e,s||a))}Cr.fn=sr.prototype,Cr.invalid=ir;var Br=Gr(1,"add"),Hr=Gr(-1,"subtract");function Ir(e){return"string"==typeof e||e instanceof String}function Or(e){return $(e)||u(e)||Ir(e)||c(e)||Vr(e)||Nr(e)||null==e}function Nr(e){var t,n,r=s(e)&&!l(e),o=!1,i=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],d=i.length;for(t=0;t<d;t+=1)n=i[t],o=o||a(e,n);return r&&o}function Vr(e){var t=i(e),n=!1;return t&&(n=0===e.filter((function(t){return!c(t)&&Ir(e)})).length),t&&n}function Rr(e){var t,n,r=s(e)&&!l(e),o=!1,i=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(t=0;t<i.length;t+=1)n=i[t],o=o||a(e,n);return r&&o}function Lr(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function Fr(e,t){1===arguments.length&&(arguments[0]?Or(arguments[0])?(e=arguments[0],t=void 0):Rr(arguments[0])&&(t=arguments[0],e=void 0):(e=void 0,t=void 0));var n=e||Xn(),o=pr(n,this).startOf("day"),i=r.calendarFormat(this,o)||"sameElse",s=t&&(A(t[i])?t[i].call(this,n):t[i]);return this.format(s||this.localeData().calendar(i,this,Xn(n)))}function jr(){return new S(this)}function Kr(e,t){var n=$(e)?e:Xn(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=ne(t)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())}function Wr(e,t){var n=$(e)?e:Xn(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=ne(t)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())}function Yr(e,t,n,r){var o=$(e)?e:Xn(e),i=$(t)?t:Xn(t);return!!(this.isValid()&&o.isValid()&&i.isValid())&&("("===(r=r||"()")[0]?this.isAfter(o,n):!this.isBefore(o,n))&&(")"===r[1]?this.isBefore(i,n):!this.isAfter(i,n))}function Ur(e,t){var n,r=$(e)?e:Xn(e);return!(!this.isValid()||!r.isValid())&&("millisecond"===(t=ne(t)||"millisecond")?this.valueOf()===r.valueOf():(n=r.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))}function zr(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function Xr(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function Jr(e,t,n){var r,o,i;if(!this.isValid())return NaN;if(!(r=pr(e,this)).isValid())return NaN;switch(o=6e4*(r.utcOffset()-this.utcOffset()),t=ne(t)){case"year":i=qr(this,r)/12;break;case"month":i=qr(this,r);break;case"quarter":i=qr(this,r)/3;break;case"second":i=(this-r)/1e3;break;case"minute":i=(this-r)/6e4;break;case"hour":i=(this-r)/36e5;break;case"day":i=(this-r-o)/864e5;break;case"week":i=(this-r-o)/6048e5;break;default:i=this-r}return n?i:De(i)}function qr(e,t){if(e.date()<t.date())return-qr(t,e);var n=12*(t.year()-e.year())+(t.month()-e.month()),r=e.clone().add(n,"months");return-(n+(t-r<0?(t-r)/(r-e.clone().add(n-1,"months")):(t-r)/(e.clone().add(n+1,"months")-r)))||0}function Zr(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function Qr(e){if(!this.isValid())return null;var t=!0!==e,n=t?this.clone().utc():this;return n.year()<0||n.year()>9999?j(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):A(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",j(n,"Z")):j(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function eo(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t,n,r,o="moment",i="";return this.isLocal()||(o=0===this.utcOffset()?"moment.utc":"moment.parseZone",i="Z"),e="["+o+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n="-MM-DD[T]HH:mm:ss.SSS",r=i+'[")]',this.format(e+t+n+r)}function to(e){e||(e=this.isUtc()?r.defaultFormatUtc:r.defaultFormat);var t=j(this,e);return this.localeData().postformat(t)}function no(e,t){return this.isValid()&&($(e)&&e.isValid()||Xn(e).isValid())?Cr({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function ro(e){return this.from(Xn(),e)}function oo(e,t){return this.isValid()&&($(e)&&e.isValid()||Xn(e).isValid())?Cr({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function io(e){return this.to(Xn(),e)}function so(e){var t;return void 0===e?this._locale._abbr:(null!=(t=yn(e))&&(this._locale=t),this)}r.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",r.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var ao=w("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(e){return void 0===e?this.localeData():this.locale(e)}));function lo(){return this._locale}var co=1e3,uo=60*co,mo=60*uo,po=3506328*mo;function ho(e,t){return(e%t+t)%t}function go(e,t,n){return e<100&&e>=0?new Date(e+400,t,n)-po:new Date(e,t,n).valueOf()}function fo(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-po:Date.UTC(e,t,n)}function xo(e){var t,n;if(void 0===(e=ne(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?fo:go,e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=ho(t+(this._isUTC?0:this.utcOffset()*uo),mo);break;case"minute":t=this._d.valueOf(),t-=ho(t,uo);break;case"second":t=this._d.valueOf(),t-=ho(t,co)}return this._d.setTime(t),r.updateOffset(this,!0),this}function yo(e){var t,n;if(void 0===(e=ne(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?fo:go,e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=mo-ho(t+(this._isUTC?0:this.utcOffset()*uo),mo)-1;break;case"minute":t=this._d.valueOf(),t+=uo-ho(t,uo)-1;break;case"second":t=this._d.valueOf(),t+=co-ho(t,co)-1}return this._d.setTime(t),r.updateOffset(this,!0),this}function bo(){return this._d.valueOf()-6e4*(this._offset||0)}function vo(){return Math.floor(this.valueOf()/1e3)}function To(){return new Date(this.valueOf())}function So(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function $o(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function ko(){return this.isValid()?this.toISOString():null}function wo(){return x(this)}function Mo(){return p({},f(this))}function Po(){return f(this).overflow}function Co(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Ao(e,t){var n,o,i,s=this._eras||yn("en")._eras;for(n=0,o=s.length;n<o;++n)switch("string"==typeof s[n].since&&(i=r(s[n].since).startOf("day"),s[n].since=i.valueOf()),typeof s[n].until){case"undefined":s[n].until=1/0;break;case"string":i=r(s[n].until).startOf("day").valueOf(),s[n].until=i.valueOf()}return s}function Do(e,t,n){var r,o,i,s,a,l=this.eras();for(e=e.toUpperCase(),r=0,o=l.length;r<o;++r)if(i=l[r].name.toUpperCase(),s=l[r].abbr.toUpperCase(),a=l[r].narrow.toUpperCase(),n)switch(t){case"N":case"NN":case"NNN":if(s===e)return l[r];break;case"NNNN":if(i===e)return l[r];break;case"NNNNN":if(a===e)return l[r]}else if([i,s,a].indexOf(e)>=0)return l[r]}function _o(e,t){var n=e.since<=e.until?1:-1;return void 0===t?r(e.since).year():r(e.since).year()+(t-e.offset)*n}function Go(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e){if(n=this.clone().startOf("day").valueOf(),r[e].since<=n&&n<=r[e].until)return r[e].name;if(r[e].until<=n&&n<=r[e].since)return r[e].name}return""}function Eo(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e){if(n=this.clone().startOf("day").valueOf(),r[e].since<=n&&n<=r[e].until)return r[e].narrow;if(r[e].until<=n&&n<=r[e].since)return r[e].narrow}return""}function Bo(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e){if(n=this.clone().startOf("day").valueOf(),r[e].since<=n&&n<=r[e].until)return r[e].abbr;if(r[e].until<=n&&n<=r[e].since)return r[e].abbr}return""}function Ho(){var e,t,n,o,i=this.localeData().eras();for(e=0,t=i.length;e<t;++e)if(n=i[e].since<=i[e].until?1:-1,o=this.clone().startOf("day").valueOf(),i[e].since<=o&&o<=i[e].until||i[e].until<=o&&o<=i[e].since)return(this.year()-r(i[e].since).year())*n+i[e].offset;return this.year()}function Io(e){return a(this,"_erasNameRegex")||jo.call(this),e?this._erasNameRegex:this._erasRegex}function Oo(e){return a(this,"_erasAbbrRegex")||jo.call(this),e?this._erasAbbrRegex:this._erasRegex}function No(e){return a(this,"_erasNarrowRegex")||jo.call(this),e?this._erasNarrowRegex:this._erasRegex}function Vo(e,t){return t.erasAbbrRegex(e)}function Ro(e,t){return t.erasNameRegex(e)}function Lo(e,t){return t.erasNarrowRegex(e)}function Fo(e,t){return t._eraYearOrdinalRegex||ye}function jo(){var e,t,n,r,o,i=[],s=[],a=[],l=[],d=this.eras();for(e=0,t=d.length;e<t;++e)n=Ae(d[e].name),r=Ae(d[e].abbr),o=Ae(d[e].narrow),s.push(n),i.push(r),a.push(o),l.push(n),l.push(r),l.push(o);this._erasRegex=new RegExp("^("+l.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+s.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+i.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+a.join("|")+")","i")}function Ko(e,t){R(0,[e,e.length],0,t)}function Wo(e){return qo.call(this,e,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)}function Yo(e){return qo.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function Uo(){return $t(this.year(),1,4)}function zo(){return $t(this.isoWeekYear(),1,4)}function Xo(){var e=this.localeData()._week;return $t(this.year(),e.dow,e.doy)}function Jo(){var e=this.localeData()._week;return $t(this.weekYear(),e.dow,e.doy)}function qo(e,t,n,r,o){var i;return null==e?St(this,r,o).year:(t>(i=$t(e,r,o))&&(t=i),Zo.call(this,e,t,n,r,o))}function Zo(e,t,n,r,o){var i=Tt(e,t,n,r,o),s=bt(i.year,0,i.dayOfYear);return this.year(s.getUTCFullYear()),this.month(s.getUTCMonth()),this.date(s.getUTCDate()),this}function Qo(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}R("N",0,0,"eraAbbr"),R("NN",0,0,"eraAbbr"),R("NNN",0,0,"eraAbbr"),R("NNNN",0,0,"eraName"),R("NNNNN",0,0,"eraNarrow"),R("y",["y",1],"yo","eraYear"),R("y",["yy",2],0,"eraYear"),R("y",["yyy",3],0,"eraYear"),R("y",["yyyy",4],0,"eraYear"),Me("N",Vo),Me("NN",Vo),Me("NNN",Vo),Me("NNNN",Ro),Me("NNNNN",Lo),Ee(["N","NN","NNN","NNNN","NNNNN"],(function(e,t,n,r){var o=n._locale.erasParse(e,r,n._strict);o?f(n).era=o:f(n).invalidEra=e})),Me("y",ye),Me("yy",ye),Me("yyy",ye),Me("yyyy",ye),Me("yo",Fo),Ee(["y","yy","yyy","yyyy"],Oe),Ee(["yo"],(function(e,t,n,r){var o;n._locale._eraYearOrdinalRegex&&(o=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[Oe]=n._locale.eraYearOrdinalParse(e,o):t[Oe]=parseInt(e,10)})),R(0,["gg",2],0,(function(){return this.weekYear()%100})),R(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),Ko("gggg","weekYear"),Ko("ggggg","weekYear"),Ko("GGGG","isoWeekYear"),Ko("GGGGG","isoWeekYear"),Me("G",be),Me("g",be),Me("GG",me,le),Me("gg",me,le),Me("GGGG",fe,ce),Me("gggg",fe,ce),Me("GGGGG",xe,ue),Me("ggggg",xe,ue),Be(["gggg","ggggg","GGGG","GGGGG"],(function(e,t,n,r){t[r.substr(0,2)]=_e(e)})),Be(["gg","GG"],(function(e,t,n,o){t[o]=r.parseTwoDigitYear(e)})),R("Q",0,"Qo","quarter"),Me("Q",ae),Ee("Q",(function(e,t){t[Ne]=3*(_e(e)-1)})),R("D",["DD",2],"Do","date"),Me("D",me,ke),Me("DD",me,le),Me("Do",(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),Ee(["D","DD"],Ve),Ee("Do",(function(e,t){t[Ve]=_e(e.match(me)[0])}));var ei=Je("Date",!0);function ti(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}R("DDD",["DDDD",3],"DDDo","dayOfYear"),Me("DDD",ge),Me("DDDD",de),Ee(["DDD","DDDD"],(function(e,t,n){n._dayOfYear=_e(e)})),R("m",["mm",2],0,"minute"),Me("m",me,we),Me("mm",me,le),Ee(["m","mm"],Le);var ni=Je("Minutes",!1);R("s",["ss",2],0,"second"),Me("s",me,we),Me("ss",me,le),Ee(["s","ss"],Fe);var ri,oi,ii=Je("Seconds",!1);for(R("S",0,0,(function(){return~~(this.millisecond()/100)})),R(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),R(0,["SSS",3],0,"millisecond"),R(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),R(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),R(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),R(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),R(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),R(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),Me("S",ge,ae),Me("SS",ge,le),Me("SSS",ge,de),ri="SSSS";ri.length<=9;ri+="S")Me(ri,ye);function si(e,t){t[je]=_e(1e3*("0."+e))}for(ri="S";ri.length<=9;ri+="S")Ee(ri,si);function ai(){return this._isUTC?"UTC":""}function li(){return this._isUTC?"Coordinated Universal Time":""}oi=Je("Milliseconds",!1),R("z",0,0,"zoneAbbr"),R("zz",0,0,"zoneName");var di=S.prototype;function ci(e){return Xn(1e3*e)}function ui(){return Xn.apply(null,arguments).parseZone()}function mi(e){return e}di.add=Br,di.calendar=Fr,di.clone=jr,di.diff=Jr,di.endOf=yo,di.format=to,di.from=no,di.fromNow=ro,di.to=oo,di.toNow=io,di.get=Qe,di.invalidAt=Po,di.isAfter=Kr,di.isBefore=Wr,di.isBetween=Yr,di.isSame=Ur,di.isSameOrAfter=zr,di.isSameOrBefore=Xr,di.isValid=wo,di.lang=ao,di.locale=so,di.localeData=lo,di.max=qn,di.min=Jn,di.parsingFlags=Mo,di.set=et,di.startOf=xo,di.subtract=Hr,di.toArray=So,di.toObject=$o,di.toDate=To,di.toISOString=Qr,di.inspect=eo,"undefined"!=typeof Symbol&&null!=Symbol.for&&(di[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),di.toJSON=ko,di.toString=Zr,di.unix=vo,di.valueOf=bo,di.creationData=Co,di.eraName=Go,di.eraNarrow=Eo,di.eraAbbr=Bo,di.eraYear=Ho,di.year=ze,di.isLeapYear=Xe,di.weekYear=Wo,di.isoWeekYear=Yo,di.quarter=di.quarters=Qo,di.month=pt,di.daysInMonth=ht,di.week=di.weeks=Ct,di.isoWeek=di.isoWeeks=At,di.weeksInYear=Xo,di.weeksInWeekYear=Jo,di.isoWeeksInYear=Uo,di.isoWeeksInISOWeekYear=zo,di.date=ei,di.day=di.days=Kt,di.weekday=Wt,di.isoWeekday=Yt,di.dayOfYear=ti,di.hour=di.hours=rn,di.minute=di.minutes=ni,di.second=di.seconds=ii,di.millisecond=di.milliseconds=oi,di.utcOffset=gr,di.utc=xr,di.local=yr,di.parseZone=br,di.hasAlignedHourOffset=vr,di.isDST=Tr,di.isLocal=$r,di.isUtcOffset=kr,di.isUtc=wr,di.isUTC=wr,di.zoneAbbr=ai,di.zoneName=li,di.dates=w("dates accessor is deprecated. Use date instead.",ei),di.months=w("months accessor is deprecated. Use month instead",pt),di.years=w("years accessor is deprecated. Use year instead",ze),di.zone=w("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",fr),di.isDSTShifted=w("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Sr);var pi=G.prototype;function hi(e,t,n,r){var o=yn(),i=h().set(r,t);return o[n](i,e)}function gi(e,t,n){if(c(e)&&(t=e,e=void 0),e=e||"",null!=t)return hi(e,t,n,"month");var r,o=[];for(r=0;r<12;r++)o[r]=hi(e,r,n,"month");return o}function fi(e,t,n,r){"boolean"==typeof e?(c(t)&&(n=t,t=void 0),t=t||""):(n=t=e,e=!1,c(t)&&(n=t,t=void 0),t=t||"");var o,i=yn(),s=e?i._week.dow:0,a=[];if(null!=n)return hi(t,(n+s)%7,r,"day");for(o=0;o<7;o++)a[o]=hi(t,(o+s)%7,r,"day");return a}function xi(e,t){return gi(e,t,"months")}function yi(e,t){return gi(e,t,"monthsShort")}function bi(e,t,n){return fi(e,t,n,"weekdays")}function vi(e,t,n){return fi(e,t,n,"weekdaysShort")}function Ti(e,t,n){return fi(e,t,n,"weekdaysMin")}pi.calendar=B,pi.longDateFormat=Y,pi.invalidDate=z,pi.ordinal=q,pi.preparse=mi,pi.postformat=mi,pi.relativeTime=Q,pi.pastFuture=ee,pi.set=D,pi.eras=Ao,pi.erasParse=Do,pi.erasConvertYear=_o,pi.erasAbbrRegex=Oo,pi.erasNameRegex=Io,pi.erasNarrowRegex=No,pi.months=lt,pi.monthsShort=dt,pi.monthsParse=ut,pi.monthsRegex=ft,pi.monthsShortRegex=gt,pi.week=kt,pi.firstDayOfYear=Pt,pi.firstDayOfWeek=Mt,pi.weekdays=Vt,pi.weekdaysMin=Lt,pi.weekdaysShort=Rt,pi.weekdaysParse=jt,pi.weekdaysRegex=Ut,pi.weekdaysShortRegex=zt,pi.weekdaysMinRegex=Xt,pi.isPM=tn,pi.meridiem=on,gn("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===_e(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),r.lang=w("moment.lang is deprecated. Use moment.locale instead.",gn),r.langData=w("moment.langData is deprecated. Use moment.localeData instead.",yn);var Si=Math.abs;function $i(){var e=this._data;return this._milliseconds=Si(this._milliseconds),this._days=Si(this._days),this._months=Si(this._months),e.milliseconds=Si(e.milliseconds),e.seconds=Si(e.seconds),e.minutes=Si(e.minutes),e.hours=Si(e.hours),e.months=Si(e.months),e.years=Si(e.years),this}function ki(e,t,n,r){var o=Cr(t,n);return e._milliseconds+=r*o._milliseconds,e._days+=r*o._days,e._months+=r*o._months,e._bubble()}function wi(e,t){return ki(this,e,t,1)}function Mi(e,t){return ki(this,e,t,-1)}function Pi(e){return e<0?Math.floor(e):Math.ceil(e)}function Ci(){var e,t,n,r,o,i=this._milliseconds,s=this._days,a=this._months,l=this._data;return i>=0&&s>=0&&a>=0||i<=0&&s<=0&&a<=0||(i+=864e5*Pi(Di(a)+s),s=0,a=0),l.milliseconds=i%1e3,e=De(i/1e3),l.seconds=e%60,t=De(e/60),l.minutes=t%60,n=De(t/60),l.hours=n%24,s+=De(n/24),a+=o=De(Ai(s)),s-=Pi(Di(o)),r=De(a/12),a%=12,l.days=s,l.months=a,l.years=r,this}function Ai(e){return 4800*e/146097}function Di(e){return 146097*e/4800}function _i(e){if(!this.isValid())return NaN;var t,n,r=this._milliseconds;if("month"===(e=ne(e))||"quarter"===e||"year"===e)switch(t=this._days+r/864e5,n=this._months+Ai(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(Di(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}}function Gi(e){return function(){return this.as(e)}}var Ei=Gi("ms"),Bi=Gi("s"),Hi=Gi("m"),Ii=Gi("h"),Oi=Gi("d"),Ni=Gi("w"),Vi=Gi("M"),Ri=Gi("Q"),Li=Gi("y"),Fi=Ei;function ji(){return Cr(this)}function Ki(e){return e=ne(e),this.isValid()?this[e+"s"]():NaN}function Wi(e){return function(){return this.isValid()?this._data[e]:NaN}}var Yi=Wi("milliseconds"),Ui=Wi("seconds"),zi=Wi("minutes"),Xi=Wi("hours"),Ji=Wi("days"),qi=Wi("months"),Zi=Wi("years");function Qi(){return De(this.days()/7)}var es=Math.round,ts={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ns(e,t,n,r,o){return o.relativeTime(t||1,!!n,e,r)}function rs(e,t,n,r){var o=Cr(e).abs(),i=es(o.as("s")),s=es(o.as("m")),a=es(o.as("h")),l=es(o.as("d")),d=es(o.as("M")),c=es(o.as("w")),u=es(o.as("y")),m=i<=n.ss&&["s",i]||i<n.s&&["ss",i]||s<=1&&["m"]||s<n.m&&["mm",s]||a<=1&&["h"]||a<n.h&&["hh",a]||l<=1&&["d"]||l<n.d&&["dd",l];return null!=n.w&&(m=m||c<=1&&["w"]||c<n.w&&["ww",c]),(m=m||d<=1&&["M"]||d<n.M&&["MM",d]||u<=1&&["y"]||["yy",u])[2]=t,m[3]=+e>0,m[4]=r,ns.apply(null,m)}function os(e){return void 0===e?es:"function"==typeof e&&(es=e,!0)}function is(e,t){return void 0!==ts[e]&&(void 0===t?ts[e]:(ts[e]=t,"s"===e&&(ts.ss=t-1),!0))}function ss(e,t){if(!this.isValid())return this.localeData().invalidDate();var n,r,o=!1,i=ts;return"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(o=e),"object"==typeof t&&(i=Object.assign({},ts,t),null!=t.s&&null==t.ss&&(i.ss=t.s-1)),r=rs(this,!o,i,n=this.localeData()),o&&(r=n.pastFuture(+this,r)),n.postformat(r)}var as=Math.abs;function ls(e){return(e>0)-(e<0)||+e}function ds(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n,r,o,i,s,a,l=as(this._milliseconds)/1e3,d=as(this._days),c=as(this._months),u=this.asSeconds();return u?(e=De(l/60),t=De(e/60),l%=60,e%=60,n=De(c/12),c%=12,r=l?l.toFixed(3).replace(/\.?0+$/,""):"",o=u<0?"-":"",i=ls(this._months)!==ls(u)?"-":"",s=ls(this._days)!==ls(u)?"-":"",a=ls(this._milliseconds)!==ls(u)?"-":"",o+"P"+(n?i+n+"Y":"")+(c?i+c+"M":"")+(d?s+d+"D":"")+(t||e||l?"T":"")+(t?a+t+"H":"")+(e?a+e+"M":"")+(l?a+r+"S":"")):"P0D"}var cs=sr.prototype;return cs.isValid=or,cs.abs=$i,cs.add=wi,cs.subtract=Mi,cs.as=_i,cs.asMilliseconds=Ei,cs.asSeconds=Bi,cs.asMinutes=Hi,cs.asHours=Ii,cs.asDays=Oi,cs.asWeeks=Ni,cs.asMonths=Vi,cs.asQuarters=Ri,cs.asYears=Li,cs.valueOf=Fi,cs._bubble=Ci,cs.clone=ji,cs.get=Ki,cs.milliseconds=Yi,cs.seconds=Ui,cs.minutes=zi,cs.hours=Xi,cs.days=Ji,cs.weeks=Qi,cs.months=qi,cs.years=Zi,cs.humanize=ss,cs.toISOString=ds,cs.toString=ds,cs.toJSON=ds,cs.locale=so,cs.localeData=lo,cs.toIsoString=w("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",ds),cs.lang=ao,R("X",0,0,"unix"),R("x",0,0,"valueOf"),Me("x",be),Me("X",Se),Ee("X",(function(e,t,n){n._d=new Date(1e3*parseFloat(e))})),Ee("x",(function(e,t,n){n._d=new Date(_e(e))})),r.version="2.30.1",o(Xn),r.fn=di,r.min=Qn,r.max=er,r.now=tr,r.utc=h,r.unix=ci,r.months=xi,r.isDate=u,r.locale=gn,r.invalid=y,r.duration=Cr,r.isMoment=$,r.weekdays=bi,r.parseZone=ui,r.localeData=yn,r.isDuration=ar,r.monthsShort=yi,r.weekdaysMin=Ti,r.defineLocale=fn,r.updateLocale=xn,r.locales=bn,r.weekdaysShort=vi,r.normalizeUnits=ne,r.relativeTimeRounding=os,r.relativeTimeThreshold=is,r.calendarFormat=Lr,r.prototype=di,r.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},r}()},1670:(e,t,n)=>{let r=0,o=Date.now();n.g.p3xr.nextId=()=>{const e=Date.now();o!==e&&(r=0,o=e);const t=++r,i=n.g.p3xr.random().reverse().padStart(15,"0");return`P3Xid${o.toString(16).padStart(12,"0").reverse()}${t.toString(16).padStart(3,"0").reverse()}${i}`}},1686:e=>{e.exports=function(e){return e}},1709:(e,t,n)=>{var r=n(9304),o=n(4188),i=n(2562),s=n(7060);e.exports=function(e){return function(t){t=s(t);var n=o(t)?i(t):void 0,a=n?n[0]:t.charAt(0),l=n?r(n,1).join(""):t.slice(1);return a[e]()+l}}},1743:(e,t,n)=>{p3xr.ng.component("p3xrButton",{template:n(2192),bindings:{p3xrLabel:"<",p3xrMdIcon:"@",p3xrFaIcon:"@",p3xrTooltipDirection:"@",p3xrClasses:"@"}})},1747:()=>{p3xr.ng.directive("p3xrMonitorInput",["$compile","$timeout",function(e,t){return{restrict:"A",scope:{controller:"="},link:function(n,r,o){let i,s=angular.element('\n        <div class="p3xr-monitor-input" ng-show="showPopup">\n            <md-toolbar class="md-primary" ng-class="{\'md-hue-1\': $ctrl.type !== \'quick\', \'md-hue-3\': $ctrl.type === \'quick\'}" md-theme="{{ $root.p3xr.state.themeLayout}}">\n                <div class="md-toolbar-tools">\n                    <p3xr-input maxlength="255" ng-model="$root.p3xr.state.monitorPattern" ng-change="$ctrl.setMonitorState()" style="width: 140px; font-size: 14px; font-family: \'Roboto Mono\' !important; font-weight: 500;"\n                 ng-model-options="{ debounce: modelOptions.debounce }"></p3xr-input>\n                </div>\n            </md-toolbar>\n        </div>');e(s)(n),r.append(s),n.modelOptions={debounce:1e3},n.$ctrl=n.controller,r.on("mouseenter",(function(){i&&t.cancel(i),n.$apply((function(){n.showPopup=!0}))})),r.on("mouseleave",(function(){i&&t.cancel(i),i=t((function(){n.$apply((function(){n.showPopup=!1}))}),n.modelOptions.debounce)}))}}}])},1813:(e,t,n)=>{p3xr.ng.component("p3xrError",{template:n(6974),controller:["$stateParams","$rootScope",function(e,t){this.$stateParams=e,t.p3xr.state.failed=!0}]})},1886:()=>{String.prototype.reverse||(String.prototype.reverse=function(){return this.split("").reverse().join("")})},1894:(e,t,n)=>{var r=n(6435),o=n(1505),i=n(9620),s=n(439),a=n(695),l=n(2003),d=n(1262),c=n(9221),u="[object Arguments]",m="[object Array]",p="[object Object]",h=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,g,f,x){var y=l(e),b=l(t),v=y?m:a(e),T=b?m:a(t),S=(v=v==u?p:v)==p,$=(T=T==u?p:T)==p,k=v==T;if(k&&d(e)){if(!d(t))return!1;y=!0,S=!1}if(k&&!S)return x||(x=new r),y||c(e)?o(e,t,n,g,f,x):i(e,t,v,n,g,f,x);if(!(1&n)){var w=S&&h.call(e,"__wrapped__"),M=$&&h.call(t,"__wrapped__");if(w||M){var P=w?e.value():e,C=M?t.value():t;return x||(x=new r),f(P,C,n,g,x)}}return!!k&&(x||(x=new r),s(e,t,n,g,f,x))}},2003:e=>{var t=Array.isArray;e.exports=t},2125:e=>{e.exports=function(){return!1}},2192:e=>{e.exports='<md-button ng-class="$ctrl.p3xrClasses" class="md-button-dark-hover-fix"> <md-icon ng-if="$ctrl.p3xrMdIcon !== undefined">{{ $ctrl.p3xrMdIcon }}</md-icon> <i ng-if="$ctrl.p3xrFaIcon !== undefined" class="{{ $ctrl.p3xrFaIcon }}"></i> <span ng-if="$root.$mdMedia(\'(min-width: 720px)\')">{{ $ctrl.p3xrLabel }}</span> <md-tooltip ng-if="$root.$mdMedia(\'(max-width: 720px)\')" md-direction="{{ $ctrl.p3xrTooltipDirection || \'bottom\' }}">{{ $ctrl.p3xrLabel }} </md-tooltip> </md-button> '},2227:(e,t,n)=>{p3xr.ng.component("p3xrMainKeyList",{template:n(9974),bindings:{p3xrValue:"=",p3xrValueBuffer:" =",p3xrKey:"<",p3xrResponse:"<"},controller:["$mdColors","p3xrCommon","p3xrSocket","$rootScope","p3xrDialogJsonView","p3xrDialogKeyNewOrSet","$scope","p3xrKeyPaging",function(e,t,r,o,i,s,a,l){const d=new l({$ctrl:this,$scope:a});this.$onInit=()=>{d.figurePaging()};const c=()=>{const e=p3xr.settings.keyPageCount*(this.page-1),t=e+p3xr.settings.keyPageCount;return this.p3xrValue.slice(e,t)};a.$watch("$ctrl.page",((e,t)=>c())),this.pageBasedList=(e,t)=>c(),this.copy=async e=>{await n.g.p3xr.clipboard({value:e.value}),t.toast(p3xr.strings.status.dataCopied)},this.downloadBuffer=async({$index:e,$event:n})=>{try{const t=new Blob([this.p3xrValueBuffer[e]]),n=window.URL.createObjectURL(t),r=document.createElement("a");r.href=n,r.download=`${this.p3xrKey}-${e}.bin`,document.body.appendChild(r),r.click(),window.URL.revokeObjectURL(n),document.body.removeChild(r)}catch(e){t.generalHandleError(e)}},this.appendValue=async e=>{try{const{index:t,value:n}=e;await s.show({type:"append",$event:e.$event,model:{type:"list",key:this.p3xrKey}}),o.$broadcast("p3xr-refresh-key")}catch(e){t.generalHandleError(e)}},this.editValue=async e=>{try{const{index:t,value:n}=e;await s.show({type:"edit",$event:e.$event,model:{type:"list",value:n.length<p3xr.settings.maxValueAsBuffer?n:this.p3xrValueBuffer[t],index:e.index,key:this.p3xrKey}}),o.$broadcast("p3xr-refresh-key")}catch(e){t.generalHandleError(e)}},this.deleteListElement=async e=>{try{await t.confirm({event:e.$event,message:p3xr.strings.confirm.deleteListItem});await r.request({action:"key-list-delete-index",payload:{key:this.p3xrKey,index:e.index}});o.$broadcast("p3xr-refresh-key")}catch(e){t.generalHandleError(e)}},this.showJson=e=>{const{value:t}=e;i.show({value:t})}}]})},2248:(e,t,n)=>{var r=n(4275),o=n(2382),i=n(2003),s=n(2615),a=n(7164),l=n(8059);e.exports=function(e,t,n){for(var d=-1,c=(t=r(t,e)).length,u=!1;++d<c;){var m=l(t[d]);if(!(u=null!=e&&n(e,m)))break;e=e[m]}return u||++d!=c?u:!!(c=null==e?0:e.length)&&a(c)&&s(m,c)&&(i(e)||o(e))}},2249:(e,t,n)=>{var r=n(8148),o=n(1398),i=n(5603),s=n(1543),a=/^\[object .+?Constructor\]$/,l=Function.prototype,d=Object.prototype,c=l.toString,u=d.hasOwnProperty,m=RegExp("^"+c.call(u).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!i(e)||o(e))&&(r(e)?m:a).test(s(e))}},2278:e=>{e.exports=(e,t)=>{e.state({name:"settings",url:"/settings",template:"<p3xr-settings></p3xr-settings>"}),e.state({name:"main",url:"/main",template:"<p3xr-main></p3xr-main>"}),e.state({name:"console",url:"/console",template:"<p3xr-console></p3xr-console>"}),e.state("main.statistics",{url:"/statistics",template:"<p3xr-main-statistics></p3xr-main-statistics>",params:{action:null,expandedNodes:null,response:null}}),e.state("main.key",{url:"/key/:key",template:"<p3xr-main-key></p3xr-main-key>",params:{resize:null}}),e.state("socketio-error",{url:"/socketio-error",template:"<p3xr-error></p3xr-error>",params:{error:null}})}},2347:e=>{e.exports=function(e){return function(t){return e(t)}}},2382:(e,t,n)=>{var r=n(2744),o=n(2620),i=Object.prototype,s=i.hasOwnProperty,a=i.propertyIsEnumerable,l=r(function(){return arguments}())?r:function(e){return o(e)&&s.call(e,"callee")&&!a.call(e,"callee")};e.exports=l},2387:(e,t,n)=>{p3xr.ng.component("p3xrMainTreecontrolControls",{template:n(2498),bindings:{p3xrMainRef:"<"},controller:["$cookies","$rootScope","p3xrCommon","$timeout","p3xrDialogTreecontrolSettings","$scope",function(e,t,n,r,o,i){this.treeExpandAll=()=>{try{t.$broadcast("p3xr-main-treecontrol",!1),p3xr.ui.overlay.show({message:p3xr.strings.status.treeExpandAll});let e=[];const n=(t,r=0)=>{if(delete t.$inview,"folder"===t.type){e.push(t);for(let e of t.children)n(e,r++)}};for(let e of t.keysTreeRendered)n(e);t.expandedNodes=e}catch(e){n.generalHandleError(e)}finally{p3xr.ui.overlay.hide(),r((()=>{t.$broadcast("p3xr-main-treecontrol",!0)}))}},this.treeCollapseAll=()=>{t.$broadcast("p3xr-main-treecontrol",!1),t.expandedNodes=[],r((()=>{t.$broadcast("p3xr-main-treecontrol",!0)}))},this.page=e=>{const{page:n}=e;switch(n){case"prev":t.p3xr.state.page-1>=1&&(t.p3xr.state.page=t.p3xr.state.page-1);break;case"next":t.p3xr.state.page+1<=t.p3xr.state.pages&&(t.p3xr.state.page=t.p3xr.state.page+1);break;case"last":t.p3xr.state.page=t.p3xr.state.pages;break;case"first":t.p3xr.state.page=1}r((()=>{t.$digest()}))},this.pageChange=()=>{t.p3xr.state.page<1?t.p3xr.state.page=1:t.p3xr.state.page>t.p3xr.state.pages&&(t.p3xr.state.page=t.p3xr.state.pages)},this.openTreeSettingDialog=e=>{e.p3xrMainRef=this.p3xrMainRef,o.show(e)},this.search="",this.$onInit=()=>{this.search=t.p3xr.state.search},this.onSearchChange=()=>{t.p3xr.settings.searchClientSide?t.p3xr.state.redisChanged=!0:this.p3xrMainRef.refresh(),t.p3xr.state.page=1},this.treeDividerChange=()=>{t.p3xr.state.redisChanged=!0,t.$broadcast("p3xr-refresh")}}]})},2404:()=>{p3xr.ng.factory("p3xrRedisParser",["$rootScope",function(e){return new function(){const t=this;this.array=e=>{const{line:t}=e;let{divider:n,fieldDivider:r}=e;void 0===n&&(n=","),void 0===r&&(r="=");const o=t.split(n),i={};for(let e of o){const t=e.split(r),n=t[1]??"";i[t[0]]=n.trim()}return i},this.info=e=>{const n=e.split("\n"),r={};let o,i,s=!1,a=0;for(let e of n)if(e.startsWith("#")){if(s)continue;s=!0,void 0!==o&&(r[o]=i),o=e.substring(1).toLowerCase().trim(),i={}}else if(e.length>2){let n,r;if(s=!1,e.includes(":"))n=e.split(":"),r=n[1]??"",i[n[0]]=r.includes(",")?t.array({line:r.trim()}):r.trim();else{let[o,s]=e.split(/ (.+)/);n=o,r=s??"",r=r.split(",").map((e=>""+(a+"-"+e.trim()))).join(","),i.hasOwnProperty("db0")?Object.assign(i.db0,r.includes(",")?t.array({line:r.trim()}):r.trim()):i.db0=r.includes(",")?t.array({line:r.trim()}):r.trim(),a++}}return void 0!==o&&Object.keys(i).length>0&&(r[o]=i),console.warn("info",r),r.keyspaceDatabases={},r.hasOwnProperty("keyspace")&&Object.keys(r.keyspace).forEach((e=>{e=parseInt(e.substring(2)),r.keyspaceDatabases[e]=!0})),r},this.keysToTreeControl=t=>{let{keys:n}=t,{divider:r}=t;void 0===r&&(r=p3xr.settings.redisTreeDivider);const o=[],i=[];e.expandedNodes=[];const s=(t,n=0,a=o)=>{let l=!1;if(n+1<t.length)for(let e of a)e.label===t[n]&&"folder"===e.type&&(l=e);if(!l){const o={label:t[n],key:t.slice(0,n+1).join(r),children:[],childCount:0,type:n+1===t.length?"element":"folder"};"element"===o.type&&(o.keysInfo=p3xr.state.keysInfo[o.key]),a.push(o),l=o;for(let t of e.savedExpandedNodes)t.key===l.key&&i.push(l)}n+1<t.length&&s(t,n+1,l.children)};e.expandedNodes=i;for(let e of n){let t=""===r?[e]:e.split(r);s(t)}const a=e=>{e.childCount=e.children.filter((e=>"element"===e.type)).length;for(let t of e.children)a(t),"folder"===t.type&&(e.childCount+=t.childCount)};for(let e of o)a(e);return e.savedExpandedNodes=[],o},this.console=new function(){this.parse=e=>{if("object"==typeof e){let t="";return Object.keys(e).forEach((n=>{""!==t&&(t+="\n"),t+=e[n]})),t}return e}}}}])},2422:(e,t,n)=>{let r=-1;const o=n.g.htmlEncode;p3xr.ng.component("p3xrConsole",{template:n(9077),bindings:{type:"@"},controller:["p3xrCommon","p3xrSocket","$state","$rootScope","p3xrRedisParser","$mdDialog","$timeout","$scope",function(e,t,i,s,a,l,d,c){const u=()=>JSON.parse(localStorage.getItem("console-history")||"[]");let m,p,h,g,f,x,y,b=0;const v=e=>{x.append(`<span data-index="${b++}" class="p3xr-console-content-output-item">${e}<br/></span>`);let t=x.find(".p3xr-console-content-output-item");t.length>256&&t.slice(0,t.length-256).remove()};s.hasConnected()||i.go("main");const T=n(4503);this.dragStart=()=>{c.$emit("p3xr-quick-console",{start:!0})},this.dragEnd=()=>{c.$emit("p3xr-quick-console",{start:!1})},this.closeConsole=()=>{c.$emit("p3xr-quick-console-quit")};const S=()=>{let e,t=0;e=[p,h,g];for(let n of e)t+=n.outerHeight();const n=$window.height();let r;r="quick"===this.type?105:70;const o=Math.max(n-t-r,0);m.height(o),m.css("max-height",`${o}px`),console.log("outputHeight",o)},k=T(S,p3xr.settings.debounce),w=e=>{if(!1===p3xr.state.monitor)return;let t=o(String(e.message));v(`<strong>PubSub channel:</strong> ${e.channel}<br/><pre>${t}</pre>`),y.scrollTop=y.scrollHeight};this.$onInit=()=>{m=$("#p3xr-console-content"),p=$("#p3xr-layout-header-container"),h=$("#p3xr-layout-footer-container"),g=$("#p3xr-console-header"),x=$("#p3xr-console-content-output"),y=m[0],$window.on("resize",k),k(),t.ioClient.on("pubsub-message",w),setTimeout((()=>{f=$("#p3xr-console-input"),f.on("keydown",this.action),this.setTheme(),this.clearConsole()}))},this.setTheme=()=>{const t={borderColor:e.inputBorderColor(),backgroundColor:e.inputBackground(),color:e.inputColor()};f.css(t)},c.$on("p3xr-theme-switched",(()=>{this.setTheme()})),this.$postLink=()=>{S()},this.$onDestroy=function(){$window.off("resize",k),t.ioClient.removeListener("pubsub-message",w)},this.actionEnter=async e=>{let n;angular.element(document.getElementById("p3xr-console-autocomplete")).controller("mdAutocomplete").hidden=!0;const i=String(e).trim();if(""!==i)try{n=await t.request({action:"console",payload:{command:i}});const e=o(String(a.console.parse(n.result)));v(`${i}<br/><pre>${e}</pre>`),n.hasOwnProperty("database")&&(s.p3xr.state.currentDatabase=n.database,s.p3xr.state.redisChanged=!0),c.searchText="",c.$digest()}catch(e){console.error(e),v(`${i}<br/><pre>${p3xr.strings.code[e.message]||e.message}</pre>`)}finally{let e;e=void 0!==n?n.generatedCommand:i;let t=u();const o=t.indexOf(e);o>-1&&t.splice(o,1),t.unshift(e),t.length>20&&(t=t.slice(0,20)),localStorage.setItem("console-history",JSON.stringify(t)),r=-1,y.scrollTop=y.scrollHeight,x.scrollTop(x.prop("scrollHeight")),"quick"===this.type&&s.$broadcast("p3xr-refresh")}},this.action=e=>{switch(e.keyCode){case 40:{e.preventDefault(),e.stopPropagation();const t=u();if(t.length<1)return;-1===r&&(r=t.length),r--,r<0&&(r=t.length-1),c.searchText=t[r];break}case 38:{e.preventDefault(),e.stopPropagation();const t=u();if(t.length<1)return;r++,r>=t.length&&(r=0),c.searchText=t[r];break}default:r=-1}},this.clearConsole=()=>{x.empty(),v("<strong>"+s.p3xr.strings.label.welcomeConsole+"</strong>"),v(s.p3xr.strings.label.welcomeConsoleInfo+"<br/>"),f.focus()},this.getMatches=e=>p3xr.state.commands.filter((t=>t.includes(e))),this.setMonitorState=async()=>{try{console.log("$rootScope.p3xr.state.monitor",s.p3xr.state.monitor),response=await t.request({action:"set-subscription",payload:{subscription:s.p3xr.state.monitor,subscriberPattern:s.p3xr.state.monitorPattern}})}catch(t){e.generalHandleError(t),s.p3xr.state.monitor=!1,c.$digest()}},this.commands=e=>{l.show({controller:["$scope","$mdDialog",function(e,t){e.ok=function(){t.hide()},e.$watch((function(){return $("#p3xr-console-commands").parent().height()}),((t,n)=>{e.height=t}))}],fullscreen:!0,targetEvent:e.$event,template:'\n<md-dialog aria-label="{{ $root.p3xr.strings.intention.commands }}" layout-fill>\n  <md-toolbar md-theme="{{$root.p3xr.state.themeLayout}}">\n      <div class="md-toolbar-tools">\n        <md-icon>keyboard</md-icon>\n        &nbsp;\n        {{ $root.p3xr.strings.intention.commands }}\n        <span flex></span>\n         <md-button class="md-icon-button" ng-click="ok()" aria-label="{{ $root.p3xr.strings.intention.close }}">\n           <md-icon>close</md-icon>\n      </md-button>\n      </div>\n    </md-toolbar>\n\n    <md-dialog-content flex>\n      <div id="p3xr-console-commands">\n        <iframe seamless="seamless" src="https://redis.io/commands" frameborder="0" style="width: 100%; height: {{ height - 15 }}px;"></iframe>\n      </div>\n    </md-dialog-content>\n\n    <md-dialog-actions layout="row">\n      <span flex></span>\n      <md-button ng-click="ok()"  class="md-raised md-primary" aria-label="{{ $root.p3xr.strings.intention.close }}">\n        <md-icon>close</md-icon>\n        {{ $root.p3xr.strings.intention.close }}\n      </md-button>\n    </md-dialog-actions>\n</md-dialog>\n          '})}}]})},2462:(e,t,n)=>{p3xr.ng.component("p3xrMainKeyString",{template:n(6055),bindings:{p3xrValue:"=",p3xrValueBuffer:" =",p3xrKey:"<",p3xrResponse:"<"},controller:["p3xrSocket","p3xrCommon","$rootScope","p3xrDialogJsonView","p3xrDialogJsonEditor","$scope",function(e,t,r,o,i,s){this.setBufferUpload=()=>{const e=document.getElementById("p3xr-main-key-string-upload-buffer");e.value="",e.click()},this.bufferDisplay=e=>"("+p3xr.settings.prettyBytes(e.byteLength)+")",s.readFileAsBuffer=async n=>{const o=n.target.files[0];if(!o)return;const i=new FileReader;i.onload=async n=>{const o=n.target.result;try{if(!0===this.editable)return await t.confirm({message:p3xr.strings.confirm.uploadBuffer}),!0===this.buffer?this.p3xrValueBuffer=o:this.p3xrValue=o,t.toast(p3xr.strings.confirm.uploadBufferDone),void s.$digest()}catch(e){return void t.generalHandleError(e)}try{await t.confirm({message:p3xr.strings.confirm.uploadBuffer}),p3xr.ui.overlay.show();await e.request({action:"key-set",payload:{type:this.p3xrResponse.type,value:o,key:this.p3xrKey}});t.toast(p3xr.strings.confirm.uploadBufferDoneAndSave),window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/key-set"}),r.$broadcast("p3xr-refresh-key")}catch(e){t.generalHandleError(e)}finally{p3xr.ui.overlay.hide()}},i.onerror=e=>{t.generalHandleError(e)},i.readAsArrayBuffer(o)},this.copy=async()=>{await n.g.p3xr.clipboard({value:this.p3xrValue}),t.toast(p3xr.strings.status.dataCopied)},this.downloadBuffer=async()=>{try{const e=new Blob([this.p3xrValueBuffer]),t=window.URL.createObjectURL(e),n=document.createElement("a");n.href=t,n.download=`${this.p3xrKey}.bin`,document.body.appendChild(n),n.click(),window.URL.revokeObjectURL(t),document.body.removeChild(n)}catch(e){t.generalHandleError(e)}},this.editable=!1,this.buffer=!1,this.originalValue=void 0,this.edit=()=>{this.p3xrValue.length<p3xr.settings.maxValueAsBuffer?(this.originalValue=p3xr.clone(this.p3xrValue),this.buffer=!1):(this.originalValue=p3xr.clone(this.p3xrValueBuffer),this.buffer=!0),this.editable=!0},this.cancelEdit=()=>{console.log("cancelEdit",this.originalValue),!0===this.buffer?this.p3xrValueBuffer=this.originalValue:this.p3xrValue=this.originalValue,this.editable=!1,this.buffer=!1},this.validateJson=!1,this.save=async()=>{if(!0===this.validateJson)try{JSON.parse(this.buffer?this.p3xrValueBuffer:this.p3xrValue)}catch(e){return void t.toast({message:p3xr.strings.label.jsonViewNotParsable})}try{p3xr.ui.overlay.show();const t={action:"key-set",payload:{type:this.p3xrResponse.type,value:this.buffer?this.p3xrValueBuffer:this.p3xrValue,key:this.p3xrKey}};await e.request(t);window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/key-set"}),this.editable=!1}catch(e){t.generalHandleError(e)}finally{p3xr.ui.overlay.hide(),r.$broadcast("p3xr-refresh-key")}},this.jsonViewer=e=>{o.show({event:e.$event,value:this.p3xrValue})},this.jsonEditor=async e=>{try{const t=await i.show({event:e.$event,value:this.p3xrValue});this.p3xrValue=t.obj,await this.save()}catch(e){t.generalHandleError(e)}},this.formatJson=async()=>{try{this.p3xrValue=JSON.stringify(JSON.parse(this.p3xrValue),null,p3xr.settings.jsonFormat),await this.save()}catch(e){t.toast({message:p3xr.strings.label.jsonViewNotParsable})}}}]})},2486:e=>{e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},2495:e=>{e.exports=()=>{angular.element(document).ready((()=>{try{const e=document.getElementById("p3xr-redis-ui-bootstrap");angular.bootstrap(e,["p3xr-redis-ui"])}catch(e){e&&e.message&&e.message.includes("bootstrapped")?location.reload():console.error(e)}}))}},2498:e=>{e.exports='<div style="float:left"> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.treeExpandAll()"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.expandAll}}</md-tooltip> <md-icon>keyboard_arrow_down</md-icon> </md-button> <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.treeCollapseAll()" id="p3xr-main-treecontrol-controls-collapse-all"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.collapseAll}}</md-tooltip> <md-icon>keyboard_arrow_up</md-icon> </md-button> <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.p3xrMainRef.refresh( { keepTree: true })"> <md-tooltip>{{ $root.p3xr.strings.intention.refresh}}</md-tooltip> <md-icon>refresh</md-icon> </md-button> <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.form.treeSettings.label.formName}}</md-tooltip> <md-icon>settings</md-icon> </md-button> <span> <p3xr-input id="p3xr-main-treecontrol-controls-tree-divider-input" ng-change="$ctrl.treeDividerChange()" style="width:14px;font-size:14px;text-align:center;font-family:\'Roboto Mono\'!important;font-weight:500" ng-model="$root.p3xr.settings.redisTreeDivider" ng-model-options="{debounce: 666 }"></p3xr-input> <md-tooltip>{{ $root.p3xr.strings.form.treeSettings.field.treeSeparator }}</md-tooltip> </span> <span ng-if="$root.p3xr.state.cfg.treeDividers.length > 0"> <md-select ng-model="$root.p3xr.settings.redisTreeDivider" ng-change="$ctrl.treeDividerChange()" class="p3xr-main-treecontrol-controls-divider-select md-no-underline" md-container-class="p3xr-main-treecontrol-controls-divider-select-container"> <md-option ng-repeat="divider in $root.p3xr.state.cfg.treeDividers" ng-value="divider"> {{ divider }} </md-option> </md-select> <md-tooltip>{{ $root.p3xr.strings.form.treeSettings.field.treeSeparatorSelector }}</md-tooltip> </span> </div> <span ng-if="$root.p3xr.state.pages > 1" class="p3xr-main-treecontrol-controls-pager"> <md-tooltip>{{ $root.p3xr.strings.status.keyCount({keyCount: $root.p3xr.state.keysRaw.length }) }}</md-tooltip> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.page({ page: \'first\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.first}}</md-tooltip> <md-icon>skip_previous</md-icon> </md-button> <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.page({ page: \'prev\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.prev}}</md-tooltip> <md-icon>keyboard_arrow_left</md-icon> </md-button> <p3xr-input type="number" style="width:48px" step="1" min="1" ng-maxlength="$root.p3xr.state.pages" ng-change="$ctrl.pageChange()" ng-model="$root.p3xr.state.page"></p3xr-input> / {{ $root.p3xr.state.pages }} <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.page({ page: \'next\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.next}}</md-tooltip> <md-icon>keyboard_arrow_right</md-icon> </md-button> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.page({ page: \'last\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.last}}</md-tooltip> <md-icon>skip_next</md-icon> </md-button> </span> <span ng-if="$root.p3xr.state.pages < 2" class="p3xr-main-treecontrol-controls-keycount"> {{ $root.p3xr.strings.status.keyCount({keyCount: $root.p3xr.state.keysRaw.length }) }}&nbsp; </span> <div class="p3xr-main-treecontrol-controls-search"> <span> <p3xr-input placeholder="{{ $root.p3xr.settings.searchClientSide ? $root.p3xr.strings.page.treeControls.search.placeholderClient : $root.p3xr.strings.page.treeControls.search.placeholderServer }}" ng-model="$root.p3xr.state.search" ng-class="{ \'withSearch\': $root.p3xr.state.search.length > 0, \'withoutSearch\': $root.p3xr.state.search.length  === 0}" ng-enter="$ctrl.onSearchChange()" tooltip=""></p3xr-input> <md-tooltip md-direction="bottom">{{ $root.p3xr.strings.page.treeControls.search.infoDetails }}</md-tooltip> </span> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.onSearchChange()"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.search.search}}</md-tooltip> <md-icon>search</md-icon> </md-button> <span ng-if="$root.p3xr.state.search.length > 0"> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$root.p3xr.state.search = \'\'; $ctrl.onSearchChange()"><md-tooltip>{{ $root.p3xr.strings.page.treeControls.search.clear}}</md-tooltip> <md-icon>clear</md-icon> </md-button> </span> <span style="display:inline-block;position:relative;top:-2px" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.addKeyRoot }}</md-tooltip> <md-icon ng-click="$ctrl.p3xrMainRef.addKey({event: $event})" md-theme="{{ $root.p3xr.state.themeCommon }}" class="md-warn">add</md-icon> </span> </div> '},2514:e=>{const t={error:{cleared_license:"Cleared license",invalid_license:"Invalid license",server_error:"Server error, please try again"},title:{donate:"Donate",jsonRecursive:"Expanding all leafs",name:"P3X Redis UI",nameDonated:"P3X Redis UI+",main:"You may choose a Redis connection to connect from the left bottom menu.",statistics:"Statistics",error:"Error",connectingRedis:"Connecting to Redis ...",socketioConnectError:"Socket.IO Error",db:"DB",server:"Server",clients:"Clients",memory:"Memory",persistence:"Persistence",stats:"Statistics",replication:"Replication",cpu:"CPU",cluster:"Cluster"},confirm:{uploadBuffer:"Are you sure to upload this binary data?",uploadBufferDone:"The binary data is uploaded",uploadBufferDoneAndSave:"The binary data is uploaded and saved on the server",title:"Confirm",alert:"Alert",info:"Info",deleteListItem:"Are you sure to delete this list item?",deleteHashKey:"Are you sure to delete this hash key item?",deleteStreamTimestamp:"Are you sure to delete this stream timestamp?",deleteSetMember:"Are you sure to delete this set member?",deleteZSetMember:"Are you sure to delete this sorted set member?",deleteConnection:"Confirm",deleteConnectionText:"Are you sure to delete this Redis connection?",deleteNode:"Are you sure to delete this Redis node?",deleteAllKeys:e=>`Delete this tree and all it's keys (${e.key})?`,socketioConnectError:"Socket.IO cannot connect to the server, you can reload and try resolve the connection error yourself, the client does not know how to solve it itself.",deleteKey:"Are you sure to delete this key?",rename:{title:"Are you sure to rename this key?",textContent:"If you click the rename button, it will rename this key forever.",placeholder:"The Redis key (required)"},ttl:{title:"Are you sure to change this keys's TTL?",textContent:"If you click the change TTL button, it will rename this key's time to live, empty will persist this key keep forever.",placeholder:"The Redis key's TTL (integer or empty)",placeholderPlaceholder:"Empty means it persists forever, otherwise the used integer.",convertTextToTime:"Convert text to time",convertTextToTimePlaceholder:"Eg. 1d will be 86400"},license:{title:"Enable donated license?",textContent:"If you want to use the donated functions, please contact alabard@gmail.com to request a license. The donation is $1/month.",placeholder:"License key"}},language:{en:"English",zn:"中文 / Chinese",ru:"Русский / Russian"},intention:{copy:"Copy",downloadBuffer:"Download binary",setBuffer:"Upload binary",saveWithFormatJson:"Save with format",formatJson:"Format Json",pubsubMonitor:"PubSub Monitor",language:"Language",ok:"OK",addKey:"Add to this key",addKeyRoot:"Add a root key",reloadKey:"Reload key",reload:"Reload",close:"Close",commands:"Commands",view:"View",statistics:"Statistics",refresh:"Refresh",clear:"Clear",rename:"Rename",main:"Home",cancel:"Cancel",theme:"Theme",github:"GitHub",githubRepo:"Repository",githubRelease:"Releases",githubChangelog:"Change log",settings:"Settings",connect:"Connect",disconnect:"Disconnect",overview:"Overview",console:"Console",noConnections:"No connections, add a connection in the settings menu.",noConnectionsInSettings:"No connections, you may add a NEW CONNECTION above.",connectionAdd:"New connection",extend:"Extend",collapse:"Collapse",add:"Add",edit:"Edit",save:"Save",ttl:"Set TTL",license:"Set license",delete:"Delete",remove:"Remove",sure:"Sure",testConnection:"Test connection",getKey:"Loading Redis key and associated data ...",jsonViewShow:"Display JSON",jsonViewEditor:"Edit JSON",quickConsole:"Quick Console"},label:{id:{nodeId:"Node ID",id:"Connection ID",info:"If you do not wan't to change the properties of: sshPassword, sshPrivateKey, password, tlsCrt, tlsKey, tlsCa, please enter the ID of the connection in those propertes to keep the property values intact. If you want the same logic in the node password, then enter the node ID in the node password."},secureFeature:"If you see a value that starts with a P3X an look like the same, it is a secure feature. To change the settings, just replace these settings with empty or something else and they will be saved. If you do not change the settings, the settings will be kept as they are on the server.",ssh:{on:"SSH on",off:"SSH off",sshHost:"SSH Host",sshPort:"SSH port",sshUsername:"SSH username",sshPassword:"SSH password",sshPrivateKey:"SSH private key"},isBuffer:e=>`[object ArrayBuffer] means that the value is binary data or the value is bigger than ${e.maxValueAsBuffer}`,streamValue:'Stream field and value is a oneliner. Eg.: field1 value1 "field 2" "value 2"',streamTimestampId:"'*' means auto generated or the specification as <millisecondsTime>-<sequenceNumber>",unableToLoadKey:({key:e})=>`Unable to load this key: ${e}. Possible, the key was deleted. The exact error is in the console.`,bigJson:"This JSON object is over 10 kb, so make sure you know what you doing, because some functions can be slow rendering.",addNode:"Add node",validateJson:"Validate JSON",reducedFunction:"Reduced functionality",tooManyKeys:e=>`For the full maximum functions allowed keys total is ${e.maxLightKeysCount} count. This database has over the allowed keys in total ${e.count}. The key sorting and the additional fancy tree information is disabled. The searching is happening only on the server instead the client search.`,redisCommandNotFound:"No Redis command match found ...",treeKeyStore:"The sorting (natural compare) is executed on the client aka the browser, which means it has a penalty for big large sets, like over 10k keys, it might add a little time to the page rendering. There is no key sorting in Redis, only like this.",socketIoTimeout:e=>`The Socket.IO timed out for this request (max ${e.timeout/1e3} seconds) ...`,resizerInfo:e=>`Left or right panel minimum width is ${e.width}px`,jsonViewNotParsable:"This value is not JSON parsable  ",ttlTitle:"Set the TTL in seconds",passwordSecure:"The password might will be empty, but still it will show characters, this is a security feature.",tlsWithoutCert:"Enable TLS without additional certificate",tlsRejectUnauthorized:"Reject unauthorized certificate",tlsSecure:"If you see a TLS configuration that starts with a P3X or all the TLS settings look like the same, it is a secure feature. To change the settings, just replace these settings with empty or something else and they will be saved. If you do not change the TLS settings, the settings will be kept as they are on the server.",treeSeparatorEmpty:"If the tree separator is empty, the tree wil have no nested nodes, just a pure list",treeSeparatorEmptyNote:"No nested nodes, just a pure list",welcomeConsole:"Welcome to the Redis Console",welcomeConsoleInfo:"Cursor UP or DOWN history is enabled",redisListIndexInfo:"Empty to append, -1 to prepend or save it to the position shown.",console:"Console",connectiondAdd:"Add connection",connectiondEdit:"Edit connection",connectiondView:"View connection",connections:"Connections",keysSort:{on:"Key sorting on",off:"Key sorting off"},cluster:{on:"Cluster on",off:"Cluster off"},sentinel:{on:"Sentinel on",off:"Sentinel off",name:"Sentinel name"},readonly:{on:"Readonly on",off:"Readonly off"},theme:{light:"Light",dark:"Dark enterprise",darkNeu:"Dark",darkoBluo:"Darko bluo",enterprise:"Enterprise",redis:"Redis",matrix:"Matrix"},connected:e=>`Connected: ${e.name}`,tree:"Tree",askAuth:"Ask for authorization"},status:{dataCopied:"The data is in the clipboard",licenseSaved:"License saved",nodeRemoved:"Node removed",keyIsNotExisting:"This key could have been deleted or expired.",keyCount:e=>0===e.keyCount?"No key":1===e.keyCount?"1 key":`${e.keyCount} keys`,treeExpandAll:"Expand all tree leafs, this has a cost, might take time ...",noRedisKeys:"There are no keys in this database.",redisConnected:"Redis connected successful",reloadingDataInfo:"Reloading Redis data info",added:"Added",saved:"Updated",cancelled:"Cancelled",deleted:"Deleted",savedRedis:"Redis data is saved",redisDisconnected:e=>`The current connection had an error: ${e.error.message}`,dbChanged:e=>`The db index set to ${e.db}. `,treeDeleted:e=>`The tree key was deleted (${e.key}).`,deletedKey:e=>`The key was deleted (${e.key}).`,renamedKey:"This key has been renamed",ttlChanged:"This key's TTL has been changed",notInteger:"This input is not an integer",persisted:"This key is persisted forever",set:"The key is set/added"},code:{"delete-connection":"This connection was deleted, so you are disconnected to this Redis instance.","save-connection":"This connection was changed, so you are disconnected to this Redis instance. You may re-connect.","readonly-connections":"Connections add/save/delete are readonly only!","readonly-connection-mode":"This connection is read only mode!","list-out-of-bounds":"This list index is out of bounds","donation-ware-feature":"This feature is present in the donation version.","auto-connection-failed":"Possible, the connection was removed and the auto connection failed, because of this.",invalid_console_command:"This command is not working via the GUI."},form:{error:{required:"Required",port:"The port is between 1-65535",invalid:"The form is invalid"},connection:{label:{name:"Name",host:"Hostname",port:"Port",password:"Password",username:"Username"}},treeSettings:{maxValueDisplay:"Max value display string length",maxValueDisplayInfo:"If max value display zero, it shows everything, if it is bigger than 0, it will truncate. If it is -1, it will not show the value without edit for strings, for others, it display everything.",maxKeys:"The max key count",maxKeysInfo:"So that the GUI does not crash, we limit the max key count.",keyCount:()=>`Number of keys: ${p3xr.state.keysRaw.length}`,label:{animation:"Use animation",noAnimation:"No animation",jsonFormatTwoSpace:"Format JSON with 2 spaces",jsonFormatFourSpace:"Format JSON with 4 spaces",formName:"Redis settings",searchModeClient:"Client search mode",searchModeServer:"Server search mode",searchModeStartsWith:"Search with starts with mode",searchModeIncludes:"Search includes mode"},field:{treeSeparator:"Tree separator",treeSeparatorSelector:"Tree separator selector",page:"Tree paging count",keyPageCount:"Key paging count",keysSort:"Sort the keys",searchMode:"Search mode",searchModeStartsWith:"Search starts with / includes"},error:{keyPageCount:"The key page count must be an integer between 5 - 100",page:"The page count must be an integer between 10 - 1000",maxValueDisplay:"The maximum display value must be an integer between -1 and 32768",maxKeys:"The maximum key count value must be an integer between 100 and 100000"}},key:{label:{formName:{add:"Add new Redis key",edit:"Edit Redis key",append:"Add to existing Redis key"}},field:{streamTimestamp:"Timestamp",key:"Key",type:"Type",index:"Index",hashKey:"Hash key",score:"Score",value:"Value"},error:{streamTimestamp:"The timestamp is required, either Redis format or as *",key:"The key is, at least, one character",hashKey:"The hash table key is at least one character",score:"The sorted set score is required",value:"The value is required"}},main:{label:{database:"DB"}}},page:{overview:{noConnected:"There is no connection to Redis.",overviewClients:"List the connected by the count of clients",connectedCount:e=>1===e.length?"1 client":`${e.length} clients`},key:{label:{key:"Key",encoding:"Encoding",length:"Size",ttl:"TTL",ttlTitle:"Time To Live",type:"Type",ttlNotExpire:"does not expire",lengthString:"bytes",lengthItem:"items",actions:"Actions"},list:{table:{index:"Index",value:"Value"}},hash:{table:{hashkey:"Hashkey",value:"Value"}},set:{table:{value:"Member"}},zset:{table:{value:"Member",score:"Score"}},stream:{table:{timestamp:"Timestamp ID",field:"Field",value:"Value"}}},treeControls:{settings:"Tree settings",expandAll:"Expand all",collapseAll:"Collapse all",search:{search:"Search in the keys",clear:"Clear current search to set empty",placeholderClient:"Search client side",placeholderServer:"Search server side",info:`The client side search means, that it matches the text in the search input. The server side search means, that is it like search in the keys patterns as *{search-text}*. For large search sets, it is better to use server side searching. For smaller search sets, it is better to use client side search mode. If the keys count is over ${p3xr.settings.maxLightKeysCount}, you can only search on server side.`,largeSetInfo:"In a large set, client side searching is disabled. so right now only server side searching is possible.",infoDetails:"To find out how the search works, please check out the settings"},pager:{next:"Next",prev:"Previous",first:"First",last:"Last"}}},time:{years:"years",months:"months",days:"days",year:"year",month:"month",day:"day"},redisTypes:{string:"String",list:"List",hash:"Hash table",set:"Set",zset:"Sorted set - zset",stream:"Stream"}};e.exports=t},2530:(e,t,n)=>{p3xr.ng.component("p3xrKeyPager",{template:n(3383),bindings:{p3xrController:"<"},controller:["$transclude","$cookies",function(e,t){}]})},2562:(e,t,n)=>{var r=n(6008),o=n(4188),i=n(9712);e.exports=function(e){return o(e)?i(e):r(e)}},2588:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},2615:e=>{var t=/^(?:0|[1-9]\d*)$/;e.exports=function(e,n){var r=typeof e;return!!(n=n??9007199254740991)&&("number"==r||"symbol"!=r&&t.test(e))&&e>-1&&e%1==0&&e<n}},2620:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},2711:e=>{e.exports='<md-tabs md-dynamic-height md-border-bottom> <md-tab label="{{ $root.p3xr.strings.title.db}}" ng-if="$ctrl.hasDatabases && $root.p3xr.state.connection.cluster !== true"> <md-content> <md-tabs md-dynamic-height md-border-bottom class="md-primary" id="p3xr-main-statistics-dbs"> <md-tab label="{{ key }}" ng-repeat="(key, value) in $root.p3xr.state.info.keyspaceDatabases"> <md-content> <md-list flex ng-repeat="(itemKey, itemValue) in $root.p3xr.state.info.keyspace[\'db\' + key ]"> <md-list-item> <p><strong>{{ $ctrl.generateKey(itemKey) }}</strong></p> {{ itemValue }} </md-list-item> </md-list> </md-content> </md-tab> </md-tabs> </md-content> </md-tab> <md-tab label="{{ $ctrl.generateKey(key) }}" ng-repeat="(key, value) in $root.p3xr.state.info" ng-if="key !== \'keyspace\' &&  key !== \'keyspaceDatabases\'"> <md-content ng-style="{\'maxHeight\': $ctrl.maxHeight + \'px\'}"> <md-list flex> <md-list-item ng-repeat="(itemKey, itemValue) in value"> <p><strong>{{ $ctrl.generateKey(itemKey) }}</strong></p> {{ itemValue }} </md-list-item> </md-list> </md-content> </md-tab> </md-tabs> '},2744:(e,t,n)=>{var r=n(6522),o=n(2620);e.exports=function(e){return o(e)&&"[object Arguments]"==r(e)}},2850:(e,t,n)=>{var r=n(3984)(n(9107),"WeakMap");e.exports=r},2971:e=>{e.exports='<div class="p3xr-content-border"> <md-toolbar class="md-primary md-hue-1" md-theme="{{ $root.p3xr.state.themeLayout}}" id="p3xr-main-header"> <div class="md-toolbar-tools"> <h2 flex md-truncate hide-xs> <a ui-sref="main.statistics"> {{ $root.p3xr.strings.intention.main }} </a> </h2> <span ng-if="$root.p3xr.state.connection !== undefined"> <button class="md-button" style="cursor:inherit!important;margin:0;padding:0" ng-if="$root.p3xr.state.connection.cluster !== true"> <span ng-if="!$root.$mdMedia(\'xs\')" style="position:relative;top:1px">{{ $root.p3xr.strings.form.main.label.database.toUpperCase() }}:</span> <md-input-container> <md-tooltip ng-if="$root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.form.main.label.database }}</md-tooltip> <md-select ng-model="$ctrl.currentDatabase" aria-label="{{ $root.p3xr.strings.form.main.label.database }}" class="md-accent p3xr-main-db-select" md-container-class="p3xr-main-db-select-container"> <md-option ng-repeat="dbIndex in $root.p3xr.state.databaseIndexes" ng-value="dbIndex" ng-click="$ctrl.selectDatabase(dbIndex)"> <span ng-if="$root.p3xr.state.info.keyspaceDatabases[dbIndex]"> <md-icon>radio_button_checked</md-icon> </span> <span ng-if="!$root.p3xr.state.info.keyspaceDatabases[dbIndex]"> <md-icon>radio_button_unchecked</md-icon> </span> {{ dbIndex }} </md-option> </md-select> </md-input-container> </button> <p3xr-button class="p3xr-main-toolbar-button p3xr-main-toolbar-button-hide-on-small" ng-if="$root.p3xr.state.connection.readonly !== true && !$root.$mdMedia(\'xs\')" ng-click="$ctrl.save()" p3xr-label="$root.p3xr.strings.intention.save" p3xr-md-icon="save"></p3xr-button> <p3xr-button class="p3xr-main-toolbar-button" ng-click="$ctrl.statistics()" p3xr-label="$root.p3xr.strings.intention.statistics" p3xr-md-icon="show_chart"></p3xr-button> <p3xr-button class="p3xr-main-toolbar-button" ng-click="$ctrl.refresh({ keepTree: true })" p3xr-label="$root.p3xr.strings.intention.refresh" p3xr-md-icon="refresh"></p3xr-button> <p3xr-button class="p3xr-main-toolbar-button" ng-click="$ctrl.quickConsole()" ng-if="!$root.p3xr.state.connection.readonly" p3xr-label="$root.p3xr.strings.intention.quickConsole" p3xr-md-icon="keyboard"></p3xr-button> </span> </div> </md-toolbar> <md-content md-theme="{{ $root.p3xr.state.theme}}" id="p3xr-main-content" md-whiteframe="2"> <div class="md-title" layout-padding ng-if="$root.p3xr.state.connections.list.length > 0 && $root.p3xr.state.connection === undefined"> {{ $root.p3xr.strings.title.main }} </div> <div ng-if="$root.p3xr.state.connections.list.length === 0 && $root.p3xr.state.connection === undefined" layout-padding><md-button ui-sref="settings" md-no-ink style="display:inline-block;word-wrap:break-word;white-space:normal">{{ $root.p3xr.strings.intention.noConnections }}</md-button></div> <div ng-if="$root.p3xr.state.connection !== undefined"> <div ng-if="!$root.$mdMedia(\'xs\')"> <p3xr-main-treecontrol-controls id="p3xr-main-treecontrol-controls-container" p3xr-main-ref="$ctrl"></p3xr-main-treecontrol-controls> <p3xr-main-tree id="p3xr-main-treecontrol-container" p3xr-resize="$ctrl.resize()" p3xr-main-ref="$ctrl"></p3xr-main-tree> <div id="p3xr-main-content-sizer" md-colors="{ background: resizerColor }" md-theme="{{ $root.p3xr.state.themeLayout}}"> </div> <div id="p3xr-main-content-container"> <ui-view> </ui-view> </div> </div> <div layout="column" ng-if="$root.$mdMedia(\'xs\')"> <p3xr-main-treecontrol-controls p3xr-main-ref="$ctrl" flex></p3xr-main-treecontrol-controls> <p3xr-main-tree flex id="p3xr-main-treecontrol-container-directive-small" p3xr-resize="$ctrl.resize()" p3xr-main-ref="$ctrl"></p3xr-main-tree> <ui-view flex> </ui-view> </div> </div> </md-content> </div> <md-sidenav class="md-sidenav-right p3xr-quick-console-sidenav" ng-style="{width: $ctrl.sidenavWidth}" md-component-id="quickConsoleSidenav" ng-mousedown="$ctrl.startResizing($event)"> <div class="p3xr-quick-console"> <p3xr-console type="quick"> </p3xr-console></div> </md-sidenav> '},2973:(e,t,n)=>{p3xr.ng.component("p3xrMainKeyZset",{template:n(5808),bindings:{p3xrValue:"=",p3xrValueBuffer:" =",p3xrKey:"<",p3xrResponse:"<"},controller:["$scope","p3xrCommon","p3xrSocket","p3xrDialogJsonView","p3xrDialogKeyNewOrSet","$rootScope","p3xrKeyPaging",function(e,t,r,o,i,s,a){const l=new a({$ctrl:this,$scope:e,watch:!1,figurePagingType:"zset"});this.$onInit=()=>{l.figurePaging()};const d=(e,t)=>{c=[];const n=p3xr.settings.keyPageCount*(this.page-1);let r=0;for(let e in this.generatedValue)r>=n&&r<n+p3xr.settings.keyPageCount&&c.push(this.generatedValue[e]),r++};let c;e.$watch("$ctrl.page",d),this.pageBasedList=()=>c,this.copy=async e=>{await n.g.p3xr.clipboard({value:e.value}),t.toast(p3xr.strings.status.dataCopied)},this.downloadBuffer=async({$index:e,$event:n})=>{try{const t=new Blob([this.p3xrValueBuffer[2*e]]),n=window.URL.createObjectURL(t),r=document.createElement("a");r.href=n,r.download=`${this.p3xrKey}.bin`,document.body.appendChild(r),r.click(),window.URL.revokeObjectURL(n),document.body.removeChild(r)}catch(e){t.generalHandleError(e)}};let u;e.$watch("$ctrl.p3xrValue",((e,t)=>{e!==u&&(u=e,this.generatedValue=(e=>{const t=[];let n;for(let r of e)void 0===n?n=r:(t.push([parseFloat(r),n]),n=void 0);return t})(this.p3xrValue),l.figurePaging(),d())})),this.showJson=e=>{const{value:t}=e;o.show({value:t})},this.addZSet=async e=>{try{await i.show({type:"append",$event:e.$event,model:{type:"zset",key:this.p3xrKey}}),s.$broadcast("p3xr-refresh-key")}catch(e){t.generalHandleError(e)}},this.deleteZSet=async e=>{try{await t.confirm({event:e.$event,message:p3xr.strings.confirm.deleteZSetMember}),await r.request({action:"key-zset-delete-member",payload:{key:this.p3xrKey,value:this.p3xrValueBuffer[2*e.$index]}}),s.$broadcast("p3xr-refresh-key")}catch(e){t.generalHandleError(e)}},this.editValue=async e=>{try{const{member:t}=e;await i.show({type:"edit",$event:e.$event,model:{type:"zset",score:e.score,value:t.length<p3xr.settings.maxValueAsBuffer?t:this.p3xrValueBuffer[2*e.$index],key:this.p3xrKey}}),s.$broadcast("p3xr-refresh-key")}catch(e){t.generalHandleError(e)}}}]})},3004:e=>{const t={error:{cleared_license:"Очищенная лицензия",invalid_license:"Неверная лицензия",server_error:"Серверная ошибка, пожалуйсто попробуйте снова"},title:{donate:"Донат",jsonRecursive:"Расширяем все листья",name:"P3X Redis UI",nameDonated:"P3X Redis UI+",main:"Вы можете выбрать Redis коннектор для соединения из меню снизу слева.",statistics:"Статистика",error:"Ошибка",connectingRedis:"Подключаемся к Redis ...",socketioConnectError:"Ошибка Socket.IO",db:"База данных",server:"Сервер",clients:"Клиент",memory:"Память",persistence:"Постоянность",stats:"Статистика",replication:"Репликация",cpu:"ЦПУ",cluster:"Кластер"},confirm:{uploadBuffer:"Вы уверены, чтобы загрузить эти двоичные данные?",uploadBufferDone:"Двоичные данные загружаются",uploadBufferDoneAndSave:"Двоичные данные загружаются и сохраняются на сервере.",title:"Подтвердить",alert:"Внимание",info:"Информация",deleteListItem:"Вы точно хотите удалить этот список?",deleteHashKey:"Вы точно хотите удалить этот хэш?",deleteStreamTimestamp:"Вы точно хотите удалить эту временную отметку потока?",deleteSetMember:"Вы точно хотите удалить этого члена набора?",deleteZSetMember:"Вы точно хотите удалить этого члена сортированного набора?",deleteConnection:"Подтвердить",deleteConnectionText:"Вы точно хотите удалить это подключение Redis?",deleteNode:"Вы точно хотите удалить эту ноду Redis?",deleteAllKeys:e=>`Удалить это дерево и все его ключи (${e.key})?`,socketioConnectError:"Socket.IO не может подключится к серверу, вы можете перезагрузить и решить проблему с соединением самостоятельно, клиент не знает как решить это.",deleteKey:"Вы точно хотите удалить этот ключ?",rename:{title:"Вы точно хотите переименовать этот ключ?",textContent:'Если вы нажмёте кнопку "Переименоват" вы навсегда переименуете этот ключ.',placeholder:"Ключ Redis (обязательно)"},ttl:{title:"Вы точно хотите изменить TTL этого ключа?",textContent:'Если вы нажмёте "Изменить" вы измените TTL этого ключа, пустой TTL равен вечному.',placeholder:"TTL ключа Redis (цельная цифра или ничего)",placeholderPlaceholder:"Пустота означает вечность, для других случаев используйте целое число.",convertTextToTime:"Конвертировать текст во время",convertTextToTimePlaceholder:"Например, 1d равен 86400"},license:{title:"Включить лицензию донатера?",textContent:"Если вы хотите использовать функции для донатеров, пожалуйсто запросите лицензию у alabard@gmail.com . Донат стоит $1/месяц.",placeholder:"Ключ лицензии"}},language:{en:"Английский / English",zn:"中文 / Chinese",ru:"Русский / Russian"},intention:{copy:"Копировать",downloadBuffer:"Скачать бинарный файл",setBuffer:"Загрузить двоичный файл",saveWithFormatJson:"Сохранить с форматом",formatJson:"Форматировать Json",pubsubMonitor:"Мониторинг PubSub",language:"Язык / Language",ok:"ОК",addKey:"Добавить к этому ключу",addKeyRoot:"Добавить к корневому ключу",reloadKey:"Кнопка перезагрузки",reload:"Перезагрузить",close:"Закрыть",commands:"Команды",view:"Вид",statistics:"Статистика",refresh:"Обновить",clear:"Очистить",rename:"Переименовать",main:"Домой",cancel:"Отмена",theme:"Тема",github:"GitHub",githubRepo:"Репозиторий",githubRelease:"Релизы",githubChangelog:"Изменения",settings:"Настройки",connect:"Подключиться",disconnect:"Отключится",overview:"Обзор",console:"Консоль",noConnections:"Подключения отсутствуют, добавьте подключение в меню настроек.",noConnectionsInSettings:"Подключения отсутствуют, вы можете добавить НОВОЕ ПОДКЛЮЧЕНИЕ выше.",connectionAdd:"Новое подключение",extend:"Расширить",collapse:"Схлопнуть",add:"Добавить",edit:"Редактировать",save:"Сохранить",ttl:"Выбрать TTL",license:"Выбрать лицензию",delete:"Удалить",remove:"Убрать",sure:"Хорошо",testConnection:"Проверка соединения",getKey:"Загрузка ключа Redis и асоциированных данных ...",jsonViewShow:"Показать JSON",jsonViewEditor:"Редактировать JSON",quickConsole:"Быстрый"},label:{id:{nodeId:"Идентификатор узла",id:"Идентификатор соединения",info:"Если вы не хотите изменять свойства: sshPassword, sshPrivateKey, пароля, tlsCrt, tlsKey, tlsCa, введите идентификатор соединения в эти свойства, чтобы сохранить значения свойств нетронутыми. Если вы хотите использовать ту же логику в пароле узла, введите идентификатор узла в пароле узла."},secureFeature:"Если вы видите значение, которое начинается с P3X и выглядит похоже, это функция безопасности. Чтобы изменить настройки, просто замените эти настройки на пустые или что-то другое, и они будут сохранены. Если вы не измените настройки, настройки останутся такими, какие они есть на сервере.",ssh:{on:"SSH включен",off:"SSH выключен",sshHost:"Хост SSH",sshPort:"Порт SSH",sshUsername:"Имя пользователя SSH",sshPassword:"Пароль SSH",sshPrivateKey:"Приватный ключ SSH"},isBuffer:e=>`[object ArrayBuffer] означает, что значение представляет собой двоичный буфер или значение превышает ${e.maxValueAsBuffer}`,streamValue:'Поле и значение потока это однополосник. Например: поле1 значение1 "поле 2" "значение 2"',streamTimestampId:"'*' означает автогенерацию или определяется как <millisecondsTime>-<sequenceNumber>",unableToLoadKey:({key:e})=>`Не вышло загрузить ключ: ${e}. Возможно он был удалён. Полная ошибка написана в консоли.`,bigJson:"Этот JSON обьект больше 10 kb, удостоверьтесь что вы знаете что делаете, так как некоторые функции рендерятся медленнее.",addNode:"Добавить ноду",validateJson:"Проверить JSON",reducedFunction:"Урезанная функциональность",tooManyKeys:e=>`Для полноценной работы максимума функций разрешены ключи в общем количестве ${e.maxLightKeysCount} штук. Эта база данных имеет больше ключей чем разрешено, суммой ${e.count}. Сортировка и информация древом для ключей выключены. Поиск будет производится только на серверной стороне.`,redisCommandNotFound:"Ни одна команда Redis не совпадает с вводом ...",treeKeyStore:"Сортировка (природное сравнение) выполняется в клиенте (он же браузер), что замедляет большие сортировки, например больше чем 10k ключей, это может добавить немного задержки к прогрузке страницы. В самом Redis нету сортировки ключей, это можно делать только так.",socketIoTimeout:e=>`Socket.IO не успел ответить на запрос (максимум ${e.timeout/1e3} секунд) ...`,resizerInfo:e=>`Минимальная ширина левой или правой панели это ${e.width}px`,jsonViewNotParsable:"Это значение не подобно JSON",ttlTitle:"Выбрать TTL в секундах",passwordSecure:"Пароль может быть пустым, но он всё ещё будет отображать символы, это фича для безопасности.",tlsWithoutCert:"Включить TLS без дополнительного сертификата",tlsRejectUnauthorized:"Reject unauthorized certificate",tlsSecure:"Если вы видите TLS конфигурацию которая начинается с P3X или все настройки TLS выглядят одинаково, это фича для безопасности. Для изминения настроек надо заменить эти настройки пустыми или чем либо ещё, и они сохранятся. Если вы ек измените настройки TLS, настройки останутся такими же как и на самом сервере.",treeSeparatorEmpty:"Если разделитель дерева пуст, в дереве вместо вложенных нод будет лишь чистый список",treeSeparatorEmptyNote:"Никаких вложенных нод, только чистый список",welcomeConsole:"Добро пожаловать в консоль Redis",welcomeConsoleInfo:"История по нажатию ВВЕРХ или ВНИЗ кллючена",redisListIndexInfo:"Пустое для добавления, -1 что бы сделать вид или сохранить в указанную позицию.",console:"Консоль",connectiondAdd:"Добавить соединение",connectiondEdit:"Изменить соединение",connectiondView:"Осмотреть соединение",connections:"Соединения",keysSort:{on:"Сортировка ключей включена",off:"Сортировка ключей выключена"},cluster:{on:"Кластеризация активирована",off:"Кластеризация деактивирована"},sentinel:{on:"Сентинел включен",off:"Сентинел выключен",name:"Имя дозорного"},readonly:{on:'Режим "только чтение"',off:'Режим "редактирование"'},theme:{light:"Светлая",dark:"Тёмная корпоративная",darkNeu:"Тёмная",darkoBluo:"Тёмное синево",enterprise:"Корпоративная",redis:"Redis",matrix:"Матрица"},connected:e=>`Подключено: ${e.name}`,tree:"Дерево",askAuth:"Запросить авторизацию"},status:{dataCopied:"Данные скопированы в буфер обмена",licenseSaved:"Лицензия сохранена",nodeRemoved:"Нода удалена",keyIsNotExisting:"Этот ключ вероятно был удалён или истёк.",keyCount:e=>0===e.keyCount?"Нету ключей":1===e.keyCount?"1 ключ":`${e.keyCount} ключей`,treeExpandAll:"Развернуть все листья дерева, это имеет цену, временную ...",noRedisKeys:"Нету ключей в базе данных.",redisConnected:"Redis успешно подключен",reloadingDataInfo:"Перезагружаем информацию о данных Redis",added:"Добавлено",saved:"Обновлено",cancelled:"Отменено",deleted:"Удалено",savedRedis:"Данные Redis были сохранены",redisDisconnected:e=>`Произошла ошибка в теперешнем соединении: ${e.error.message}`,dbChanged:e=>`Выбран индекс базы данных ${e.db}. `,treeDeleted:e=>`Ключ дерева был удалён (${e.key}).`,deletedKey:e=>`Ключ был удалён (${e.key}).`,renamedKey:"Этот ключ был переименован",ttlChanged:"TTL этого ключа был изменён",notInteger:"Этот ввод не для цельной цифры",persisted:"Этот ключ не исчезнет сам",set:"Этот ключ был применён/добавлен"},code:{"delete-connection":"Это соединение было удалено и по этому вы были отключены от этой инстанции Redis.","save-connection":"Это подключение было изменено и по этому вы были отключены от этой инстанции Redis. Вы можете переподключится.","readonly-connections":'Добавление/сохранение/удаление соединений в режиме "только чтение"!',"readonly-connection-mode":'Это соединение в режиме "только чтение"!',"list-out-of-bounds":"Индекс этого списка вышел за границы","donation-ware-feature":"Эта функция доступна в донатерской версии.","auto-connection-failed":"Вероятно, соединение было удалено и авто-соединение провалилось по таковой причине.",invalid_console_command:"Эта команда не работает через GUI."},form:{error:{required:"Обязательно",port:"Порт в границах 1-65535",invalid:"Форма заполнена неверно"},connection:{label:{name:"Название",host:"Имя хоста",port:"Порт",password:"Пароль",username:"Имя пользователя"}},treeSettings:{maxValueDisplay:"Длинна видимой строки",maxValueDisplayInfo:"Если значение длинны показа равно нулю, будет показано всё, если же оно больше - вывод будет урезан. Если он равен минус одному, вывод будет скрыт до начала редактирования для строк, для других же типов будет показано всё.",maxKeys:"Максимум символов",maxKeysInfo:"Максимум ключей ограничен что бы GUI не падал.",keyCount:()=>`Количество ключей: ${p3xr.state.keysRaw.length}`,label:{animation:"Использовать анимацию",noAnimation:"Выключить анимацию",jsonFormatTwoSpace:"Форматировать JSON двумя пробелами",jsonFormatFourSpace:"Форматировать JSON четырьмя пробелами",formName:"Настройки Redis",searchModeClient:"Клиентский режим поиска",searchModeServer:"Серверный режим поиска",searchModeStartsWith:"Поиск начала",searchModeIncludes:"Поиск содержимого"},field:{treeSeparator:"Разделитель дерева",treeSeparatorSelector:"Избиратель разделителя дерева",page:"Счётчик количества страниц",keyPageCount:"Счётчик количества ключей",keysSort:"Сортировка ключей",searchMode:"Режим поиска",searchModeStartsWith:"Поиск начинается с / содержит"},error:{keyPageCount:"Ограничитель показа ключей на странице должен быть цельным числом в границах 5 - 100",page:"Ограничитель показа страниц должен быть цельным числом в границах 10 - 1000",maxValueDisplay:"Максимальное количество показываемых значений должен быть цельным числом между -1 и 32768",maxKeys:"Максимальное количество показываемых ключей должен быть цельным числом между 100 и 100000"}},key:{label:{formName:{add:"Добавить новый ключ Redis",edit:"Редактировать ключ Redis",append:"Добавить к существующему ключу Redis"}},field:{streamTimestamp:"Временная отметка",key:"Ключ",type:"Тип",index:"Индекс",hashKey:"Хэш",score:"Очки",value:"Значение"},error:{streamTimestamp:"Временная отметка обязательна, либо в формате Redis либо как *",key:"Ключ должен иметь длинну минимум одного символа",hashKey:"Стол хэшей ключей должен иметь длинну минимум одного символа",score:"Очки сортировки набора обязательны",value:"Значение обязательно"}},main:{label:{database:"База данных"}}},page:{overview:{noConnected:"Нету подключения к Redis.",overviewClients:"Показать подключения по количеству клиентов",connectedCount:e=>1===e.length?"1 клиент":`${e.length} клиентов`},key:{label:{key:"Ключ",encoding:"Кодировка",length:"Размер",ttl:"TTL",ttlTitle:"Время На Жизнь (TTL)",type:"Тип",ttlNotExpire:"не истекает",lengthString:"байты",lengthItem:"обьекты",actions:"Действия"},list:{table:{index:"Индекс",value:"Значение"}},hash:{table:{hashkey:"Хэш",value:"Значение"}},set:{table:{value:"Член"}},zset:{table:{value:"Член",score:"Очки"}},stream:{table:{timestamp:"Идентификатор временной отметки",field:"Поле",value:"Значение"}}},treeControls:{settings:"Настройки дерева",expandAll:"Развернуть все",collapseAll:"Свернуть все",search:{search:"Поиск ключа",clear:"Очистить теперешний поиск",placeholderClient:"Искать в клиенте",placeholderServer:"Искать на сервере",largeSetInfo:"In a large set, client side searching is disabled. so right now only server side searching is possible.",info:`Поиск в клиенте означает совпадание с содержимым поля поиска. Серверный поиск означает поиск паттерном на подобие *{искомый-текст}*. Для поиска больших наборов лучше использовать серверный поиск. Для меньших поисковых наборов лучше использовать поиск клиентом. Если количество ключей превышает ${p3xr.settings.maxLightKeysCount}, можно будет искать только серверным поиском.`,infoDetails:"Что бы понять как поиск работает, изучите настройки"},pager:{next:"Следующий",prev:"Предыдущий",first:"Первый",last:"Последний"}}},time:{years:"года",months:"месяца",days:"дни",year:"год",month:"месяц",day:"день"},redisTypes:{string:"Строка",list:"Список",hash:"Стол хэшей",set:"Набор",zset:"Сортированный набор - zset",stream:"Поток"}};e.exports=t},3217:(e,t,n)=>{let r=0;p3xr.ng.component("p3xrAccordion",{template:n(4440),bindings:{p3xrTitle:"<",p3xrAccordionKey:"@"},transclude:{actions:"?p3xrAccordionActions",content:"p3xrAccordionContent"},controller:["$transclude","$cookies",function(e,t){this.transcludePresent=function(t){return e.isSlotFilled(t)},this.$onInit=function(){void 0!==this.p3xrAccordionKey&&""!==this.p3xrAccordionKey||(this.p3xAccordionKey=++r);const e=`p3xr-accordion-extended-${this.p3xrAccordionKey}`;Object.defineProperty(this,"extended",{get:()=>{const n=t.get(e);return void 0===n||"true"===n},set:n=>{t.put(e,String(n),{expires:p3xr.settings.cookieExpiry})}})}}]})},3237:()=>{p3xr.theme.enterprise=function(e,t){p3xr.theme.enterprise.order=2,e.theme("p3xrThemeEnterpriseLayout").primaryPalette("grey",{default:"800","hue-1":"500","hue-2":"700","hue-3":"900"}).accentPalette("grey",{default:"600","hue-1":"50","hue-2":"700","hue-3":"900"}).warnPalette("grey").backgroundPalette("grey",{default:"400"}),e.theme("p3xrThemeEnterprise").primaryPalette("indigo").accentPalette("blue",{default:"700"}).warnPalette("red",{default:"700"}),e.theme("p3xrThemeEnterpriseCommon").primaryPalette("green").accentPalette("grey").warnPalette("light-blue")}},3287:(e,t,n)=>{var r=n(8206),o=n(9768),i=n(6827),s=n(663),a=n(5135);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=i,l.prototype.has=s,l.prototype.set=a,e.exports=l},3383:e=>{e.exports='<div ng-if="$ctrl.p3xrController.pages > 1" style="text-align:center"> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.p3xrController.pager({ page: \'first\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.first}}</md-tooltip> <md-icon>skip_previous</md-icon> </md-button> <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.p3xrController.pager({ page: \'prev\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.prev}}</md-tooltip> <md-icon>keyboard_arrow_left</md-icon> </md-button> <p3xr-input type="number" style="width:64px" step="1" min="1" ng-maxlength="$ctrl.p3xrController.pages" ng-change="$ctrl.p3xrController.pageChange()" ng-model="$ctrl.p3xrController.page"></p3xr-input> / {{ $ctrl.p3xrController.pages }} <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.p3xrController.pager({ page: \'next\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.next}}</md-tooltip> <md-icon>keyboard_arrow_right</md-icon> </md-button> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.p3xrController.pager({ page: \'last\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.last}}</md-tooltip> <md-icon>skip_next</md-icon> </md-button> </div> '},3435:(e,t,n)=>{var r=n(6890),o=n(9484),i=n(7215),s=n(7811),a=n(747);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=i,l.prototype.has=s,l.prototype.set=a,e.exports=l},3591:e=>{e.exports=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}},3643:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}},3807:e=>{e.exports='<md-dialog aria-label="{{ $root.p3xr.strings.intention.jsonViewShow }}" class="fullscreen-dialog"> <md-toolbar md-theme="{{$root.p3xr.state.themeLayout}}"> <div class="md-toolbar-tools"> <md-icon>table_chart</md-icon> &nbsp; {{ $root.p3xr.strings.intention.jsonViewShow }} <span flex></span> <md-button class="md-icon-button" aria-label="" ng-if="isJson" ng-click="treeExpandAll()"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.expandAll}}</md-tooltip> <md-icon>keyboard_arrow_down</md-icon> </md-button> <md-button class="md-icon-button" aria-label="" ng-if="isJson" ng-click="treeCollapseAll()"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.collapseAll}}</md-tooltip> <md-icon>keyboard_arrow_up</md-icon> </md-button> <md-button class="md-icon-button" ng-click="ok()" aria-label="{{ $root.p3xr.strings.intention.close }}"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content flex md-theme="{{ $root.p3xr.state.theme }}"> <md-content class="p3xr-roboto-monospace"> <div class="p3xr-padding"> <json-tree object="obj" root-name="$root.p3xr.strings.label.tree" ng-if="isJson && howExpanded === true" start-expanded="howExpanded"></json-tree> <json-tree object="obj" root-name="$root.p3xr.strings.label.tree" ng-if="isJson && howExpanded === \'recursive\'" start-expanded="howExpanded"></json-tree> <div ng-if="!isJson"> {{ $root.p3xr.strings.label.jsonViewNotParsable}} </div> </div> </md-content> </md-dialog-content> <md-dialog-actions md-theme="{{ $root.p3xr.state.theme }}"> <md-button ng-click="ok()" class="md-raised md-accent" aria-label="{{ $root.p3xr.strings.intention.close }}" md-autofocus> <md-icon>close</md-icon> {{ $root.p3xr.strings.intention.close }} </md-button> </md-dialog-actions>  </md-dialog> '},3844:e=>{e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},3887:(e,t,n)=>{var r=n(9107)["__core-js_shared__"];e.exports=r},3920:(e,t,n)=>{var r=n(9070),o=n(5603),i=n(6596),s=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,l=/^0o[0-7]+$/i,d=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(i(e))return NaN;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=r(e);var n=a.test(e);return n||l.test(e)?d(e.slice(2),n?2:8):s.test(e)?NaN:+e}},3928:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=0,i=[];++n<r;){var s=e[n];t(s,n,e)&&(i[o++]=s)}return i}},3962:(e,t,n)=>{var r=n(5603),o=Object.create,i=function(){function e(){}return function(t){if(!r(t))return{};if(o)return o(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=i},3984:(e,t,n)=>{var r=n(2249),o=n(1074);e.exports=function(e,t){var n=o(e,t);return r(n)?n:void 0}},4188:e=>{var t=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(e){return t.test(e)}},4198:e=>{e.exports=function(e,t,n){var r=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var i=Array(o);++r<o;)i[r]=e[r+t];return i}},4253:(e,t,n)=>{var r=n(6435),o=n(9336);e.exports=function(e,t,n,i){var s=n.length,a=s,l=!i;if(null==e)return!a;for(e=Object(e);s--;){var d=n[s];if(l&&d[2]?d[1]!==e[d[0]]:!(d[0]in e))return!1}for(;++s<a;){var c=(d=n[s])[0],u=e[c],m=d[1];if(l&&d[2]){if(void 0===u&&!(c in e))return!1}else{var p=new r;if(i)var h=i(u,m,c,e,t,p);if(!(void 0===h?o(m,u,3,i,p):h))return!1}}return!0}},4275:(e,t,n)=>{var r=n(2003),o=n(5456),i=n(5240),s=n(7060);e.exports=function(e,t){return r(e)?e:o(e,t)?[e]:i(s(e))}},4306:()=>{let e=!1;p3xr.ui.overlay=new function(){this.show=(t={})=>{this.hide(),$body.append(((e={})=>`\n<div id="p3xr-overlay">\n    <div id="p3xr-overlay-info">\n        <i class="fas fa-cog fa-spin" style="font-size: 500% !important;"></i>\n        ${e.hasOwnProperty("message")?"<br/><br/>":""}\n        ${e.hasOwnProperty("message")?e.message:""}\n    </div>\n</div>\n        \n        `)(t)),e=!0},this.hide=()=>{e=!1,$body.find("#p3xr-overlay").remove()}};const t=t=>{"Escape"===t.key&&!0===e&&(t.stopPropagation(),t.preventDefault())};document.addEventListener("keydown",t,!0)},4412:e=>{e.exports=function(){this.__data__=[],this.size=0}},4440:e=>{e.exports=' <div> <md-toolbar class="md-primary md-hue-1" md-theme="{{ $root.p3xr.state.themeLayout}}" md-whiteframe="{{ $ctrl.extended ? -1 : 1 }}"> <div class="md-toolbar-tools"> <h2 flex md-truncate ng-click="$ctrl.extended = !$ctrl.extended">{{ $ctrl.p3xrTitle }}</h2> <span ng-if="$ctrl.transcludePresent(\'actions\')" ng-transclude="actions"></span> <md-button class="md-icon-button" ng-click="$ctrl.extended = !$ctrl.extended"> <md-icon>{{ !$ctrl.extended ? \'keyboard_arrow_down\' : \'keyboard_arrow_up\' }}</md-icon> <md-tooltip>{{ !$ctrl.extended ? $root.p3xr.strings.intention.extend : $root.p3xr.strings.intention.collapse}} </md-tooltip> </md-button> </div> </md-toolbar> <md-content ng-if="$ctrl.extended" md-theme="{{ $root.p3xr.state.theme}}" ng-transclude="content" md-whiteframe="2" class="p3xr-content-border"> </md-content> </div> '},4468:(e,t,n)=>{n(7317),n(8326),n(4836),n(8748),n(7605),n(6735),n(8100),n(89),n(1747),n(5866),n(6988),n(5035),n(2404),n(6588),n(733),n(5099),n(2227),n(7403),n(6587),n(2462),n(2973),n(8474),n(5590),n(2387),n(520),n(2422),n(1813),n(6914),n(6364),n(8562),n(9391),n(5439),n(105),n(1400),n(3237),n(420),n(5611),n(9467),n(3217),n(1743),n(8860),n(2530)},4503:(e,t,n)=>{var r=n(5603),o=n(1406),i=n(3920),s=Math.max,a=Math.min;e.exports=function(e,t,n){var l,d,c,u,m,p,h=0,g=!1,f=!1,x=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function y(t){var n=l,r=d;return l=d=void 0,h=t,u=e.apply(r,n)}function b(e){var n=e-p;return void 0===p||n>=t||n<0||f&&e-h>=c}function v(){var e=o();if(b(e))return T(e);m=setTimeout(v,function(e){var n=t-(e-p);return f?a(n,c-(e-h)):n}(e))}function T(e){return m=void 0,x&&l?y(e):(l=d=void 0,u)}function S(){var e=o(),n=b(e);if(l=arguments,d=this,p=e,n){if(void 0===m)return function(e){return h=e,m=setTimeout(v,t),g?y(e):u}(p);if(f)return clearTimeout(m),m=setTimeout(v,t),y(p)}return void 0===m&&(m=setTimeout(v,t)),u}return t=i(t)||0,r(n)&&(g=!!n.leading,c=(f="maxWait"in n)?s(i(n.maxWait)||0,t):c,x="trailing"in n?!!n.trailing:x),S.cancel=function(){void 0!==m&&clearTimeout(m),h=0,l=p=d=m=void 0},S.flush=function(){return void 0===m?u:T(o())},S}},4589:(e,t,n)=>{var r=n(384);e.exports=function(e){return function(t){return r(t,e)}}},4650:(e,t,n)=>{p3xr.translations={en:n(2514)},p3xr.strings=p3xr.translations.en},4715:(e,t,n)=>{var r=n(6479),o=n(784),i=n(7060),s=n(567);e.exports=function(e,t,n){return e=i(e),void 0===(t=n?void 0:t)?o(e)?s(e):r(e):e.match(t)||[]}},4767:(e,t,n)=>{var r=n(8330);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},4836:(e,t,n)=>{p3xr.ng.factory("p3xrDialogJsonEditor",["p3xrCommon","$mdDialog","$timeout",function(e,t,r){const o=n(4503);return new function(){this.show=async e=>(await Promise.all([n.e(822),n.e(118)]).then(n.t.bind(n,118,23)),t.show({controller:["$scope","$mdDialog","p3xrCommon","$rootScope","p3xrTheme","$mdMedia",function(t,n,i,s,a,l){let d,c;s.$broadcast("p3xr-main-resizer",{drag:!1});try{c=JSON.parse(e.value),t.isJson=!0}catch(e){c=void 0,t.isJson=!1}if(t.isJson){const e=async()=>{try{r((()=>{const e=document.getElementById("p3xr-jsoneditor"),t={limitDragging:!1,modes:["tree","code","view","preview"],mode:"code",language:p3xr.settings.getJSONEditorLanguage(),indentation:p3xr.settings.jsonFormat};a.isDark()&&(t.theme="ace/theme/twilight"),d=new JSONEditor(e,t,c)}))}catch(e){i.generalHandleError(e)}};e()}const u=e=>{if(27===(e.which||e.keyCode)){e.preventDefault(),e.stopPropagation();const t=$(".pico-close");t.length>0?t.click():n.cancel()}};document.documentElement.addEventListener("keydown",u,!0);const m=()=>{l("(max-width:959px)")?t.minHeight="100%":t.minHeight=`${Math.max(10,window.innerHeight-100)}px`};m();const p=o((()=>{d&&d.aceEditor&&(console.log("resize json editor ace resize"),m(),t.$digest(),d.aceEditor.resize())}),p3xr.settings.debounce);$window.on("resize",p),t.$on("$destroy",(()=>{$window.off("resize",p),d&&(d.destroy(),d=void 0),s.$broadcast("p3xr-main-resizer",{drag:!0}),document.documentElement.removeEventListener("keydown",u,!0)})),t.ok=function(){n.cancel()},t.save=function({format:e}){try{n.hide({obj:JSON.stringify(d.get(),null,e?p3xr.settings.jsonFormat:0)})}catch(e){i.generalHandleError(e)}}}],template:n(8527),parent:angular.element(document.body),targetEvent:e.$event,clickOutsideToClose:!1,fullscreen:!0,multiple:!0,escapeToClose:!1}))}}])},5035:()=>{p3xr.ng.factory("p3xrKeyPaging",["$mdToast","$mdDialog","$mdColors","$rootScope","p3xrRedisParser","$timeout",function(e,t,n,r,o,i){return function({$ctrl:e,$scope:t,watch:n,figurePagingType:r}){const o=()=>{if("zset"===r)e.pages=Math.ceil(Object.keys(e.p3xrValue).length/2/p3xr.settings.keyPageCount);else e.pages=Math.ceil(Object.keys(e.p3xrValue).length/p3xr.settings.keyPageCount);e.page=1};this.figurePaging=o,!1!==n&&t.$watch("$ctrl.p3xrValue",((e,t)=>{o()})),t.$watch("$root.p3xr.settings.keyPageCount",(()=>{o()})),e.pager=t=>{const{page:n}=t;switch(n){case"prev":e.page-1>=1&&(e.page=e.page-1);break;case"next":e.page+1<=e.pages&&(e.page=e.page+1);break;case"last":e.page=e.pages;break;case"first":e.page=1}},e.pageChange=()=>{e.page<1?e.page=1:e.page>e.pages&&(e.page=e.pages)}}}])},5093:(e,t,n)=>{!function(e,t){e((function(){"use strict";var e,n={mobileDetectRules:{phones:{iPhone:"\\biPhone\\b|\\biPod\\b",BlackBerry:"BlackBerry|\\bBB10\\b|rim[0-9]+|\\b(BBA100|BBB100|BBD100|BBE100|BBF100|STH100)\\b-[0-9]+",Pixel:"; \\bPixel\\b",HTC:"HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\\bEVO\\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel",Nexus:"Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 5X|Nexus 6",Dell:"Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\\b001DL\\b|\\b101DL\\b|\\bGS01\\b",Motorola:"Motorola|DROIDX|DROID BIONIC|\\bDroid\\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\\bMoto E\\b|XT1068|XT1092|XT1052",Samsung:"\\bSamsung\\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F|SM-J330F|SM-G610F|SM-G981B|SM-G892A|SM-A530F",LG:"\\bLG\\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323|M257)|LM-G710",Sony:"SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533|SOV34|601SO|F8332",Asus:"Asus.*Galaxy|PadFone.*Mobile",Xiaomi:"^(?!.*\\bx11\\b).*xiaomi.*$|POCOPHONE F1|MI 8|Redmi Note 9S|Redmi Note 5A Prime|N2G47H|M2001J2G|M2001J2I|M1805E10A|M2004J11G|M1902F1G|M2002J9G|M2004J19G|M2003J6A1G",NokiaLumia:"Lumia [0-9]{3,4}",Micromax:"Micromax.*\\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\\b",Palm:"PalmSource|Palm",Vertu:"Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature",Pantech:"PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790",Fly:"IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250",Wiko:"KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM",iMobile:"i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)",SimValley:"\\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\\b",Wolfgang:"AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q",Alcatel:"Alcatel",Nintendo:"Nintendo (3DS|Switch)",Amoi:"Amoi",INQ:"INQ",OnePlus:"ONEPLUS",GenericPhone:"Tapatalk|PDA;|SAGEM|\\bmmp\\b|pocket|\\bpsp\\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\\bwap\\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser"},tablets:{iPad:"iPad|iPad.*Mobile",NexusTablet:"Android.*Nexus[\\s]+(7|9|10)",GoogleTablet:"Android.*Pixel C",SamsungTablet:"SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285|SM-T825|SM-W708|SM-T835|SM-T830|SM-T837V|SM-T720|SM-T510|SM-T387V|SM-P610|SM-T290|SM-T515|SM-T590|SM-T595|SM-T725|SM-T817P|SM-P585N0|SM-T395|SM-T295|SM-T865|SM-P610N|SM-P615|SM-T970|SM-T380|SM-T5950|SM-T905|SM-T231|SM-T500|SM-T860",Kindle:"Kindle|Silk.*Accelerated|Android.*\\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\\b|Android.*Silk/[0-9.]+ like Chrome/[0-9.]+ (?!Mobile)",SurfaceTablet:"Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)",HPTablet:"HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10",AsusTablet:"^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\\bK00F\\b|\\bK00C\\b|\\bK00E\\b|\\bK00L\\b|TX201LA|ME176C|ME102A|\\bM80TA\\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\\bME70C\\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\\bP027\\b|\\bP024\\b|\\bP00C\\b",BlackBerryTablet:"PlayBook|RIM Tablet",HTCtablet:"HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410",MotorolaTablet:"xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617",NookTablet:"Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2",AcerTablet:"Android.*; \\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\\b|W3-810|\\bA3-A10\\b|\\bA3-A11\\b|\\bA3-A20\\b|\\bA3-A30|A3-A40",ToshibaTablet:"Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO",LGTablet:"\\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\\b",FujitsuTablet:"Android.*\\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\\b",PrestigioTablet:"PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002",LenovoTablet:"Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304X|TB-X304F|TB-X304L|TB-X505F|TB-X505L|TB-X505X|TB-X605F|TB-X605L|TB-8703F|TB-8703X|TB-8703N|TB-8704N|TB-8704F|TB-8704X|TB-8704V|TB-7304F|TB-7304I|TB-7304X|Tab2A7-10F|Tab2A7-20F|TB2-X30L|YT3-X50L|YT3-X50F|YT3-X50M|YT-X705F|YT-X703F|YT-X703L|YT-X705L|YT-X705X|TB2-X30F|TB2-X30L|TB2-X30M|A2107A-F|A2107A-H|TB3-730F|TB3-730M|TB3-730X|TB-7504F|TB-7504X|TB-X704F|TB-X104F|TB3-X70F|TB-X705F|TB-8504F|TB3-X70L|TB3-710F|TB-X704L",DellTablet:"Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7",YarvikTablet:"Android.*\\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\\b",MedionTablet:"Android.*\\bOYO\\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB",ArnovaTablet:"97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2",IntensoTablet:"INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004",IRUTablet:"M702pro",MegafonTablet:"MegaFon V9|\\bZTE V9\\b|Android.*\\bMT7A\\b",EbodaTablet:"E-Boda (Supreme|Impresspeed|Izzycomm|Essential)",AllViewTablet:"Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)",ArchosTablet:"\\b(101G9|80G9|A101IT)\\b|Qilive 97R|Archos5|\\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\\b",AinolTablet:"NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark",NokiaLumiaTablet:"Lumia 2520",SonyTablet:"Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP641|SGP612|SOT31|SGP771|SGP611|SGP612|SGP712",PhilipsTablet:"\\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\\b",CubeTablet:"Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT",CobyTablet:"MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010",MIDTablet:"M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10",MSITablet:"MSI \\b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\\b",SMiTTablet:"Android.*(\\bMID\\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)",RockChipTablet:"Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A",FlyTablet:"IQ310|Fly Vision",bqTablet:"Android.*(bq)?.*\\b(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))\\b|Maxwell.*Lite|Maxwell.*Plus",HuaweiTablet:"MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim|M2-A01L|BAH-L09|BAH-W09|AGS-L09|CMR-AL19",NecTablet:"\\bN-06D|\\bN-08D",PantechTablet:"Pantech.*P4100",BronchoTablet:"Broncho.*(N701|N708|N802|a710)",VersusTablet:"TOUCHPAD.*[78910]|\\bTOUCHTAB\\b",ZyncTablet:"z1000|Z99 2G|z930|z990|z909|Z919|z900",PositivoTablet:"TB07STA|TB10STA|TB07FTA|TB10FTA",NabiTablet:"Android.*\\bNabi",KoboTablet:"Kobo Touch|\\bK080\\b|\\bVox\\b Build|\\bArc\\b Build",DanewTablet:"DSlide.*\\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\\b",TexetTablet:"NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE",PlaystationTablet:"Playstation.*(Portable|Vita)",TrekstorTablet:"ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab",PyleAudioTablet:"\\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\\b",AdvanTablet:"Android.* \\b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\\b ",DanyTechTablet:"Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1",GalapadTablet:"Android [0-9.]+; [a-z-]+; \\bG1\\b",MicromaxTablet:"Funbook|Micromax.*\\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\\b",KarbonnTablet:"Android.*\\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\\b",AllFineTablet:"Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide",PROSCANTablet:"\\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\\b",YONESTablet:"BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026",ChangJiaTablet:"TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503",GUTablet:"TX-A1301|TX-M9002|Q702|kf026",PointOfViewTablet:"TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10",OvermaxTablet:"OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)|Qualcore 1027",HCLTablet:"HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync",DPSTablet:"DPS Dream 9|DPS Dual 7",VistureTablet:"V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10",CrestaTablet:"CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989",MediatekTablet:"\\bMT8125|MT8389|MT8135|MT8377\\b",ConcordeTablet:"Concorde([ ]+)?Tab|ConCorde ReadMan",GoCleverTablet:"GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042",ModecomTablet:"FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003",VoninoTablet:"\\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\\bQ8\\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\\b",ECSTablet:"V07OT2|TM105A|S10OT1|TR10CS1",StorexTablet:"eZee[_']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab",VodafoneTablet:"SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497|VFD 1400",EssentielBTablet:"Smart[ ']?TAB[ ]+?[0-9]+|Family[ ']?TAB2",RossMoorTablet:"RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711",iMobileTablet:"i-mobile i-note",TolinoTablet:"tolino tab [0-9.]+|tolino shine",AudioSonicTablet:"\\bC-22Q|T7-QC|T-17B|T-17P\\b",AMPETablet:"Android.* A78 ",SkkTablet:"Android.* (SKYPAD|PHOENIX|CYCLOPS)",TecnoTablet:"TECNO P9|TECNO DP8D",JXDTablet:"Android.* \\b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\\b",iJoyTablet:"Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)",FX2Tablet:"FX2 PAD7|FX2 PAD10",XoroTablet:"KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151",ViewsonicTablet:"ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a",VerizonTablet:"QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1",OdysTablet:"LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\\bXELIO\\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10",CaptivaTablet:"CAPTIVA PAD",IconbitTablet:"NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S",TeclastTablet:"T98 4G|\\bP80\\b|\\bX90HD\\b|X98 Air|X98 Air 3G|\\bX89\\b|P80 3G|\\bX80h\\b|P98 Air|\\bX89HD\\b|P98 3G|\\bP90HD\\b|P89 3G|X98 3G|\\bP70h\\b|P79HD 3G|G18d 3G|\\bP79HD\\b|\\bP89s\\b|\\bA88\\b|\\bP10HD\\b|\\bP19HD\\b|G18 3G|\\bP78HD\\b|\\bA78\\b|\\bP75\\b|G17s 3G|G17h 3G|\\bP85t\\b|\\bP90\\b|\\bP11\\b|\\bP98t\\b|\\bP98HD\\b|\\bG18d\\b|\\bP85s\\b|\\bP11HD\\b|\\bP88s\\b|\\bA80HD\\b|\\bA80se\\b|\\bA10h\\b|\\bP89\\b|\\bP78s\\b|\\bG18\\b|\\bP85\\b|\\bA70h\\b|\\bA70\\b|\\bG17\\b|\\bP18\\b|\\bA80s\\b|\\bA11s\\b|\\bP88HD\\b|\\bA80h\\b|\\bP76s\\b|\\bP76h\\b|\\bP98\\b|\\bA10HD\\b|\\bP78\\b|\\bP88\\b|\\bA11\\b|\\bA10t\\b|\\bP76a\\b|\\bP76t\\b|\\bP76e\\b|\\bP85HD\\b|\\bP85a\\b|\\bP86\\b|\\bP75HD\\b|\\bP76v\\b|\\bA12\\b|\\bP75a\\b|\\bA15\\b|\\bP76Ti\\b|\\bP81HD\\b|\\bA10\\b|\\bT760VE\\b|\\bT720HD\\b|\\bP76\\b|\\bP73\\b|\\bP71\\b|\\bP72\\b|\\bT720SE\\b|\\bC520Ti\\b|\\bT760\\b|\\bT720VE\\b|T720-3GE|T720-WiFi",OndaTablet:"\\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\\b[\\s]+|V10 \\b4G\\b",JaytechTablet:"TPC-PA762",BlaupunktTablet:"Endeavour 800NG|Endeavour 1010",DigmaTablet:"\\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\\b",EvolioTablet:"ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\\bEvotab\\b|\\bNeura\\b",LavaTablet:"QPAD E704|\\bIvoryS\\b|E-TAB IVORY|\\bE-TAB\\b",AocTablet:"MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712",MpmanTablet:"MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\\bMPG7\\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010",CelkonTablet:"CT695|CT888|CT[\\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\\bCT-1\\b",WolderTablet:"miTab \\b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\\b",MediacomTablet:"M-MPI10C3G|M-SP10EG|M-SP10EGP|M-SP10HXAH|M-SP7HXAH|M-SP10HXBH|M-SP8HXAH|M-SP8MXA",MiTablet:"\\bMI PAD\\b|\\bHM NOTE 1W\\b",NibiruTablet:"Nibiru M1|Nibiru Jupiter One",NexoTablet:"NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI",LeaderTablet:"TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100",UbislateTablet:"UbiSlate[\\s]?7C",PocketBookTablet:"Pocketbook",KocasoTablet:"\\b(TB-1207)\\b",HisenseTablet:"\\b(F5281|E2371)\\b",Hudl:"Hudl HT7S3|Hudl 2",TelstraTablet:"T-Hub2",GenericTablet:"Android.*\\b97D\\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\\bA7EB\\b|CatNova8|A1_07|CT704|CT1002|\\bM721\\b|rk30sdk|\\bEVOTAB\\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\\bM6pro\\b|CT1020W|arc 10HD|\\bTP750\\b|\\bQTAQZ3\\b|WVT101|TM1088|KT107"},oss:{AndroidOS:"Android",BlackBerryOS:"blackberry|\\bBB10\\b|rim tablet os",PalmOS:"PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino",SymbianOS:"Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\\bS60\\b",WindowsMobileOS:"Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Windows Mobile|Windows Phone [0-9.]+|WCE;",WindowsPhoneOS:"Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;",iOS:"\\biPhone.*Mobile|\\biPod|\\biPad|AppleCoreMedia",iPadOS:"CPU OS 13",SailfishOS:"Sailfish",MeeGoOS:"MeeGo",MaemoOS:"Maemo",JavaOS:"J2ME/|\\bMIDP\\b|\\bCLDC\\b",webOS:"webOS|hpwOS",badaOS:"\\bBada\\b",BREWOS:"BREW"},uas:{Chrome:"\\bCrMo\\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?",Dolfin:"\\bDolfin\\b",Opera:"Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+$|Coast/[0-9.]+",Skyfire:"Skyfire",Edge:"\\bEdgiOS\\b|Mobile Safari/[.0-9]* Edge",IE:"IEMobile|MSIEMobile",Firefox:"fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS",Bolt:"bolt",TeaShark:"teashark",Blazer:"Blazer",Safari:"Version((?!\\bEdgiOS\\b).)*Mobile.*Safari|Safari.*Mobile|MobileSafari",WeChat:"\\bMicroMessenger\\b",UCBrowser:"UC.*Browser|UCWEB",baiduboxapp:"baiduboxapp",baidubrowser:"baidubrowser",DiigoBrowser:"DiigoBrowser",Mercury:"\\bMercury\\b",ObigoBrowser:"Obigo",NetFront:"NF-Browser",GenericBrowser:"NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger",PaleMoon:"Android.*PaleMoon|Mobile.*PaleMoon"},props:{Mobile:"Mobile/[VER]",Build:"Build/[VER]",Version:"Version/[VER]",VendorID:"VendorID/[VER]",iPad:"iPad.*CPU[a-z ]+[VER]",iPhone:"iPhone.*CPU[a-z ]+[VER]",iPod:"iPod.*CPU[a-z ]+[VER]",Kindle:"Kindle/[VER]",Chrome:["Chrome/[VER]","CriOS/[VER]","CrMo/[VER]"],Coast:["Coast/[VER]"],Dolfin:"Dolfin/[VER]",Firefox:["Firefox/[VER]","FxiOS/[VER]"],Fennec:"Fennec/[VER]",Edge:"Edge/[VER]",IE:["IEMobile/[VER];","IEMobile [VER]","MSIE [VER];","Trident/[0-9.]+;.*rv:[VER]"],NetFront:"NetFront/[VER]",NokiaBrowser:"NokiaBrowser/[VER]",Opera:[" OPR/[VER]","Opera Mini/[VER]","Version/[VER]"],"Opera Mini":"Opera Mini/[VER]","Opera Mobi":"Version/[VER]",UCBrowser:["UCWEB[VER]","UC.*Browser/[VER]"],MQQBrowser:"MQQBrowser/[VER]",MicroMessenger:"MicroMessenger/[VER]",baiduboxapp:"baiduboxapp/[VER]",baidubrowser:"baidubrowser/[VER]",SamsungBrowser:"SamsungBrowser/[VER]",Iron:"Iron/[VER]",Safari:["Version/[VER]","Safari/[VER]"],Skyfire:"Skyfire/[VER]",Tizen:"Tizen/[VER]",Webkit:"webkit[ /][VER]",PaleMoon:"PaleMoon/[VER]",SailfishBrowser:"SailfishBrowser/[VER]",Gecko:"Gecko/[VER]",Trident:"Trident/[VER]",Presto:"Presto/[VER]",Goanna:"Goanna/[VER]",iOS:" \\bi?OS\\b [VER][ ;]{1}",Android:"Android [VER]",Sailfish:"Sailfish [VER]",BlackBerry:["BlackBerry[\\w]+/[VER]","BlackBerry.*Version/[VER]","Version/[VER]"],BREW:"BREW [VER]",Java:"Java/[VER]","Windows Phone OS":["Windows Phone OS [VER]","Windows Phone [VER]"],"Windows Phone":"Windows Phone [VER]","Windows CE":"Windows CE/[VER]","Windows NT":"Windows NT [VER]",Symbian:["SymbianOS/[VER]","Symbian/[VER]"],webOS:["webOS/[VER]","hpwOS/[VER];"]},utils:{Bot:"Googlebot|facebookexternalhit|Google-AMPHTML|s~amp-validator|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom|contentkingapp|AspiegelBot",MobileBot:"Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2",DesktopMode:"WPDesktop",TV:"SonyDTV|HbbTV",WebKit:"(webkit)[ /]([\\w.]+)",Console:"\\b(Nintendo|Nintendo WiiU|Nintendo 3DS|Nintendo Switch|PLAYSTATION|Xbox)\\b",Watch:"SM-V700"}},detectMobileBrowsers:{fullPattern:/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,shortPattern:/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,tabletPattern:/android|ipad|playbook|silk/i}},r=Object.prototype.hasOwnProperty;function o(e,t){return null!=e&&null!=t&&e.toLowerCase()===t.toLowerCase()}function i(e,t){var n,r,o=e.length;if(!o||!t)return!1;for(n=t.toLowerCase(),r=0;r<o;++r)if(n===e[r].toLowerCase())return!0;return!1}function s(e){for(var t in e)r.call(e,t)&&(e[t]=new RegExp(e[t],"i"))}function a(e,t){this.ua=function(e){return(e||"").substr(0,500)}(e),this._cache={},this.maxPhoneWidth=t||600}return n.FALLBACK_PHONE="UnknownPhone",n.FALLBACK_TABLET="UnknownTablet",n.FALLBACK_MOBILE="UnknownMobile",e="isArray"in Array?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},function(){var t,o,i,a,l,d,c=n.mobileDetectRules;for(t in c.props)if(r.call(c.props,t)){for(o=c.props[t],e(o)||(o=[o]),l=o.length,a=0;a<l;++a)(d=(i=o[a]).indexOf("[VER]"))>=0&&(i=i.substring(0,d)+"([\\w._\\+]+)"+i.substring(d+5)),o[a]=new RegExp(i,"i");c.props[t]=o}s(c.oss),s(c.phones),s(c.tablets),s(c.uas),s(c.utils),c.oss0={WindowsPhoneOS:c.oss.WindowsPhoneOS,WindowsMobileOS:c.oss.WindowsMobileOS}}(),n.findMatch=function(e,t){for(var n in e)if(r.call(e,n)&&e[n].test(t))return n;return null},n.findMatches=function(e,t){var n=[];for(var o in e)r.call(e,o)&&e[o].test(t)&&n.push(o);return n},n.getVersionStr=function(e,t){var o,i,s,a,l=n.mobileDetectRules.props;if(r.call(l,e))for(s=(o=l[e]).length,i=0;i<s;++i)if(null!==(a=o[i].exec(t)))return a[1];return null},n.getVersion=function(e,t){var r=n.getVersionStr(e,t);return r?n.prepareVersionNo(r):NaN},n.prepareVersionNo=function(e){var t;return 1===(t=e.split(/[a-z._ \/\-]/i)).length&&(e=t[0]),t.length>1&&(e=t[0]+".",t.shift(),e+=t.join("")),Number(e)},n.isMobileFallback=function(e){return n.detectMobileBrowsers.fullPattern.test(e)||n.detectMobileBrowsers.shortPattern.test(e.substr(0,4))},n.isTabletFallback=function(e){return n.detectMobileBrowsers.tabletPattern.test(e)},n.prepareDetectionCache=function(e,r,o){if(e.mobile===t){var i,s,l;if(s=n.findMatch(n.mobileDetectRules.tablets,r))return e.mobile=e.tablet=s,void(e.phone=null);if(i=n.findMatch(n.mobileDetectRules.phones,r))return e.mobile=e.phone=i,void(e.tablet=null);n.isMobileFallback(r)?(l=a.isPhoneSized(o))===t?(e.mobile=n.FALLBACK_MOBILE,e.tablet=e.phone=null):l?(e.mobile=e.phone=n.FALLBACK_PHONE,e.tablet=null):(e.mobile=e.tablet=n.FALLBACK_TABLET,e.phone=null):n.isTabletFallback(r)?(e.mobile=e.tablet=n.FALLBACK_TABLET,e.phone=null):e.mobile=e.tablet=e.phone=null}},n.mobileGrade=function(e){var t=null!==e.mobile();return e.os("iOS")&&e.version("iPad")>=4.3||e.os("iOS")&&e.version("iPhone")>=3.1||e.os("iOS")&&e.version("iPod")>=3.1||e.version("Android")>2.1&&e.is("Webkit")||e.version("Windows Phone OS")>=7||e.is("BlackBerry")&&e.version("BlackBerry")>=6||e.match("Playbook.*Tablet")||e.version("webOS")>=1.4&&e.match("Palm|Pre|Pixi")||e.match("hp.*TouchPad")||e.is("Firefox")&&e.version("Firefox")>=12||e.is("Chrome")&&e.is("AndroidOS")&&e.version("Android")>=4||e.is("Skyfire")&&e.version("Skyfire")>=4.1&&e.is("AndroidOS")&&e.version("Android")>=2.3||e.is("Opera")&&e.version("Opera Mobi")>11&&e.is("AndroidOS")||e.is("MeeGoOS")||e.is("Tizen")||e.is("Dolfin")&&e.version("Bada")>=2||(e.is("UC Browser")||e.is("Dolfin"))&&e.version("Android")>=2.3||e.match("Kindle Fire")||e.is("Kindle")&&e.version("Kindle")>=3||e.is("AndroidOS")&&e.is("NookTablet")||e.version("Chrome")>=11&&!t||e.version("Safari")>=5&&!t||e.version("Firefox")>=4&&!t||e.version("MSIE")>=7&&!t||e.version("Opera")>=10&&!t?"A":e.os("iOS")&&e.version("iPad")<4.3||e.os("iOS")&&e.version("iPhone")<3.1||e.os("iOS")&&e.version("iPod")<3.1||e.is("Blackberry")&&e.version("BlackBerry")>=5&&e.version("BlackBerry")<6||e.version("Opera Mini")>=5&&e.version("Opera Mini")<=6.5&&(e.version("Android")>=2.3||e.is("iOS"))||e.match("NokiaN8|NokiaC7|N97.*Series60|Symbian/3")||e.version("Opera Mobi")>=11&&e.is("SymbianOS")?"B":(e.version("BlackBerry")<5||e.match("MSIEMobile|Windows CE.*Mobile")||e.version("Windows Mobile"),"C")},n.detectOS=function(e){return n.findMatch(n.mobileDetectRules.oss0,e)||n.findMatch(n.mobileDetectRules.oss,e)},n.getDeviceSmallerSide=function(){return window.screen.width<window.screen.height?window.screen.width:window.screen.height},a.prototype={constructor:a,mobile:function(){return n.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.mobile},phone:function(){return n.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.phone},tablet:function(){return n.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.tablet},userAgent:function(){return this._cache.userAgent===t&&(this._cache.userAgent=n.findMatch(n.mobileDetectRules.uas,this.ua)),this._cache.userAgent},userAgents:function(){return this._cache.userAgents===t&&(this._cache.userAgents=n.findMatches(n.mobileDetectRules.uas,this.ua)),this._cache.userAgents},os:function(){return this._cache.os===t&&(this._cache.os=n.detectOS(this.ua)),this._cache.os},version:function(e){return n.getVersion(e,this.ua)},versionStr:function(e){return n.getVersionStr(e,this.ua)},is:function(e){return i(this.userAgents(),e)||o(e,this.os())||o(e,this.phone())||o(e,this.tablet())||i(n.findMatches(n.mobileDetectRules.utils,this.ua),e)},match:function(e){return e instanceof RegExp||(e=new RegExp(e,"i")),e.test(this.ua)},isPhoneSized:function(e){return a.isPhoneSized(e||this.maxPhoneWidth)},mobileGrade:function(){return this._cache.grade===t&&(this._cache.grade=n.mobileGrade(this)),this._cache.grade}},"undefined"!=typeof window&&window.screen?a.isPhoneSized=function(e){return e<0?t:n.getDeviceSmallerSide()<=e}:a.isPhoneSized=function(){},a._impl=n,a.version="1.4.5 2021-03-13",a}))}(e.exports?function(t){e.exports=t()}:n.amdD)},5099:(e,t,n)=>{p3xr.ng.component("p3xrMainKeyHash",{template:n(1182),bindings:{p3xrValue:"=",p3xrValueBuffer:" =",p3xrKey:"<",p3xrResponse:"<"},controller:["p3xrCommon","p3xrSocket","p3xrDialogJsonView","p3xrDialogKeyNewOrSet","$rootScope","$scope","p3xrKeyPaging",function(e,t,r,o,i,s,a){const l=new a({$ctrl:this,$scope:s});this.$onInit=()=>{l.figurePaging()};const d=(e,t)=>{let n;n={};const r=p3xr.settings.keyPageCount*(this.page-1);let o=0;for(let e of Object.keys(this.p3xrValue))o>=r&&o<r+p3xr.settings.keyPageCount&&(n[e]=this.p3xrValue[e]),o++;return n};s.$watch("$ctrl.page",d),this.pageBasedList=()=>d(),this.copy=async t=>{await n.g.p3xr.clipboard({value:t.value}),e.toast(p3xr.strings.status.dataCopied)},this.downloadBuffer=async({key:t,$event:n})=>{try{const e=new Blob([this.p3xrValueBuffer[t]]),n=window.URL.createObjectURL(e),r=document.createElement("a");r.href=n,r.download=`${this.p3xrKey}-${t}.bin`,document.body.appendChild(r),r.click(),window.URL.revokeObjectURL(n),document.body.removeChild(r)}catch(t){e.generalHandleError(t)}},this.addHash=async t=>{try{await o.show({type:"append",$event:t.$event,model:{type:"hash",key:this.p3xrKey}}),i.$broadcast("p3xr-refresh-key")}catch(t){e.generalHandleError(t)}},this.deleteHashKey=async n=>{try{await e.confirm({event:n.$event,message:p3xr.strings.confirm.deleteHashKey}),await t.request({action:"key-hash-delete-field",payload:{key:this.p3xrKey,hashKey:n.hashKey}}),i.$broadcast("p3xr-refresh-key")}catch(t){e.generalHandleError(t)}},this.editValue=async t=>{try{const{hashKey:e,value:n}=t;await o.show({type:"edit",$event:t.$event,model:{type:"hash",value:n.length<p3xr.settings.maxValueAsBuffer?n:this.p3xrValueBuffer[e],hashKey:e,key:this.p3xrKey}}),i.$broadcast("p3xr-refresh-key")}catch(t){e.generalHandleError(t)}},this.showJson=e=>{const{value:t}=e;r.show({value:t})}}]})},5135:(e,t,n)=>{var r=n(6929);e.exports=function(e,t){var n=r(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this}},5141:(e,t,n)=>{var r=n(4253),o=n(8418),i=n(3591);e.exports=function(e){var t=o(e);return 1==t.length&&t[0][2]?i(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},5217:(e,t,n)=>{var r=n(4412),o=n(8522),i=n(469),s=n(1161),a=n(1441);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=i,l.prototype.has=s,l.prototype.set=a,e.exports=l},5240:(e,t,n)=>{var r=n(874),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,i=/\\(\\)?/g,s=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(o,(function(e,n,r,o){t.push(r?o.replace(i,"$1"):n||e)})),t}));e.exports=s},5245:e=>{const t={error:{cleared_license:"清除许可证",invalid_license:"无效的许可证",server_error:"服务器错误,请重试"},title:{donate:"捐赠",jsonRecursive:"展开所有叶子",name:"P3X Redis UI",nameDonated:"P3X Redis UI+",main:"您可以从左下方菜单中选择要连接的Redis进行连接访问",statistics:"Statistics",error:"错误",connectingRedis:"连接到Redis ...",socketioConnectError:"Socket.IO 错误",db:"DB",server:"服务端",clients:"客户端",memory:"内存",persistence:"持久性",stats:"统计",replication:"同步复制",cpu:"CPU",cluster:"集群"},confirm:{uploadBuffer:"您确定上传此二进制数据吗?",uploadBufferDone:"二进制数据已上传",uploadBufferDoneAndSave:"二进制数据上传并保存在服务器上",title:"确认",alert:"警告",info:"信息",deleteListItem:"您确定要删除该列表项吗?",deleteHashKey:"您确定要删除该哈希键项吗?",deleteStreamTimestamp:"您确定要删除此流时间戳吗?",deleteSetMember:"您确定要删除该集合成员?",deleteZSetMember:"您确定要删除该有序集合成员?",deleteConnection:"确认",deleteConnectionText:"您确定要删除此Redis连接吗?",deleteNode:"您确定要删除此Redis节点吗?",deleteAllKeys:e=>`删除此树及其所有键 (${e.key})?`,socketioConnectError:"Socket.IO 无法连接到该服务,请重新加载并尝试解决此错误,客户端无法解决此错误",deleteKey:"您确定要删除此键吗?",rename:{title:"您确定要重命名此键吗?",textContent:"如果您点击重命名按钮,它将永久重命名此键。",placeholder:"Redis键(必须存在)"},ttl:{title:"您要更改此键的TTL吗?",textContent:"如果您点击更改TTL按钮,将更改此键的生存时间,将其设置为空表示永久有效。",placeholder:"Redis键的TTL(整数或空)",placeholderPlaceholder:"空表示永久存在,否则使用所提供的整数。",convertTextToTime:"将文本转换为时间",convertTextToTimePlaceholder:"例如,1d 表示 86400"},license:{title:"启用捐赠许可证?",textContent:"如果要使用捐赠版本的功能,请联系alabard@gmail.com申请许可证。 捐赠金额为每月1美元。",placeholder:"注册码"}},language:{en:"英语 / English",zn:"中文 / Chinese",ru:"Русский / Russian"},intention:{copy:"复制",downloadBuffer:"下載二進位文件",setBuffer:"上傳二進位文件",saveWithFormatJson:"保存格式",formatJson:"格式化Json",pubsubMonitor:"PubSub监视器",language:"语言 / Language",ok:"确定",addKey:"加入此键",addKeyRoot:"加入一个根键",reloadKey:"重载键",reload:"重载",close:"关闭",commands:"命令",view:"视图",statistics:"统计",refresh:"刷新",clear:"清除",rename:"重命名",main:"主页",cancel:"取消",theme:"主题",github:"GitHub",githubRepo:"仓库",githubRelease:"发布",githubChangelog:"更新日志",settings:"设置",connect:"连接",disconnect:"断开",overview:"概览",console:"控制台",noConnections:"没有任何连接,请在设置菜单中添加一个连接。",noConnectionsInSettings:"没有连接,您可以在上面添加一个新的连接。",connectionAdd:"新连接",extend:"拓展",collapse:"折叠",add:"添加",edit:"编辑",save:"保存",ttl:"设置 TTL",license:"设定牌照",delete:"删除",remove:"删除",sure:"确定",testConnection:"测试连接",getKey:"加载Redis键及相关数据...",jsonViewShow:"显示 JSON 树",jsonViewEditor:"编辑JSON",quickConsole:"快的"},label:{id:{nodeId:"节点号",id:"连接ID",info:"如果您不想更改以下属性:sshPassword、sshPrivateKey、password、tlsCrt、tlsKey、tlsCa,请在这些属性中输入连接 ID 以保持属性值不变。 如果您希望节点密码具有相同的逻辑,则在节点密码中输入节点 ID。"},secureFeature:"如果您看到以 P3X 开头的值并且看起来相似,则这是一项安全功能。 要更改设置,只需将这些设置替换为空或其他内容即可保存它们。 如果您不更改设置,这些设置将保留在服务器上的原样。",ssh:{on:"SSH 开启",off:"SSH 关闭",sshHost:"SSH 主机",sshPort:"SSH端口",sshUsername:"SSH 用户名",sshPassword:"SSH密码",sshPrivateKey:"SSH 私钥"},isBuffer:e=>`[object ArrayBuffer] 表示該值是二進位緩衝區或該值大於 ${e.maxValueAsBuffer}`,streamValue:'流字段和值是唯一的。 例如:field1 value1 "field 2" "value 2"',streamTimestampId:"'*'表示自动生成或指定为<millisecondsTime>-<sequenceNumber>",unableToLoadKey:({key:e})=>`无法加载此密钥:: ${e}。可能,密钥被删除了。确切的错误在控制台中。`,bigJson:"此JSON对象超过10 kb,因此请确保您知道自己在做什么,因为某些功能可能会缓慢呈现。",addNode:"添加节点",validateJson:"验证JSON",reducedFunction:"功能限制",tooManyKeys:e=>`对于最大函数允许的键个数为 ${e.maxLightKeysCount}. 该数据库允许共超过的键总数为 ${e.count}.但键的排序及范式树等相关信息会被禁用。搜索仅在服务器上进行,而不是客户端搜索。`,redisCommandNotFound:"找不到匹配的Redis命令...",treeKeyStore:"该排序(自然排序)运行在客户端的浏览器上, 意味着针对大型集合(例如超过1W个键),渲染的时长开销需要增加.Redis中没有键排序, 就像这样。",socketIoTimeout:e=>`Socket.IO 请求超时,请求时最长(最大 ${e.timeout/1e3}秒) ...`,resizerInfo:e=>`面板(左/右)的最小宽度是 ${e.width}像素`,jsonViewNotParsable:"该值JSON无法解析",ttlTitle:"设置TTL时间(秒)",passwordSecure:"密码可能为空,但仍会显示字符,这是一项安全功能。",treeSeparatorEmpty:"如果树分隔符为空,则树将没有嵌套节点,只有纯列表",tlsWithoutCert:"无需额外证书即可启用 TLS",tlsRejectUnauthorized:"拒绝未经授权的证书",tlsSecure:"如果您看到以 P3X 开头的 TLS 配置或所有 TLS 设置看起来都相同,则这是一项安全功能。 要更改设置,只需将这些设置替换为空或其他内容即可保存。 如果您不更改 TLS 设置,这些设置将保持在服务器上的原样。",treeSeparatorEmptyNote:"没有嵌套节点,只是一个纯列表",welcomeConsole:"欢迎来到Redis控制台",welcomeConsoleInfo:"上下方向键选择历史记录功能已启用",redisListIndexInfo:"空值追加, -1 到前置或保存到光标之处",console:"控制台",connectiondAdd:"添加连接",connectiondEdit:"编辑连接",connectiondView:"查看连接",connections:"连接",keysSort:{on:"开启键排序",off:"关闭键排序"},cluster:{on:"群集",off:"集群关闭"},sentinel:{on:"哨兵開啟",off:"哨兵關閉",name:"哨兵名称"},readonly:{on:"只读",off:"只读关闭"},theme:{light:"浅棕",dark:"黑暗企业",darkNeu:"暗色",darkoBluo:"蓝色",enterprise:"企业风",redis:"Redis风格",matrix:"矩阵"},connected:e=>`已连接: ${e.name}`,tree:"树",askAuth:"请求授权"},status:{dataCopied:"数据在剪贴板中",licenseSaved:"许可证已保存",nodeRemoved:"节点已删除",keyIsNotExisting:"此键可能已被删除或过期。",keyCount:e=>0===e.keyCount?"没有任何键":1===e.keyCount?"1 个键":`${e.keyCount} 键`,treeExpandAll:"展开所可能的原因是,连接已删除,自动连接失败有树,该操作的代价就是有点费时...",noRedisKeys:"此数据库中没有任何键。",redisConnected:"Redis 连接成功",reloadingDataInfo:"重新加载Redis数据信息",added:"已添加",saved:"已更新",cancelled:"已取消",deleted:"已删除",savedRedis:"Redis数据已保存",redisDisconnected:e=>`该连接有一个错误: ${e.error.message}`,dbChanged:e=>`db索引设置为 ${e.db}. `,treeDeleted:e=>`该树已删除 (${e.key}).`,deletedKey:e=>`该键已删除 (${e.key}).`,renamedKey:"该键已重命名",ttlChanged:"该键TTL已被更改",notInteger:"输入值不是一个整数",persisted:"永久键",set:"键已设置/添加"},code:{"delete-connection":"此连接已删除,因此您与此Redis实例断开连接。","save-connection":"此连接已更改,因此您与此Redis实例断开连接。 你可以重新连接。","readonly-connections":"连接(添加/保存/删除)只是只读!","readonly-connection-mode":"此连接为只读模式!","list-out-of-bounds":"此列表索引超出范围","donation-ware-feature":"捐赠版本中提供了此功能。","auto-connection-failed":"因此,可能导致连接被删除并且自动连接失败。",invalid_console_command:"此命令无法通过 GUI 运行。"},form:{error:{required:"必填",port:"端口号范围是 1-65535",invalid:"值无效,请重新输入"},connection:{label:{name:"连接名字",host:"主机名",port:"端口",password:"密码",username:"用户名"}},treeSettings:{maxValueDisplay:"最大值显示字符串长度",maxValueDisplayInfo:"如果最大值显示为零,则显示所有内容,如果大于0,则将截断。 如果它是-1,它将不显示没有编辑字符串的值,对于其他人,它显示所有内容。",maxKeys:"最大密钥数",maxKeysInfo:"为了避免GUI崩溃,我们限制了最大密钥数。",keyCount:()=>`键数: ${p3xr.state.keysRaw.length}`,label:{animation:"使用动画",noAnimation:"没有动画",jsonFormatTwoSpace:"用2个空格格式化JSON",jsonFormatFourSpace:"用4个空格格式化JSON",formName:"Redis设置",searchModeClient:"客户端搜索模式",searchModeServer:"服务端搜索模式",searchModeStartsWith:"以模式启动搜索",searchModeIncludes:"搜索包括模式"},field:{treeSeparator:"树分隔符",treeSeparatorSelector:"树分隔符选择器",page:"树分页数",keyPageCount:"按键分页数",keysSort:"对键进行排序",searchMode:"搜索模式",searchModeStartsWith:"搜索以 / 开头"},error:{keyPageCount:"密钥页数必须为5到100之间的整数",page:"页数必须是10  -  500之间的整数",maxValueDisplay:"最大显示值必须是介于-1和32768之间的整数",maxKeys:"最大密钥计数值必须是100到100000之间的整数"}},key:{label:{formName:{add:"添加新的Redis键",edit:"编辑 Redis key",append:"添加到现有的Redis键"}},field:{streamTimestamp:"时间戳记",key:"键",type:"类型",index:"索引",hashKey:"哈希键",score:"分数",value:"值"},error:{streamTimestamp:"时间戳是必需的,可以是Redis格式,也可以*",key:"键至少存在一个字符",hashKey:"哈希表键至少是一个字符",score:"排序的集合分数是必需的",value:"该值是必填的"}},main:{label:{database:"DB"}}},page:{overview:{noConnected:"没有任何连接到Redis",overviewClients:"按客户端连接计数展示所有连接",connectedCount:e=>1===e.length?"1 客户端":`${e.length} 客户端`},key:{label:{key:"键",encoding:"编码",length:"大小",ttl:"TTL",ttlTitle:"生存时间",type:"类型",ttlNotExpire:"不会过期",lengthString:"位元組",lengthItem:"项数",actions:"操作"},list:{table:{index:"索引",value:"值"}},hash:{table:{hashkey:"哈希",value:"值"}},set:{table:{value:"成员"}},zset:{table:{value:"成员",score:"分数"}},stream:{table:{timestamp:"时间戳ID",field:"领域",value:"值"}}},treeControls:{settings:"树设置",expandAll:"展开所有",collapseAll:"折叠所有",search:{search:"在键中搜索",clear:"清空当前搜索结果",placeholderClient:"客户端搜索",placeholderServer:"服务端搜索",info:`客户端搜索是匹配输入的文本,服务端搜索则遵循*{search-text}*模式搜索.对于大量数据的搜索最好在服务端进行搜索,而较小数据量可以考虑客户端搜索。如果键数超过  ${p3xr.settings.maxLightKeysCount}个的则只能在服务端搜索`,largeSetInfo:"在大型集合中,禁用客户端搜索。 所以现在只能进行服务器端搜索。",infoDetails:"要了解搜索的工作原理,请查看设置"},pager:{next:"下一页",prev:"上一页",first:"首页",last:"末页"}}},time:{years:"年份",months:"个月",days:"天",year:"年",month:"月",day:"天"},redisTypes:{string:"字符串",list:"列表",hash:"哈希表",set:"集合",zset:"有序集合 - zset",stream:"流"}};e.exports=t},5304:(e,t,n)=>{var r=n(7137),o=n(6794),i=n(6316);e.exports=function(e){return i(e)?r(e):o(e)}},5387:(e,t,n)=>{var r=n(6522),o=n(7164),i=n(2620),s={};s["[object Float32Array]"]=s["[object Float64Array]"]=s["[object Int8Array]"]=s["[object Int16Array]"]=s["[object Int32Array]"]=s["[object Uint8Array]"]=s["[object Uint8ClampedArray]"]=s["[object Uint16Array]"]=s["[object Uint32Array]"]=!0,s["[object Arguments]"]=s["[object Array]"]=s["[object ArrayBuffer]"]=s["[object Boolean]"]=s["[object DataView]"]=s["[object Date]"]=s["[object Error]"]=s["[object Function]"]=s["[object Map]"]=s["[object Number]"]=s["[object Object]"]=s["[object RegExp]"]=s["[object Set]"]=s["[object String]"]=s["[object WeakMap]"]=!1,e.exports=function(e){return i(e)&&o(e.length)&&!!s[r(e)]}},5410:e=>{e.exports=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}},5425:(e,t,n)=>{var r=n(889)(Object.getPrototypeOf,Object);e.exports=r},5439:()=>{p3xr.theme.darkNeu=function(e,t){p3xr.theme.darkNeu.order=1,e.theme("p3xrThemeDarkNeuLayout").primaryPalette("blue-grey",{default:"800","hue-1":"300","hue-2":"700","hue-3":"900"}).accentPalette("blue-grey",{default:"300"}).warnPalette("grey").backgroundPalette("grey",{default:"900"}).dark(),e.theme("p3xrThemeDarkNeu").primaryPalette("cyan").accentPalette("blue").warnPalette("yellow").dark(),e.theme("p3xrThemeDarkNeuCommon").primaryPalette("green").accentPalette("grey").warnPalette("blue").backgroundPalette("blue-grey",{default:"900"}).dark()}},5456:(e,t,n)=>{var r=n(2003),o=n(6596),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!o(e))||(s.test(e)||!i.test(e)||null!=t&&e in Object(t))}},5483:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},5528:e=>{e.exports=function(e,t,n,r){var o=-1,i=null==e?0:e.length;for(r&&i&&(n=e[++o]);++o<i;)n=t(n,e[o],o,e);return n}},5590:(e,t,n)=>{p3xr.ng.component("p3xrMainStatistics",{template:n(2711),controller:["p3xrCommon","p3xrRedisParser","p3xrSocket","$rootScope","$scope","$timeout","$stateParams","$mdMedia",function(e,t,n,r,o,i,s,a){const l=["in","run","per"],d=["sha1"],c={perc:"percent",sec:"seconds"};let u=!0;const m=()=>{this.maxHeight=u?"auto":document.getElementById("p3xr-main-content-container").offsetHeight-50};o.$watch((()=>a("xs")),((e,t)=>{u=e,m()})),$window.on("resize",m),this.$doCheck=m,this.$onInit=()=>{p3xr.state.redisChanged&&(p3xr.state.redisChanged=!1,r.$broadcast("p3xr-refresh"))},this.$onDestroy=()=>{$window.off("resize",m)},this.hasDatabases=Object.keys(r.p3xr.state.info.keyspaceDatabases).length>0,this.generateKey=e=>{if(p3xr.strings.title.hasOwnProperty(e))return p3xr.strings.title[e];return e.split("_").map(((e,t)=>(c.hasOwnProperty(e)&&(e=c[e]),d.includes(e)||e.length<4&&!l.includes(e)?e.toUpperCase():0===t?e[0].toUpperCase()+e.substring(1):e))).join(" ")}}]})},5603:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},5611:()=>{p3xr.theme.matrix=function(e){p3xr.theme.matrix.order=5,e.theme("p3xrThemeMatrixLayout").primaryPalette("light-green",{default:"A400","hue-1":"A400","hue-2":"700","hue-3":"900"}).accentPalette("light-green",{default:"A400","hue-1":"100","hue-2":"600","hue-3":"800"}).warnPalette("green").backgroundPalette("grey",{default:"900","hue-1":"900","hue-2":"500","hue-3":"100"}).dark(),e.theme("p3xrThemeMatrix").primaryPalette("light-green",{default:"A400","hue-1":"50","hue-2":"700","hue-3":"900"}).accentPalette("lime",{default:"A400"}).warnPalette("green",{default:"A700"}).backgroundPalette("grey").dark(),e.theme("p3xrThemeMatrixCommon").primaryPalette("light-green",{default:"A400","hue-1":"A400","hue-2":"A400","hue-3":"A400"}).accentPalette("light-green",{default:"A400","hue-1":"A400","hue-2":"A400","hue-3":"A400"}).warnPalette("green").backgroundPalette("grey",{default:"900"}).dark()}},5661:(e,t,n)=>{var r=n(3984)(n(9107),"Map");e.exports=r},5719:()=>{const e={getPosition:function(e){let t=0,n=0;if(void 0===e)return{left:0,top:0,width:0,height:0};const r=e.currentStyle||window.getComputedStyle(e),o={width:e.offsetWidth+(parseFloat(r.marginLeft)+parseFloat(r.marginRight))+(parseFloat(r.paddingLeft)+parseFloat(r.paddingRight))+(parseFloat(r.borderLeftWidth)+parseFloat(r.borderRightWidth)),height:e.offsetHeight+(parseFloat(r.marginTop)+parseFloat(r.marginBottom))+(parseFloat(r.paddingTop)+parseFloat(r.paddingBottom))+(parseFloat(r.borderTopWidth)+parseFloat(r.borderBottomWidth))};for(;e;){if("BODY"===e.tagName){const r=e.scrollLeft||document.documentElement.scrollLeft,o=e.scrollTop||document.documentElement.scrollTop;t+=e.offsetLeft-r+e.clientLeft,n+=e.offsetTop-o+e.clientTop}else t+=e.offsetLeft-e.scrollLeft+e.clientLeft,n+=e.offsetTop-e.scrollTop+e.clientTop;e=e.offsetParent}return o.left=t,o.top=n,o}};p3xr.dom=e},5728:(e,t,n)=>{p3xr.ng=angular.module("p3xr-redis-ui",["ngCookies","ngAnimate","ngAria","ngSanitize","ngMessages","ngMaterial","ui.router","treeControl","angular-json-tree","angular-inview"]),n(4468),p3xr.ng.config(["$qProvider","$locationProvider","$urlRouterProvider","$stateProvider","p3xrThemeProvider","$mdAriaProvider",(e,t,r,o,i,s)=>{s.disableWarnings(),e.errorOnUnhandledRejections(!1),t.html5Mode(!0),i.start();const a=n(2278);r.otherwise("/main"),a(o)}]),p3xr.ng.run(["$rootScope","p3xrSocket","p3xrTheme","$mdMedia","$state","$timeout","$cookies","p3xrRedisParser","$animate",(e,t,r,o,i,s,a,l,d)=>{let c,u,m;e.p3xr=p3xr,e.$mdMedia=o,e.isElectron=/electron/i.test(navigator.userAgent),e.hasConnected=()=>0!==Object.keys(p3xr.state.redisConnections).length,e.locationReload=()=>{location.href="/"},Object.defineProperty(e.p3xr.state,"search",{get:()=>(c=a.get("p3xr-state-search"),void 0===c&&(c=""),c),set:e=>{c=e,c=a.put("p3xr-state-search",e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings,"redisTreeDivider",{get:()=>(u=a.get(p3xr.settings.tree.cookieName),void 0===u&&(u=p3xr.settings.tree.defaultDivider),u),set:e=>{u=e,u=a.put(p3xr.settings.tree.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings,"jsonFormat",{get:()=>(m=a.get(p3xr.settings.jsonFormatSettings.cookieName),void 0===m&&(m=p3xr.settings.jsonFormatSettings.default),parseInt(m)),set:e=>{m=e,m=a.put(p3xr.settings.jsonFormatSettings.cookieName,e,{expires:p3xr.settings.cookieExpiry})}});const p=()=>{console.log("set animation",e.p3xr.settings.animation),d.enabled(e.p3xr.settings.animation),$body.removeClass("p3xr-no-animation"),$body.removeClass("p3xr-animation"),e.p3xr.settings.animation?$body.addClass("p3xr-animation"):$body.addClass("p3xr-no-animation")};let h,g,f,x,y,b,v;Object.defineProperty(e.p3xr.settings,"animation",{get:()=>(h=a.get(p3xr.settings.animationSettings.cookieName),void 0===h&&(h=p3xr.settings.animationSettings.default),1===parseInt(h)),set:e=>{h=e,h=a.put(p3xr.settings.animationSettings.cookieName,e,{expires:p3xr.settings.cookieExpiry}),p()}}),p(),Object.defineProperty(e.p3xr.settings,"maxValueDisplay",{get:()=>(g=a.get(p3xr.settings.maxValueDisplaySetting.cookieName),void 0===g&&(g=p3xr.settings.maxValueDisplaySetting.default),parseInt(g)),set:e=>{g=parseInt(e),g=a.put(p3xr.settings.maxValueDisplaySetting.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings,"maxKeys",{get:()=>{f=a.get(p3xr.settings.maxKeysSettings.cookieName),void 0===f&&(f=p3xr.settings.maxKeysSettings.default);let e=parseInt(f);return(isNaN(e)||e<5||e>p3xr.settings.maxKeysSettings.max)&&(e=p3xr.settings.maxKeysSettings.default),e},set:e=>{f=parseInt(e),f=a.put(p3xr.settings.maxKeysSettings.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings.language,"current",{get:()=>(x=a.get(p3xr.settings.language.cookieName),void 0===x&&(x=p3xr.settings.language.defaultLanguage,n(1655).locale(p3xr.settings.language.momentDateMap[x])),x),set:t=>{void 0===t&&(t=p3xr.settings.language.defaultLanguage),x=t,n(1655).locale(p3xr.settings.language.momentDateMap[x]),e.p3xr.strings=p3xr.settings.language.translation[t],x=a.put(p3xr.settings.language.cookieName,t,{expires:p3xr.settings.cookieExpiry})}}),e.p3xr.settings.language.current=a.get(p3xr.settings.language.cookieName),Object.defineProperty(e.p3xr.settings,"keysSort",{get:()=>(y=a.get(p3xr.settings.keySortInfo.cookieName),void 0===y?y=p3xr.settings.keySortInfo.default:"true"===y?y=!0:"false"===y&&(y=!1),y),set:e=>{y=e,y=a.put(p3xr.settings.keySortInfo.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings,"searchClientSide",{get:()=>(b=a.get(p3xr.settings.searchInfoClientSide.cookieName),void 0===b?b=p3xr.settings.searchInfoClientSide.default:"true"===b?b=!0:"false"===b&&(b=!1),(p3xr.state.keysRaw.length>p3xr.settings.maxLightKeysCount||p3xr.state.dbsize>p3xr.settings.maxLightKeysCount)&&(b=!1),b),set:e=>{b=e,b=a.put(p3xr.settings.searchInfoClientSide.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings,"searchStartsWith",{get:()=>(v=a.get(p3xr.settings.searchInfoStartsWith.cookieName),void 0===v?v=p3xr.settings.searchInfoStartsWith.default:"true"===v?v=!0:"false"===v&&(v=!1),v),set:e=>{v=e,v=a.put(p3xr.settings.searchInfoStartsWith.cookieName,e,{expires:p3xr.settings.cookieExpiry})}});let T=[];Object.defineProperty(e,"expandedNodes",{get:()=>T,set:e=>{T=e}}),e.savedExpandedNodes=[];let S,$=1;Object.defineProperty(e.p3xr.state,"page",{get:()=>$,set:e=>{$=parseInt(e)}}),e.keysTreeRendered=[],Object.defineProperty(e,"keysTree",{get:()=>(!0!==e.p3xr.state.redisChanged&&JSON.stringify(S)===JSON.stringify(p3xr.state.keys)||(e.p3xr.state.redisChanged=!1,e.keysTreeRendered=l.keysToTreeControl({keys:p3xr.state.keys}),S=p3xr.state.keys),e.keysTreeRendered)});let k,w,M=[];Object.defineProperty(e.p3xr.state,"keys",{get:()=>{if(M=e.p3xr.state.keysRaw.slice(),e.p3xr.settings.searchClientSide&&"string"==typeof e.p3xr.state.search&&e.p3xr.state.search.length>0&&(M=e.p3xr.settings.searchStartsWith?M.filter((t=>t.startsWith(e.p3xr.state.search))):M.filter((t=>t.includes(e.p3xr.state.search)))),M<=e.p3xr.settings.pageCount)return M;{const t=(e.p3xr.state.page-1)*e.p3xr.settings.pageCount;return M.slice(t,t+e.p3xr.settings.pageCount)}}}),Object.defineProperty(e.p3xr.state,"pages",{get:()=>Math.ceil(M.length/e.p3xr.settings.pageCount)}),Object.defineProperty(e.p3xr.settings,"pageCount",{get:()=>(k=a.get(p3xr.settings.paging.cookieName),k=void 0===k?p3xr.settings.paging.default:parseInt(k),k),set:e=>{k=e,k=a.put(p3xr.settings.paging.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings,"keyPageCount",{get:()=>(w=a.get(p3xr.settings.keyPage.cookieName),w=void 0===w?p3xr.settings.keyPage.default:parseInt(w),w),set:e=>{w=e,w=a.put(p3xr.settings.keyPage.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),r.start(),console.info("P3X Redis UI ran")}]),n(2495)()},5760:(e,t,n)=>{var r=n(8821),o=n(6806),i=n(5304);e.exports=function(e){return r(e,i,o)}},5808:e=>{e.exports='<p3xr-key-pager p3xr-controller="$ctrl"></p3xr-key-pager> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start center" layout-align="center center" md-colors="{ background: \'primary-300\' }"> <div flex="20"> <span ng-if="!$root.$mdMedia(\'xs\')">&nbsp;</span> {{ $root.p3xr.strings.page.key.zset.table.score }} </div> <div flex="60"> {{ $root.p3xr.strings.page.key.zset.table.value }} </div> <div flex="20" style="text-align:right" class="p3xr-connected-readonly-filler"> <md-button class="md-icon-button" ng-click="$ctrl.addZSet({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.add }}</md-tooltip> <md-icon>add</md-icon> </md-button> </div> </div> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start start" layout-align="center center" ng-repeat="value in $ctrl.pageBasedList() track by $index" ng-class="{ \'p3xr-list-key-odd-item\': $odd }" class="p3xr-list-key-item"> <div flex="20" ng-click="$ctrl.editValue({ score: value[0], member: value[1], $event: $event, $index: $index + (($ctrl.page -1) * $root.p3xr.settings.keyPageCount)})"> <span ng-if="!$root.$mdMedia(\'xs\')">&nbsp;</span> {{ value[0] }} </div> <div flex="60" style="overflow:auto;align-items:flex-start;max-height:200px" ng-click="$ctrl.editValue({ score: value[0], member: value[1], $event: $event, $index: $index + (($ctrl.page -1) * $root.p3xr.settings.keyPageCount)})"> <span class="p3xr-pre" ng-if="$root.p3xr.settings.maxValueDisplay > 0 && value[1].length > $root.p3xr.settings.maxValueDisplay">{{ value[1].substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span> <span class="p3xr-pre" ng-if="$root.p3xr.settings.maxValueDisplay === 0 || value[1].length <= $root.p3xr.settings.maxValueDisplay|| $root.p3xr.settings.maxValueDisplay === -1 ">{{ value[1] }}</span> </div> <div flex="20" style="text-align:right"> <md-button class="md-icon-button md-warn" ng-click="$ctrl.deleteZSet({ $index: $index + (($ctrl.page -1) * $root.p3xr.settings.keyPageCount), $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.delete }}</md-tooltip> <md-icon>delete</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.showJson({ value:  value[1]})"> <md-tooltip>{{ $root.p3xr.strings.intention.jsonViewShow }}</md-tooltip> <md-icon>table_chart</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.copy({ $event: $event, value: value[1]})"> <md-tooltip>{{ $root.p3xr.strings.intention.copy }}</md-tooltip> <md-icon>content_copy</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.downloadBuffer({ $index: $index + (($ctrl.page -1) * $root.p3xr.settings.keyPageCount  ), $event: $event})"> <md-icon>download</md-icon> <md-tooltip>{{ $root.p3xr.strings.intention.downloadBuffer }} </md-tooltip> </md-button> <md-button class="md-icon-button md-primary" ng-click="$ctrl.editValue({ score: value[0], member: value[1], $event: $event,  $index: $index + (($ctrl.page -1) * $root.p3xr.settings.keyPageCount  )})"> <md-tooltip>{{ $root.p3xr.strings.intention.edit }}</md-tooltip> <md-icon>edit</md-icon> </md-button> </div> </div> '},5841:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}},5866:()=>{p3xr.ng.directive("ngEnter",(function(){return function(e,t,n){t.bind("keydown keypress",(function(t){13===t.which&&(e.$apply((function(){e.$eval(n.ngEnter)})),t.preventDefault())}))}}))},5963:(e,t,n)=>{var r=n(3984)(n(9107),"Set");e.exports=r},6008:e=>{e.exports=function(e){return e.split("")}},6036:(e,t,n)=>{var r=n(8314),o=n(9449)((function(e,t,n){return t=t.toLowerCase(),e+(n?r(t):t)}));e.exports=o},6055:e=>{e.exports='<div style="text-align:right"> <input type="file" id="p3xr-main-key-string-upload-buffer" style="display:none" onchange="angular.element(this).scope().readFileAsBuffer(event)"/> <span ng-if="!$ctrl.editable"> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.setBufferUpload({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-icon>upload</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.setBuffer }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.setBuffer }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-accent" ng-click="$ctrl.downloadBuffer({ $event: $event})"> <md-icon>download</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.downloadBuffer }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.downloadBuffer }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-accent" ng-click="$ctrl.jsonViewer({ $event: $event})"> <md-icon>table_chart</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.jsonViewShow }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.jsonViewShow }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-accent" ng-click="$ctrl.copy({ $event: $event})"> <md-icon>content_copy</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.copy }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.copy }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.formatJson({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-icon>format_line_spacing</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.formatJson }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.formatJson }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.jsonEditor({ $event: $event})" ng-if="$root.p3xr.state.donated"> <i class="fas fa-file-alt"></i> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.jsonViewEditor }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.jsonViewEditor }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.edit()"> <md-icon>edit</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.edit }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.edit }}</md-tooltip> </md-button> </span> <span ng-if="$ctrl.editable"> <div layout="row" layout-align="end center"> <div> <md-switch ng-model="$ctrl.validateJson" class="md-accent" style="float:right" ng-if="$root.p3xr.state.connection.readonly !== true"> {{ $root.p3xr.strings.label.validateJson }} </md-switch> </div> <div> <md-button class="md-button md-raised md-warn" ng-click="$ctrl.cancelEdit()" md-autofocus> <md-icon>cancel</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.cancel }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.cancel }}</md-tooltip> </md-button> </div> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.setBufferUpload({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-icon>upload</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.setBuffer }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.setBuffer }} </md-tooltip> </md-button> <div> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.save()" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-icon>save</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.save }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.save }}</md-tooltip> </md-button> </div> </div> </span> </div> <div layout-padding> <div style="max-width:100%;overflow:auto" ng-click="$ctrl.edit()" ng-if="!$ctrl.editable"> <span ng-if="$root.p3xr.settings.maxValueDisplay > -1"> <span class="p3xr-pre" ng-if="$root.p3xr.settings.maxValueDisplay > 0 && $ctrl.p3xrValue.length > $root.p3xr.settings.maxValueDisplay">{{ $ctrl.p3xrValue.substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span> <span class="p3xr-pre" ng-if="$root.p3xr.settings.maxValueDisplay === 0 || $ctrl.p3xrValue.length <= $root.p3xr.settings.maxValueDisplay">{{ $ctrl.p3xrValue }}</span> </span> </div> <div ng-if="$ctrl.editable"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.label.edit }}</label> <div class="p3xr-md-input-container-bottom-info" ng-if="$ctrl.p3xrValue && $ctrl.p3xrValue.toString() === \'[object ArrayBuffer]\'"> {{ $root.p3xr.strings.label.isBuffer({ maxValueAsBuffer: $root.p3xr.settings.prettyBytes($root.p3xr.settings.maxValueAsBuffer)}) }} {{$ctrl.bufferDisplay($ctrl.p3xrValue)}} </div> <textarea ng-model="$ctrl.p3xrValue" ng-if="!$ctrl.buffer" p3x-validate-json p3x-validate-json-required="validateJson"></textarea> <span ng-if="$ctrl.buffer"> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.isBuffer({ maxValueAsBuffer: $root.p3xr.settings.prettyBytes($root.p3xr.settings.maxValueAsBuffer)}) }} {{$ctrl.bufferDisplay($ctrl.p3xrValueBuffer)}} </div> <textarea ng-model="$ctrl.p3xrValueBuffer" p3x-validate-json p3x-validate-json-required="validateJson"></textarea> </span> </md-input-container> </div> </div> '},6060:(e,t,n)=>{var r=n(3984)(Object,"create");e.exports=r},6132:(e,t,n)=>{var r=n(889)(Object.keys,Object);e.exports=r},6165:e=>{var t=Object.prototype;e.exports=function(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||t)}},6291:e=>{e.exports='<md-dialog> <form novalidate name="p3xrTtlForm" ng-submit="submit()"> <md-toolbar md-theme="{{ $root.p3xr.state.themeLayout }}" class="md-hue-3"> <div class="md-toolbar-tools"> <h2 flex md-truncate>{{ $root.p3xr.strings.confirm.ttl.title}}</h2> <md-button class="md-icon-button" ng-click="cancel()"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content md-theme="{{ $root.p3xr.state.theme }}"> <md-content class="p3xr-padding"> <div class="md-text"> {{ $root.p3xr.strings.confirm.ttl.textContent }} </div> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.confirm.ttl.placeholder }}</label> <input type="number" name="ttl" ng-model="model.ttl" min="-1" placeholder="{{ $root.p3xr.strings.confirm.ttl.placeholderPlaceholder }}"> <div ng-messages="p3xrTtlForm.ttl.$error"> </div> </md-input-container> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.confirm.ttl.convertTextToTime }}</label> <input name="convertTextToTime" ng-model="convertTextToTime" placeholder="{{ $root.p3xr.strings.confirm.ttl.convertTextToTimePlaceholder}}"> <div ng-messages="p3xrTtlForm.convertTextToTime.$error"> </div> </md-input-container> <md-button ng-click="openTimestringNpm()" class="md-accent">https://www.npmjs.com/package/timestring</md-button> </md-content> </md-dialog-content> <md-dialog-actions md-theme="{{ $root.p3xr.state.theme }}"> <md-button class="md-raised md-warn" ng-click="cancel()" md-autofocus> <md-icon>cancel</md-icon> {{ $root.p3xr.strings.intention.cancel }} </md-button> <md-button class="md-raised md-primary" type="submit"> <md-icon>timer</md-icon> {{ $root.p3xr.strings.intention.ttl }} </md-button> </md-dialog-actions> </form> </md-dialog> '},6316:(e,t,n)=>{var r=n(8148),o=n(7164);e.exports=function(e){return null!=e&&o(e.length)&&!r(e)}},6364:()=>{},6385:(e,t,n)=>{var r=n(9390)({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"});e.exports=r},6435:(e,t,n)=>{var r=n(5217),o=n(8658),i=n(3844),s=n(6503),a=n(1563),l=n(259);function d(e){var t=this.__data__=new r(e);this.size=t.size}d.prototype.clear=o,d.prototype.delete=i,d.prototype.get=s,d.prototype.has=a,d.prototype.set=l,e.exports=d},6479:e=>{var t=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;e.exports=function(e){return e.match(t)||[]}},6503:e=>{e.exports=function(e){return this.__data__.get(e)}},6520:e=>{e.exports='<md-dialog aria-label="{{$root.p3xr.strings.form.key.label.formName}}" class="fullscreen-dialog fullscreen-dialog-fix-width"> <form novalidate name="p3xrKeyNewForm" ng-submit="submit()"> <md-toolbar md-theme="{{ $root.p3xr.state.themeLayout }}" class="md-hue-3"> <div class="md-toolbar-tools"> <h2 flex md-truncate> {{ options.type === \'edit\' ? $root.p3xr.strings.form.key.label.formName.edit : ( options.type === \'append\' ? $root.p3xr.strings.form.key.label.formName.append : $root.p3xr.strings.form.key.label.formName.add ) }} </h2> <md-button class="md-icon-button" ng-click="cancel()"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content md-theme="{{ $root.p3xr.state.theme }}"> <md-content> <div class="p3xr-padding"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.key }}</label> <input required minlength="1" ng-model="model.key" name="key" ng-disabled="options.type !== \'add\'"> <div ng-messages="p3xrKeyNewForm.key.$error"> <div ng-message-exp="[\'required\', \'minlength\']"> {{ $root.p3xr.strings.form.key.error.key }} </div> </div> </md-input-container> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.type }}</label> <md-select ng-model="model.type" name="type" ng-disabled="options.type !== \'add\'"> <md-option ng-repeat="type in types" ng-value="type"> {{ $root.p3xr.strings.redisTypes[type] }} </md-option> </md-select> </md-input-container> <span ng-switch="model.type"> <span ng-switch-when="list"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.index }}</label> <input type="number" step="1" ng-model="model.index" name="index"> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.redisListIndexInfo }} </div> </span> <span ng-switch-when="hash"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.hashKey }}</label> <input required minlength="1" ng-model="model.hashKey" name="hashKey"> <div ng-messages="p3xrKeyNewForm.hashKey.$error"> <div ng-message-exp="[\'required\', \'minlength\']"> {{ $root.p3xr.strings.form.key.error.hashKey }} </div> </div> </md-input-container> </span> <span ng-switch-when="zset"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.score }}</label> <input type="number" required ng-model="model.score" name="score"> <div ng-messages="p3xrKeyNewForm.score.$error"> <div ng-message-exp="[\'required\']"> {{ $root.p3xr.strings.form.key.error.score }} </div> </div> </md-input-container> </span> <span ng-switch-when="stream"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.streamTimestamp }}</label> <input type="text" required ng-model="model.streamTimestamp" name="streamTimestamp"> <div ng-messages="p3xrKeyNewForm.streamTimestamp.$error"> <div ng-message-exp="[\'required\']"> {{ $root.p3xr.strings.form.key.error.streamTimestamp }} </div> </div> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.streamTimestampId }} </div> </md-input-container> </span> </span> <input type="file" id="p3xr-main-key-new-upload-buffer" style="display:none" onchange="angular.element(this).scope().readFileAsBuffer(event)"/> <md-button class="md-button md-raised md-primary" ng-click="setBufferUpload({ $event: $event})" ng-if="model.type !== \'stream\'"> <md-icon>upload</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.setBuffer }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.setBuffer }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-if="$root.p3xr.state.donated" ng-click="jsonEditor({ $event: $event, value: model.value})"> <i class="fas fa-file-alt"></i> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.jsonViewEditor }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.jsonViewEditor }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="formatJson({ $event: $event})"> <md-icon>format_line_spacing</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.formatJson }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.formatJson }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-accent" ng-click="jsonViewer({ $event: $event, value: model.value})"> <md-icon>table_chart</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.jsonViewShow }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.jsonViewShow }} </md-tooltip> </md-button> <md-button class="md-icon-button md-accent" ng-click="copy({ $event: $event, value: model.value})"> <md-tooltip>{{ $root.p3xr.strings.intention.copy }}</md-tooltip> <md-icon>content_copy</md-icon> </md-button> <md-switch ng-model="validateJson" class="md-accent" style="margin-top:0"> {{ $root.p3xr.strings.label.validateJson }} </md-switch> <div ng-if="model.type === \'stream\'" class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.streamValue }} </div> <div ng-if="valueType === \'object\'" class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.isBuffer({ maxValueAsBuffer: $root.p3xr.settings.prettyBytes($root.p3xr.settings.maxValueAsBuffer)}) }} {{ bufferDisplay(model.value) }} </div> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.value }}</label> <textarea ng-model="model.value" required p3x-validate-json p3x-validate-json-required="validateJson" name="value"></textarea> <div ng-messages="p3xrKeyNewForm.value.$error"> <div ng-message="required"> {{ $root.p3xr.strings.form.key.error.value }} </div> <div ng-message="p3xValidateJson"> {{ $root.p3xr.strings.label.jsonViewNotParsable }} </div> </div> </md-input-container> </div> </md-content> </md-dialog-content> <md-dialog-actions md-theme="{{ $root.p3xr.state.theme }}"> <md-button class="md-raised md-warn" ng-click="cancel()" md-autofocus> <md-icon>cancel</md-icon> {{ $root.p3xr.strings.intention.cancel }} </md-button> <md-button class="md-raised md-primary" type="submit" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-icon>{{ options.type === \'edit\' ? \'edit\' : \'add\'}}</md-icon> {{ options.type === \'edit\' ? $root.p3xr.strings.intention.save : $root.p3xr.strings.intention.add }} </md-button> </md-dialog-actions> </form> </md-dialog> '},6522:(e,t,n)=>{var r=n(6711),o=n(905),i=n(2588),s=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":s&&s in Object(e)?o(e):i(e)}},6571:e=>{e.exports=function(e,t){return null!=e&&t in Object(e)}},6587:(e,t,n)=>{p3xr.ng.component("p3xrMainKeyStream",{template:n(9718),bindings:{p3xrValue:"=",p3xrValueBuffer:" =",p3xrKey:"<",p3xrResponse:"<"},controller:["$scope","p3xrCommon","p3xrSocket","p3xrDialogJsonView","p3xrDialogKeyNewOrSet","$rootScope","p3xrKeyPaging",function(e,t,r,o,i,s,a){const l=new a({$ctrl:this,$scope:e,watch:!1});let d;this.$onInit=()=>{l.figurePaging()},e.$watch("$ctrl.page",((e,t)=>{d={};const n=p3xr.settings.keyPageCount*(this.page-1);let r=0;for(let e of Object.keys(this.p3xrValue))r>=n&&r<n+p3xr.settings.keyPageCount&&(d[e]=this.p3xrValue[e]),r++})),this.pageBasedList=()=>d,this.p3xrValueGenerated=[],e.$watch("$ctrl.p3xrValue",((e,t)=>{this.p3xrValueGenerated=[];for(let e of this.p3xrValue){const t=e[1],n=[];for(let e=0;e<t.length;e+=2)n.push([t[e],t[e+1]]);this.p3xrValueGenerated.push(n)}l.figurePaging()})),this.copy=async e=>{await n.g.p3xr.clipboard({value:e.value}),t.toast(p3xr.strings.status.dataCopied)},this.addStream=async e=>{try{await i.show({type:"append",$event:e.$event,model:{type:"stream",key:this.p3xrKey}}),s.$broadcast("p3xr-refresh-key")}catch(e){t.generalHandleError(e)}},this.deleteStreamTimestamp=async e=>{try{await t.confirm({event:e.$event,message:p3xr.strings.confirm.deleteStreamTimestamp}),await r.request({action:"key-stream-delete-timestamp",payload:{key:this.p3xrKey,streamTimestamp:e.streamTimestamp}}),s.$broadcast("p3xr-refresh-key")}catch(e){t.generalHandleError(e)}};const c=n(1655);this.showTimestamp=({timestamp:e})=>{const t=Number(e.slice(0,e.indexOf("-"))),n=new Date(t);return c(n).format("L LTS")}}]})},6588:(e,t,n)=>{p3xr.ng.factory("p3xrSocket",["$rootScope","p3xrCommon","$state","$cookies",function(e,t,r,o){const i={rejectUnauthorized:!1,path:"/socket.io",secure:!0};!0===n.g.p3xrDevMode&&(i.transports=["websocket"]);const s=io.connect(p3xr.api.host,i);let a,l=!1;s.on("connect",(async function(){l?console.log("p3xr-socket (socket) RE-connected",s.id):console.log("p3xr-socket (socket) connected",s.id),l=!0})),s.on("disconnect",(function(){location.reload()})),s.on("info-interval",(t=>{e.p3xr.state.donated=t.donated,t.donated!==a&&(n.g.p3xr.isBot()||window.gtag("config",p3xr.settings.googleAnalytics,{page_path:p3xr.state.donated?"/donated":"/free"}),a=t.donated,e.$digest())}));let d=!1;const c=async function(e){if(!d){d=!0;try{o.remove(p3xr.settings.connectInfo.cookieName),t.generalHandleError(e),r.go("socketio-error",{error:e}),await t.confirm({disableCancel:!1,message:p3xr.strings.confirm.socketioConnectError}),location.reload()}catch(e){t.generalHandleError(e)}}};s.on("error",c),s.on("connect_error",c),s.on("connections",(n=>{t.generalHandleError(n)?(p3xr.state.connections=n.connections,e.$digest()):p3xr.connectionsReset()})),s.on("redis-disconnected",(async n=>{if(void 0!==e.p3xr.state.connection&&e.p3xr.state.connection.id===n.connectionId){e.p3xr.monitor=!1,e.p3xr.state.connection=void 0,"error"===n.status?t.toast({message:p3xr.strings.status.redisDisconnected(n)}):"code"===n.status&&(p3xr.strings.code.hasOwnProperty(n.code)?t.toast({message:p3xr.strings.code[n.code]}):t.toast({message:`unknown redis disconnect code: ${n.code}`})),r.go("main");try{await m({action:"trigger-redis-disconnect",enableResponse:!1})}catch(e){t.generalHandleError(e)}}})),s.on("redis-status",(t=>{e.p3xr.state.redisConnections=t.redisConnections,setTimeout((()=>{e.$digest()}))}));let u=!1;s.on("configuration",(t=>{e.p3xr.state.cfg=t,!0===p3xr.state.cfg.snapshot?p3xr.state.version="SNAPSHOT":(p3xr.state.version="v"+p3xr.state.cfg.version,u||(u=!0,window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/version/"+p3xr.state.version}))),e.$digest()})),s.on("error",t.generalHandleError);const m=t=>{t.payload||(t.payload={}),"string"==typeof e.p3xr.state.search&&e.p3xr.state.search.length>0&&(e.p3xr.settings.searchStartsWith?t.payload.match=e.p3xr.state.search+"*":t.payload.match="*"+e.p3xr.state.search+"*"),t.payload.maxKeys=parseInt(p3xr.settings.maxKeys);let{enableResponse:n}=t;if(!1!==n&&(n=!0),n)return new Promise(((n,r)=>{t.requestId=p3xr.nextId();const o=`p3xr-response-${t.requestId}`;let i;const a=t=>{if(clearTimeout(i),s.off(o),"ok"===t.status)n(t);else{const e=new Error(t.error);r(e)}e.$digest()};i=setTimeout((()=>{s.off(o,a),r(new Error(p3xr.strings.label.socketIoTimeout({timeout:p3xr.settings.socket.timeout}))),e.$digest()}),p3xr.settings.socket.timeout),s.on(o,a),s.emit("p3xr-request",t)}));s.emit("p3xr-request",t)};return{ioClient:s,request:m}}])},6596:(e,t,n)=>{var r=n(6522),o=n(2620);e.exports=function(e){return"symbol"==typeof e||o(e)&&"[object Symbol]"==r(e)}},6711:(e,t,n)=>{var r=n(9107).Symbol;e.exports=r},6735:(e,t,n)=>{p3xr.ng.factory("p3xrDialogTreecontrolSettings",["p3xrCommon","$mdDialog","$timeout",function(e,t,r){return new function(){this.show=async r=>{try{await t.show({controller:["$scope","$rootScope",function(n,r){n.model={treeSeparator:r.p3xr.settings.redisTreeDivider,pageCount:r.p3xr.settings.pageCount,keyPageCount:r.p3xr.settings.keyPageCount,keysSort:r.p3xr.settings.keysSort,searchClientSide:r.p3xr.settings.searchClientSide,searchStartsWith:r.p3xr.settings.searchStartsWith,maxValueDisplay:r.p3xr.settings.maxValueDisplay,maxKeys:r.p3xr.settings.maxKeys,jsonFormat:2===r.p3xr.settings.jsonFormat,animation:r.p3xr.settings.animation},n.cancel=function(){t.cancel()};n.submit=async()=>{if(!n.p3xrDialogTreecontrolSettingsForm.$invalid||(e.toast({message:p3xr.strings.form.error.invalid}),0))try{r.p3xr.settings.redisTreeDivider=n.model.treeSeparator,r.p3xr.settings.pageCount=n.model.pageCount,r.p3xr.settings.keyPageCount=n.model.keyPageCount,r.p3xr.settings.keysSort=n.model.keysSort,r.p3xr.settings.searchClientSide=n.model.searchClientSide,r.p3xr.settings.searchStartsWith=n.model.searchStartsWith,r.p3xr.state.page=1,r.p3xr.state.redisChanged=!0,r.p3xr.settings.maxValueDisplay=n.model.maxValueDisplay,r.p3xr.settings.maxKeys=n.model.maxKeys,r.p3xr.settings.jsonFormat=!0===n.model.jsonFormat?2:4,r.p3xr.settings.animation=!0===n.model.animation?1:0,t.cancel(),r.$broadcast("p3xr-refresh")}catch(t){e.generalHandleError(t)}}}],template:n(8434),parent:angular.element(document.body),targetEvent:r.$event,clickOutsideToClose:!0,fullscreen:!0})}catch(t){e.generalHandleError(t)}}}}])},6765:e=>{"use strict";const t=["B","kB","MB","GB","TB","PB","EB","ZB","YB"],n=["B","kiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],r=["b","kbit","Mbit","Gbit","Tbit","Pbit","Ebit","Zbit","Ybit"],o=["b","kibit","Mibit","Gibit","Tibit","Pibit","Eibit","Zibit","Yibit"],i=(e,t,n)=>{let r=e;return"string"==typeof t||Array.isArray(t)?r=e.toLocaleString(t,n):!0!==t&&void 0===n||(r=e.toLocaleString(void 0,n)),r};e.exports=(e,s)=>{if(!Number.isFinite(e))throw new TypeError(`Expected a finite number, got ${typeof e}: ${e}`);const a=(s=Object.assign({bits:!1,binary:!1},s)).bits?s.binary?o:r:s.binary?n:t;if(s.signed&&0===e)return` 0 ${a[0]}`;const l=e<0,d=l?"-":s.signed?"+":"";let c;if(l&&(e=-e),void 0!==s.minimumFractionDigits&&(c={minimumFractionDigits:s.minimumFractionDigits}),void 0!==s.maximumFractionDigits&&(c=Object.assign({maximumFractionDigits:s.maximumFractionDigits},c)),e<1){return d+i(e,s.locale,c)+" "+a[0]}const u=Math.min(Math.floor(s.binary?Math.log(e)/Math.log(1024):Math.log10(e)/3),a.length-1);e/=Math.pow(s.binary?1024:1e3,u),c||(e=e.toPrecision(3));return d+i(Number(e),s.locale,c)+" "+a[u]}},6794:(e,t,n)=>{var r=n(6165),o=n(6132),i=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return o(e);var t=[];for(var n in Object(e))i.call(e,n)&&"constructor"!=n&&t.push(n);return t}},6806:(e,t,n)=>{var r=n(3928),o=n(119),i=Object.prototype.propertyIsEnumerable,s=Object.getOwnPropertySymbols,a=s?function(e){return null==e?[]:(e=Object(e),r(s(e),(function(t){return i.call(e,t)})))}:o;e.exports=a},6827:(e,t,n)=>{var r=n(6929);e.exports=function(e){return r(this,e).get(e)}},6850:(e,t,n)=>{const r=n(5603),o=n(8630);function i(e){if(e instanceof ArrayBuffer){const t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(new Uint8Array(e)),t}return Array.isArray(e)?e.map((e=>i(e))):r(e)&&!Array.isArray(e)&&null!==e&&"string"!=typeof e?o(e,((e,t,n)=>{"$$hashKey"!==n&&(e[n]=r(t)?i(t):t)})):e}p3xr.clone=e=>i(e)},6890:(e,t,n)=>{var r=n(6060);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},6914:(e,t,n)=>{p3xr.ng.component("p3xrMain",{template:n(2971),controller:["$cookies","p3xrSocket","p3xrCommon","p3xrRedisParser","$rootScope","$state","$timeout","$scope","$mdMedia","$mdSidenav",function(e,t,r,o,i,s,a,l,d,c){let u,m,p,h,g,f;l.$watch("$root.p3xr.state.connection",((e,t)=>{e||s.go("settings")}));let x,y=!1,b=!1;Object.defineProperty(l,"resizerColor",{get:()=>b||y?"accent-400":"accent",set:e=>{}});const v=p3xr.settings.resizeMinWidth,T=n(4503);let S,k=!1;l.$watch((function(){return d("xs")}),(function(e){e||!0!==k||(void 0!==S&&a.cancel(S),S=a(M,4*p3xr.settings.debounce)),k=e}));const w=(e={})=>{let t,n=0;t=[m,p,h];for(let e of t)n+=e.outerHeight();const r=$window.outerHeight(),o=Math.max(r-n-11,100);u.height(o),u.css("max-height",`${o}px`);const i=p3xr.dom.getPosition(u[0]),s=$("#p3xr-main-treecontrol-container");if(s){const e=$("#p3xr-main-treecontrol-controls-container"),t=p3xr.dom.getPosition(e[0]);s.css("top",i.top+t.height+"px"),s.css("left",i.left+"px"),s.css("height",i.height-t.height+"px"),s.css("max-height",i.height+"px"),void 0!==x?s.css("width",x-i.left+"px"):s.css("width",v+"px"),s.css("min-width",v+"px");const n=p3xr.dom.getPosition(s[0]);void 0===f&&_();const r=5;void 0!==f&&(f=document.getElementById("p3xr-main-content-sizer"),null!==f&&(f.addEventListener("mouseover",P),f.addEventListener("mouseout",C),f.style.top=i.top+"px",f.style.height=i.height+"px",f.style.left=i.left+n.width+"px",f.style.width=r+"px"));const o=$("#p3xr-main-content-container");o.css("top",i.top+"px"),o.css("height",i.height+"px"),o.css("left",i.left+n.width+r+"px"),o.css("width",i.width-n.width-r+"px"),e.width(n.width)}else G()},M=T((()=>{x=void 0,w()}),p3xr.settings.debounce),P=()=>{y=!0,l.$digest()},C=()=>{y=!1,l.$digest()},A=e=>{"mousedown"===e.type&&"p3xr-main-content-sizer"!==e.target.id||("mousedown"===e.type?(b=!0,document.documentElement.style.cursor="ew-resize",$body.addClass("p3xr-not-selectable")):"mouseup"===e.type&&(document.documentElement.style.cursor="auto",b=!1,$body.removeClass("p3xr-not-selectable")),!1===b&&w({}),e.stopPropagation(),l.$digest())},D=e=>{if(b){const t=p3xr.dom.getPosition(u[0]);e.clientX<t.left+v||e.clientX>window.innerWidth-v?document.documentElement.style.cursor="not-allowed":(document.documentElement.style.cursor="ew-resize",f.style.left=e.clientX+"px",x=e.clientX,w())}},_=()=>{f=document.getElementById("p3xr-main-content-sizer"),null!==f?(f.addEventListener("mouseover",P),f.addEventListener("mouseout",C),document.addEventListener("mousemove",D),document.addEventListener("mousedown",A),document.addEventListener("mouseup",A)):f=void 0};l.$on("p3xr-main-resizer",((e,t)=>{console.info("p3xr-main-resizer dragging:",t.drag),!0===t.drag?(document.addEventListener("mousemove",D),document.addEventListener("mousedown",A),document.addEventListener("mouseup",A)):(document.removeEventListener("mousemove",D),document.removeEventListener("mousedown",A),document.removeEventListener("mouseup",A))}));const G=()=>{null!=f&&(f.removeEventListener("mouseover",P),f.removeEventListener("mouseout",C),f=void 0),document.removeEventListener("mousedown",A),document.removeEventListener("mouseup",A),document.removeEventListener("mousemove",D)};this.resize=T(w,p3xr.settings.debounce),this.resizeRaw=w,this.$onInit=()=>{n(403).recursive({nodes:i.keysTreeRendered}),u=$("#p3xr-main-content"),m=$("#p3xr-layout-header-container"),p=$("#p3xr-layout-footer-container"),h=$("#p3xr-main-header"),g=u[0],w(),$window.on("resize",w),"/main"===s.current.url&&s.go("main.statistics"),p3xr.state.redisChanged&&(p3xr.state.redisChanged=!1,p3xr.state.connection&&this.refresh()),setTimeout((()=>{w()}),250)},this.$onDestroy=function(){$window.off("resize",w),G()},i.p3xr.state.page=1;let E,B,H=0;Object.defineProperty(this,"currentDatabase",{get:()=>{let t=p3xr.state.currentDatabase;return void 0===t&&(t=e.get(p3xr.settings.connection.getCookieNameCurrentDatabase(p3xr.state.connection.id))),void 0===t&&(t=0),t},set:async n=>{if(E=n,H!==E){H=n;try{await t.request({action:"console",payload:{command:`select ${H}`}})}catch(e){r.generalHandleError(e)}}e.put(p3xr.settings.connection.getCookieNameCurrentDatabase(p3xr.state.connection.id),String(n),{expires:p3xr.settings.cookieExpiry})}}),this.selectDatabase=async e=>{this.currentDatabase=e;try{i.p3xr.state.page=1;await t.request({action:"console",payload:{command:`select ${e}`}});r.toast({message:p3xr.strings.status.dbChanged({db:e})}),await this.statistics()}catch(e){r.generalHandleError(e)}},this.save=async()=>{try{const e=await t.request({action:"save"});i.p3xr.state.info=o.info(e.info),i.$digest(),r.toast({message:p3xr.strings.status.savedRedis})}catch(e){r.generalHandleError(e)}},this.statistics=async()=>{try{s.go("main.statistics"),await this.refresh()}catch(e){r.generalHandleError(e)}},this.refresh=async(e={})=>{console.time("refresh");let{withoutParent:n}=e;void 0===n&&(n=!1);let o=p3xr.clone(i.expandedNodes);try{const e={};!i.p3xr.settings.searchClientSide&&"string"==typeof i.p3xr.state.search&&i.p3xr.state.search.length>0&&(i.p3xr.settings.searchStartsWith?e.match=i.p3xr.state.search+"*":e.match="*"+i.p3xr.state.search+"*");const s=await t.request({action:"refresh",payload:e});p3xr.state.dbsize=s.dbsize,i.p3xr.state.redisChanged=!0,i.savedExpandedNodes=o,r.loadRedisInfoResponse({response:s}),n||i.$broadcast("p3xr-refresh-key")}catch(e){r.generalHandleError(e)}console.timeEnd("refresh"),setTimeout((()=>{console.log("refresh"),i.$digest()}))},l.$on("p3xr-refresh",(()=>{this.refresh({withoutParent:!0})}));let I=new ResizeObserver((e=>{b||window.requestAnimationFrame((()=>{Array.isArray(e)&&e.length&&w()}))}));l.$watch((()=>(d("xs")?"true":"false")+"-"+(p3xr.state.connection?"true":"false")),(async(e,t)=>{if(B&&I.unobserve(B),void 0===p3xr.state.connection)return void console.log("no connection for resizing");if(d("xs"))return void w();let n=null;for(;null===n;)n=document.getElementById("p3xr-main-treecontrol-controls-container"),console.info("waiting for observing tree control controls"),await new Promise((e=>setTimeout((()=>{e()}))));console.info("found observing tree control controls"),B=n,I.observe(B)})),l.$on("$destroy",(()=>{I.disconnect()})),this.addKey=e=>{const{event:t,node:n}=e;t.stopPropagation(),i.$broadcast("p3xr-key-new",{event:t,node:n})};const O=$(document);this.sidenavWidth=Math.min(O.width()-100,600),this.quickConsole=()=>{c("quickConsoleSidenav").open()},this.startResizingFlag=!1,l.$on("p3xr-quick-console",((e,t)=>{this.startResizingFlag=t.start})),l.$on("p3xr-quick-console-quit",(()=>{c("quickConsoleSidenav").close()})),this.startResizing=e=>{if(!this.startResizingFlag)return;const t=e.clientX,n=this.sidenavWidth,r=e=>{const r=e.clientX-t;document.body.style.cursor="ew-resize";const o=Math.min(n-r,window.innerWidth-250);this.sidenavWidth=o,l.$apply()},o=()=>{document.body.style.cursor="default",O.off("mousemove",r),O.off("mouseup",o)};O.on("mousemove",r),O.on("mouseup",o)},void 0===p3xr.state.connection&&s.go("settings")}]})},6929:(e,t,n)=>{var r=n(9732);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},6974:e=>{e.exports='<md-toolbar class="md-accent" md-theme="{{ $root.p3xr.state.themeLayout}}"> <div class="md-toolbar-tools"> <h2 flex md-truncate>{{ $root.p3xr.strings.title.socketioConnectError }}</h2> </div> </md-toolbar> <md-content md-theme="{{ $root.p3xr.state.theme}}" layout-padding> <p3xr-button ng-click="$root.locationReload()" p3xr-label="$root.p3xr.strings.intention.reload" p3xr-fa-icon="fas fa-redo"></p3xr-button> <br/> <br/> {{ $ctrl.$stateParams.error.message }} <br/><br/> <div id="web-development" style="text-align:center"> <a href="https://corifeus.hu/hu" style="opacity:.5;text-decoration:none"> <span lang="hu">Webfejlesztés</span> </a><br/> <a href="https://corifeus.hu/en" style="opacity:.5;text-decoration:none"> <span lang="en">Web Development</span> </a><br/> <a href="https://corifeus.hu/de" style="opacity:.5;text-decoration:none"> <span lang="de">Webentwicklung</span> </a><br/> <a href="https://corifeus.hu/es" style="opacity:.5;text-decoration:none"> <span lang="es">Desarrollo Web</span> </a><br/> <a href="https://corifeus.hu/fr" style="opacity:.5;text-decoration:none"> <span lang="fr">Développement Web</span> </a><br/> <a href="https://corifeus.hu/ja" style="opacity:.5;text-decoration:none"> <span lang="jp">ウェブ開発</span> </a><br/> <a href="https://corifeus.hu/it" style="opacity:.5;text-decoration:none"> <span lang="it">Sviluppo Web</span> </a><br/> <a href="https://corifeus.hu/ru" style="opacity:.5;text-decoration:none"> <span lang="ru">Веб-разработка</span> </a><br/> <a href="https://corifeus.hu/zn" style="opacity:.5;text-decoration:none"> <span lang="zh">网页开发</span> </a> </div> </md-content>'},6988:()=>{p3xr.ng.factory("p3xrCommon",["$mdToast","$mdDialog","$mdColors","$rootScope","p3xrRedisParser","$timeout","p3xrTheme",function(e,t,n,r,o,i,s){const a=e=>{let n,r,o;return e.hasOwnProperty("disableCancel")?(n=t.alert(),r=p3xr.strings.confirm.info,o=p3xr.strings.intention.ok):(n=t.confirm(),r=p3xr.strings.confirm.title,o=p3xr.strings.intention.sure),n.title(r).htmlContent(e.message).targetEvent(e.event).ok(o).multiple(!0),e.hasOwnProperty("disableCancel")||n.cancel(p3xr.strings.intention.cancel),t.show(n)};let l;const d={inputBackground:()=>s.isDark()?"rgba(64, 64, 64, 1)":"white",inputBorderColor:()=>n.getThemeColor(p3xr.state.themeLayout+"-primary-hue-1"),inputColor:()=>s.isDark()?"white":"black",generalHandleError:e=>{if(void 0!==e){if(e instanceof Error||e instanceof Object||(e=new Error(e)),e instanceof Error||"error"===e.status){let t;return t=e instanceof Error?e:e.error,console.warn("generalHandleError"),console.error(t),"string"==typeof t&&p3xr.strings.code.hasOwnProperty(t)?t=new Error(p3xr.strings.code[t]):t.hasOwnProperty("code")&&p3xr.strings.code.hasOwnProperty(t.code)?t.message=p3xr.strings.code[t.code]:p3xr.strings.code.hasOwnProperty(t.message)&&(t.message=p3xr.strings.code[t.message]),p3xr.settings.handleConnectionIsClosed(t,r),d.alert({title:p3xr.strings.title.error,message:"<pre>"+(t.hasOwnProperty("message")?t.message:t)+"</pre>"}),!1}return!0}},toast:t=>{"string"==typeof t&&(t={message:t});const n='<md-toast class="md-toast p3xr-toast-default" ng-click="closeToast()">'+t.message+"</md-toast>";e.show({controller:"p3xrToastController",template:n,hideDelay:t.hideDelay||p3xr.settings.toast.timeout,position:p3xr.settings.toast.position})},alert:e=>("string"==typeof e&&(e={message:e}),e.disableCancel=!0,a(e)),confirm:a,loadRedisInfoResponse:(e={})=>{let t;t=e.response?e.response:l,l=t,console.time("loadRedisInfoResponse"),r.p3xr.state.info=o.info(t.info),r.p3xr.state.keysRaw=t.keys,r.p3xr.settings.keysSort&&r.p3xr.state.keysRaw.length<=p3xr.settings.maxLightKeysCount?r.p3xr.state.keysRaw=t.keys.sort(p3xr.sort.naturalCompareDocument()):r.p3xr.state.keysRaw=t.keys,r.p3xr.state.keysInfo=t.keysInfo,console.timeEnd("loadRedisInfoResponse")}};return d}]).controller("p3xrToastController",["$scope","$mdToast",function(e,t){e.closeToast=function(){t.hide()}}])},7030:(e,t,n)=>{var r=n(5603);e.exports=function(e){return e==e&&!r(e)}},7060:(e,t,n)=>{var r=n(8354);e.exports=function(e){return null==e?"":r(e)}},7093:(e,t,n)=>{var r=n(1171),o=n(4589),i=n(5456),s=n(8059);e.exports=function(e){return i(e)?r(s(e)):o(e)}},7137:(e,t,n)=>{var r=n(5410),o=n(2382),i=n(2003),s=n(1262),a=n(2615),l=n(9221),d=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=i(e),c=!n&&o(e),u=!n&&!c&&s(e),m=!n&&!c&&!u&&l(e),p=n||c||u||m,h=p?r(e.length,String):[],g=h.length;for(var f in e)!t&&!d.call(e,f)||p&&("length"==f||u&&("offset"==f||"parent"==f)||m&&("buffer"==f||"byteLength"==f||"byteOffset"==f)||a(f,g))||h.push(f);return h}},7164:e=>{e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},7215:(e,t,n)=>{var r=n(6060),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return o.call(t,e)?t[e]:void 0}},7230:(e,t,n)=>{var r=n(3984)(n(9107),"DataView");e.exports=r},7261:(e,t,n)=>{n.g.p3xr.clipboard=async e=>{try{return await navigator.clipboard.writeText(e.value),!0}catch(e){return console.error("Failed to copy:",e),!1}}},7290:(e,t,n)=>{var r=n(1709)("toUpperCase");e.exports=r},7317:(e,t,n)=>{p3xr.ng.factory("p3xrDialogAskAuthorization",["p3xrCommon","$mdDialog",function(e,t){return new function(){this.show=async e=>await t.show({controller:["$scope","$mdDialog",function(e,t){e.cancel=function(){t.cancel()},e.model={username:void 0,password:void 0},e.submit=async()=>{t.hide(e.model)}}],template:n(1066),parent:angular.element(document.body),targetEvent:e.$event,clickOutsideToClose:!0,multiple:!0})}}])},7403:(e,t,n)=>{p3xr.ng.component("p3xrMainKeySet",{template:n(552),bindings:{p3xrValue:"=",p3xrValueBuffer:" =",p3xrKey:"<",p3xrResponse:"<"},controller:["p3xrCommon","p3xrSocket","p3xrDialogJsonView","p3xrDialogKeyNewOrSet","$rootScope","$scope","p3xrKeyPaging",function(e,t,r,o,i,s,a){const l=new a({$ctrl:this,$scope:s});this.$onInit=()=>{l.figurePaging()};const d=(e,t)=>{const n=[],r=p3xr.settings.keyPageCount*(this.page-1);let o=0;for(let e in this.p3xrValue)o>=r&&o<r+p3xr.settings.keyPageCount&&n.push(this.p3xrValue[e]),o++;return n};s.$watch("$ctrl.page",((e,t)=>d())),this.pageBasedList=(e,t)=>d(),this.downloadBuffer=async({$index:t,$event:n})=>{try{const e=new Blob([this.p3xrValueBuffer[t]]),n=window.URL.createObjectURL(e),r=document.createElement("a");r.href=n,r.download=`${this.p3xrKey}-${t}.bin`,document.body.appendChild(r),r.click(),window.URL.revokeObjectURL(n),document.body.removeChild(r)}catch(t){e.generalHandleError(t)}},this.copy=async t=>{await n.g.p3xr.clipboard({value:t.value}),e.toast(p3xr.strings.status.dataCopied)},this.addSet=async t=>{try{await o.show({type:"append",$event:t.$event,model:{type:"set",key:this.p3xrKey}}),i.$broadcast("p3xr-refresh-key")}catch(t){e.generalHandleError(t)}},this.deleteSetMember=async n=>{try{await e.confirm({event:n.$event,message:p3xr.strings.confirm.deleteSetMember}),await t.request({action:"key-set-delete-member",payload:{key:this.p3xrKey,value:this.p3xrValueBuffer[n.$index]}}),i.$broadcast("p3xr-refresh-key")}catch(t){e.generalHandleError(t)}},this.editValue=async t=>{try{const{value:e}=t;await o.show({type:"edit",$event:t.$event,model:{type:"set",value:e.length<p3xr.settings.maxValueAsBuffer?e:this.p3xrValueBuffer[t.$index],key:this.p3xrKey}}),i.$broadcast("p3xr-refresh-key")}catch(t){e.generalHandleError(t)}},this.showJson=e=>{const{value:t}=e;r.show({value:t})}}]})},7426:(e,t,n)=>{const r=new Date;r.setFullYear(r.getFullYear()+5);const o=n(6765);p3xr.settings={prettyBytes:e=>o(e,{locale:p3xr.settings.language.current}),getJSONEditorLanguage:()=>{let e;switch(p3xr.settings.language.current){case"ru":e="ru";break;case"zn":e="zh-CN";break;default:e="en"}return e},getHumanizeDurationLanguage:()=>{let e;switch(p3xr.settings.language.current){case"zn":e="zh_CN";break;case"ru":e="ru";break;default:e="en"}return e},handleConnectionIsClosed:(e,t)=>"Connection is closed."===e?.message&&(t.$broadcast("p3xr-disconnect"),!0),maxLightKeysCount:11e4,resizeMinWidth:350,socket:{timeout:3e5},toast:{timeout:5e3,position:"bottom right"},debounce:100,debounceSearch:2e3,cookieExpiry:r,connection:{cookieNameCurrentDatabase:"p3xr-main-current-database",getCookieNameCurrentDatabase:e=>p3xr.settings.connection.cookieNameCurrentDatabase+"-"+e},tree:{cookieName:"p3xr-main-treecontrol-divider",defaultDivider:":"},redisTreeDivider:":",animation:0,animationSettings:{default:0,cookieName:"p3xr-animation-settings"},jsonFormat:4,googleAnalytics:"G-8M2CK7993T",jsonFormatSettings:{default:4,cookieName:"p3xr-json-format"},paging:{default:250,cookieName:"p3xr-main-treecontrol-page-size"},keyPage:{default:5,cookieName:"p3xr-main-key-page-size"},keyPageCount:5,language:{momentDateMap:{en:"en",zn:"zh-cn",ru:"ru"},defaultLanguage:"en",current:void 0,cookieName:"p3xr-language",translation:{}},pageCount:50,maxValueDisplay:1024,maxValueAsBuffer:256e3,maxValueDisplaySetting:{default:1024,cookieName:"p3xr-main-treecontrol-max-value-display"},maxKeys:1e3,maxKeysSettings:{default:1e3,max:1e5,cookieName:"p3xr-max-keys"},keySortInfo:{default:!0,cookieName:"p3xr-main-treecontrol-key-sort"},keysSort:!0,searchClientSide:!1,searchInfoClientSide:{default:!1,cookieName:"p3xr-main-treecontrol-search-client-mode"},searchStartsWith:!1,searchInfoStartsWith:{default:!1,cookieName:"p3xr-main-treecontrol-search-starts-with"},connectInfo:{cookieName:"p3xr-layout-connect"}}},7543:()=>{p3xr.sort={naturalCompareDocument:()=>(e,t)=>{const n=/(\d+)|(\D+)/g,r=[],o=[];for(e.replace(n,(function(e,t,n){r.push([t||1/0,n||""])})),t.replace(n,(function(e,t,n){o.push([t||1/0,n||""])}));r.length&&o.length;){const e=r.shift(),t=o.shift(),n=parseFloat(e[0])-parseFloat(t[0])||e[1].localeCompare(t[1]);if(n)return n}return r.length-o.length}}},7585:e=>{e.exports=function(e,t){return e.has(t)}},7605:(e,t,n)=>{p3xr.ng.factory("p3xrDialogKeyNewOrSet",["p3xrCommon","$mdDialog","p3xrSocket","p3xrDialogJsonEditor","p3xrDialogJsonView",function(e,t,r,o,i){return new function(){this.show=s=>new Promise((async(a,l)=>{try{await t.show({controller:["$scope","$mdDialog",function(t,d){t.bufferDisplay=e=>"("+p3xr.settings.prettyBytes(e.byteLength)+")",t.setBufferUpload=()=>{const e=document.getElementById("p3xr-main-key-new-upload-buffer");e.value="",e.click()},t.readFileAsBuffer=async n=>{const r=n.target.files[0];if(!r)return;const o=new FileReader;o.onload=async n=>{try{await e.confirm({message:p3xr.strings.confirm.uploadBuffer});const r=n.target.result;t.model.value=r,e.toast(p3xr.strings.confirm.uploadBufferDone)}catch(t){e.generalHandleError(t)}},o.onerror=t=>{e.generalHandleError(t)},o.readAsArrayBuffer(r)},t.jsonViewer=e=>{i.show({event:e.$event,value:e.value})},t.copy=async t=>{await n.g.p3xr.clipboard({value:t.value}),e.toast(p3xr.strings.status.dataCopied)},t.types=["string","list","hash","set","zset","stream"],t.validateJson=!1,t.model={type:"string",key:void 0!==s.node?s.node.key+p3xr.settings.redisTreeDivider:"",value:void 0,score:void 0,streamTimestamp:"*",hashKey:void 0,index:void 0},t.options=s,s.hasOwnProperty("model")&&Object.assign(t.model,s.model),Object.defineProperty(t,"valueType",{get:()=>typeof t.model.value}),t.cancel=function(){d.cancel(),l()};t.submit=async()=>{if(!t.p3xrKeyNewForm.$invalid||(e.toast({message:p3xr.strings.form.error.invalid}),0))try{p3xr.ui.overlay.show();const n=await r.request({action:"key-new-or-set",payload:{type:s.type,originalValue:s.hasOwnProperty("model")?s.model.value:void 0,originalHashKey:s.hasOwnProperty("model")?s.model.hashKey:void 0,model:p3xr.clone(t.model)}});window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/key-new-or-set"}),a(n),e.toast({message:p3xr.strings.status.set}),d.cancel()}catch(t){e.generalHandleError(t)}finally{p3xr.ui.overlay.hide()}},t.jsonEditor=async n=>{try{const e=await o.show({event:n.$event,value:n.value});t.model.value=e.obj,t.$digest()}catch(t){e.generalHandleError(t)}},t.formatJson=()=>{try{t.model.value=JSON.stringify(JSON.parse(t.model.value),null,p3xr.settings.jsonFormat)}catch(t){e.toast({message:p3xr.strings.label.jsonViewNotParsable})}}}],template:n(6520),parent:angular.element(document.body),targetEvent:s.$event,clickOutsideToClose:!1,fullscreen:!0,multiple:!0})}catch(t){l(t),e.generalHandleError(t)}}))}}])},7675:(e,t,n)=>{var r=n(5141),o=n(8476),i=n(1686),s=n(2003),a=n(7093);e.exports=function(e){return"function"==typeof e?e:null==e?i:"object"==typeof e?s(e)?o(e[0],e[1]):r(e):a(e)}},7811:(e,t,n)=>{var r=n(6060),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:o.call(t,e)}},8059:(e,t,n)=>{var r=n(6596);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}},8100:(e,t,n)=>{p3xr.ng.factory("p3xrDialogTtl",["p3xrCommon","$mdDialog",function(e,t){const r=n(1127);return new function(){this.show=async o=>{try{const i=await t.show({controller:["$scope","$mdDialog",function(t,i){t.cancel=function(){i.cancel()},t.model=o.model;const s=n(533);"number"==typeof t.model.ttl&&t.model.ttl>0?t.convertTextToTime=s(1e3*t.model.ttl,{delimiter:" ",language:p3xr.settings.getHumanizeDurationLanguage()}):t.convertTextToTime="",t.openTimestringNpm=()=>{location.href="https://www.npmjs.com/package/timestring#keywords"};let a=!0;t.$watch("convertTextToTime",((e,n)=>{if(a)a=!a;else try{t.model.ttl=r(String(e),"s")}catch(e){console.warn("timestring parse error",e)}}));t.submit=async()=>{if(!t.p3xrTtlForm.$invalid||(e.toast({message:p3xr.strings.form.error.invalid}),0))try{isNaN(t.model.ttl)&&(t.model.ttl=Math.round(t.model.ttl));const e={model:t.model};i.hide(e)}catch(t){e.generalHandleError(t)}}}],template:n(6291),parent:angular.element(document.body),targetEvent:o.$event,clickOutsideToClose:!0});return i}catch(t){e.generalHandleError(t)}}}}])},8119:e=>{e.exports=' <p3xr-accordion p3xr-title="$root.p3xr.strings.label.connections" p3xr-accordion-key="settings"> <p3xr-accordion-actions ng-if="!$root.p3xr.state.cfg.readonlyConnections"> <p3xr-button ng-click="$ctrl.connectionForm({ type: \'new\', $event: $event})" p3xr-label="$root.p3xr.strings.intention.connectionAdd" p3xr-md-icon="add_box"></p3xr-button> </p3xr-accordion-actions> <p3xr-accordion-content> <div ng-if="$root.p3xr.state.connections.list.length == 0" layout-padding> {{ $root.p3xr.strings.intention.noConnectionsInSettings }} </div> <md-list ng-if="$root.p3xr.state.connections.list.length > 0"> <md-list-item class="md-2-line" ng-repeat="connection in $root.p3xr.state.connections.list"> <div class="md-list-item-text"> <h3>{{connection.name}}</h3> <p>{{connection.host}}:{{connection.port}}</p> <p> <span ng-repeat="(connectionKey, connectionValue) in $root.p3xr.state.redisConnections" ng-if="connectionValue.connection.name === connection.name"> {{ $root.p3xr.strings.page.overview.connectedCount({ length: connectionValue.clients.length }) }} </span> &nbsp; </p> </div> <md-button class="md-accent md-raised" ng-if="$root.p3xr.state.connection.id !== connection.id" ng-click="$ctrl.connect({ connection })"> <md-icon>power</md-icon> <span hide-xs>{{ $root.p3xr.strings.intention.connect }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\')">{{ $root.p3xr.strings.intention.connect }}</md-tooltip> </md-button> <md-button ng-if="$root.p3xr.state.connection.id === connection.id" class="md-accent md-raised" ng-click="$ctrl.disconnect()"> <i class="fa fa-power-off"></i> <span hide-xs>{{ $root.p3xr.strings.intention.disconnect }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\')" md-direction="top">{{ $root.p3xr.strings.intention.disconnect }} </md-tooltip> </md-button> <md-button class="md-warn md-raised" ng-click="$ctrl.deleteConnection({ model: connection, ev: $event})" ng-if="!$root.p3xr.state.cfg.readonlyConnections"> <md-icon>delete_forever</md-icon> <span hide-xs>{{ $root.p3xr.strings.intention.delete }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\')">{{ $root.p3xr.strings.intention.delete }}</md-tooltip> </md-button> <md-button class="md-primary md-raised" ng-click="$ctrl.connectionForm({ type: \'edit\', model: connection, $event: $event})" ng-if="!$root.p3xr.state.cfg.readonlyConnections"> <md-icon>edit</md-icon> <span hide-xs>{{ $root.p3xr.strings.intention.edit }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\')">{{ $root.p3xr.strings.intention.edit }}</md-tooltip> </md-button> <md-button class="md-primary md-raised" ng-click="$ctrl.connectionForm({ type: \'edit\', model: connection})" ng-if="$root.p3xr.state.cfg.readonlyConnections"> <md-icon>mode_comment</md-icon> <span hide-xs>{{ $root.p3xr.strings.intention.view }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\')">{{ $root.p3xr.strings.intention.view }}</md-tooltip> </md-button> <md-divider ng-if="!$last"></md-divider> </md-list-item> </md-list> </p3xr-accordion-content> </p3xr-accordion> <br/> <p3xr-accordion p3xr-title="$root.p3xr.strings.form.treeSettings.label.formName" p3xr-accordion-key="tree-settings"> <p3xr-accordion-actions> <p3xr-button ng-click="$ctrl.openTreeSettingDialog({ $event: $event})" p3xr-label="$root.p3xr.strings.intention.edit" p3xr-md-icon="edit"></p3xr-button> </p3xr-accordion-actions> <p3xr-accordion-content> <md-list> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.field.treeSeparator}} </div> <div> <span ng-if="$root.p3xr.settings.redisTreeDivider.length > 0"> {{ $root.p3xr.settings.redisTreeDivider}} </span> <span ng-if="$root.p3xr.settings.redisTreeDivider.length < 1 || $root.p3xr.settings.redisTreeDivider === undefined || $root.p3xr.settings.redisTreeDivider === \'\'"> {{ $root.p3xr.strings.label.treeSeparatorEmptyNote}} </span> </div> </div> </md-list-item> <md-divider></md-divider> <md-list-item class="md-2-line" ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div class="md-list-item-text"> <h3> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.field.page}} </div> <div> {{ $root.p3xr.settings.pageCount}} </div> </div> </h3> <p> {{ $root.p3xr.strings.form.treeSettings.error.page }} </p> </div> </md-list-item> <md-divider></md-divider> <md-list-item class="md-2-line" ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div class="md-list-item-text"> <h3> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.field.keyPageCount}} </div> <div> {{ $root.p3xr.settings.keyPageCount}} </div> </div> </h3> <p> {{ $root.p3xr.strings.form.treeSettings.error.keyPageCount }} </p> </div> </md-list-item> <md-divider></md-divider> <md-list-item class="md-2-line" ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div class="md-list-item-text"> <h3> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.maxValueDisplay}} </div> <div> {{ $root.p3xr.settings.maxValueDisplay}} </div> </div> </h3> <p> {{ $root.p3xr.strings.form.treeSettings.maxValueDisplayInfo }} </p> </div> </md-list-item> <md-divider></md-divider> <md-list-item class="md-2-line" ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div class="md-list-item-text"> <h3> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.maxKeys}} </div> <div> {{ $root.p3xr.settings.maxKeys}} </div> </div> </h3> <p> {{ $root.p3xr.strings.form.treeSettings.maxKeysInfo }} </p> </div> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.field.keysSort}} </div> <div> {{ $root.p3xr.settings.keysSort ? $root.p3xr.strings.label.keysSort.on : $root.p3xr.strings.label.keysSort.off }} </div> </div> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.field.searchMode}} </div> <div> {{ $root.p3xr.settings.searchClientSide ? $root.p3xr.strings.form.treeSettings.label.searchModeClient : $root.p3xr.strings.form.treeSettings.label.searchModeServer }} </div> </div> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.field.searchModeStartsWith}} </div> <div> {{ $root.p3xr.settings.searchStartsWith ? $root.p3xr.strings.form.treeSettings.label.searchModeStartsWith : $root.p3xr.strings.form.treeSettings.label.searchModeIncludes }} </div> </div> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.settings.jsonFormat == 2 ? $root.p3xr.strings.form.treeSettings.label.jsonFormatTwoSpace : $root.p3xr.strings.form.treeSettings.label.jsonFormatFourSpace }} </div> </div> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.settings.animation ? $root.p3xr.strings.form.treeSettings.label.animation : $root.p3xr.strings.form.treeSettings.label.noAnimation }} </div> </div> </md-list-item> </md-list> </p3xr-accordion-content> </p3xr-accordion> <div class="p3xr-settings-bottom"></div> '},8148:(e,t,n)=>{var r=n(6522),o=n(5603);e.exports=function(e){if(!o(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},8206:(e,t,n)=>{var r=n(3435),o=n(5217),i=n(5661);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}},8314:(e,t,n)=>{var r=n(7060),o=n(7290);e.exports=function(e){return o(r(e).toLowerCase())}},8315:(e,t,n)=>{e=n.nmd(e);var r=n(337),o=t&&!t.nodeType&&t,i=o&&e&&!e.nodeType&&e,s=i&&i.exports===o&&r.process,a=function(){try{var e=i&&i.require&&i.require("util").types;return e||s&&s.binding&&s.binding("util")}catch(e){}}();e.exports=a},8319:(e,t,n)=>{const r=new RegExp("spider|bot|yahoo|bing|google|yandex|lynx|curl|embedly|quora|outbrain|pinterest|vkShare|W3C_Validator|crawl|borg|slurp|archiver|netresearch|lycos|scooter|altavista|teoma|oegp|charlotte|http client|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|semanticdiscovery|snappy|speedy|voila|vortex|voyager|zao|zeal|dataparksearch|findlinks|browsermob|httpmonitor|bingpreview|pagepeeker|webthumb|url2png|zooshot|gomeza|google sketchup|read later|pingdom|facebook|rackspace|scan|link|ezine|preview|dig|tarantula|urllib|jakarta|wget|rget|monitor|libwww|moozilla|seer|spice|snoopy|feedfetcher|wordpress|java|netfront|archive|xenu|feed|appmanager|covario|perl|host|lwp|page speed|ptst|digext|nutch|sleuth|yottaamonitor|bubing|corifeus","i");n.g.p3xr.isBot=()=>r.test(navigator.userAgent)},8326:(e,t,n)=>{p3xr.ng.factory("p3xrDialogConnection",["p3xrCommon","$mdDialog","p3xrSocket","p3xrDialogAskAuthorization",function(e,t,r,o){return new function(){this.show=async i=>{try{await t.show({controller:["$scope","$mdDialog",function(t,n){t.options=i,void 0!==i.model?(t.model=p3xr.clone(i.model),t.model.password=i.model.id,t.model.tlsCrt=i.model.id,t.model.tlsKey=i.model.id,t.model.tlsCa=i.model.id,t.model.sshPassword=i.model.id,t.model.sshPrivateKey=i.model.id):t.model={name:void 0,host:void 0,port:6379,askAuth:!1,password:void 0,username:void 0,id:void 0,readonly:void 0,tlsWithoutCert:!1,tlsRejectUnauthorized:!1,tlsCrt:void 0,tlsKey:void 0,tlsCa:void 0},t.model.hasOwnProperty("ssh")||(t.model={...t.model,ssh:!1,sshHost:void 0,sshPort:22,sshUsername:void 0,sshPassword:i.model?.id,sshPrivateKey:i.model?.id}),t.model.hasOwnProperty("cluster")||(t.model.cluster=!1),t.model.hasOwnProperty("sentinel")||(t.model.sentinel=!1),t.model.hasOwnProperty("nodes")||(t.model.nodes=[]);for(let e of t.model.nodes)e.password=e.id;t.$watch("model.ssh",(function(e,n){!0===e&&(t.model.sentinel=!1,t.model.cluster=!1)})),t.$watch("model.cluster",(function(e,n){!0===e&&(t.model.sentinel=!1,t.model.ssh=!1)})),t.$watch("model.sentinel",(function(e,n){!0===e&&(t.model.cluster=!1,t.model.ssh=!1)})),t.cancel=function(){n.cancel()};const s=()=>!t.p3xrConnectionForm.$invalid||(e.toast({message:p3xr.strings.form.error.invalid}),!1);t.addNode=e=>{const n={host:void 0,port:void 0,password:void 0,username:void 0,id:p3xr.nextId()};void 0===e?t.model.nodes.push(n):t.model.nodes.splice(e+1,0,n)},t.removeNode=async(n,r)=>{try{await e.confirm({event:n,message:p3xr.strings.confirm.deleteConnectionText}),t.model.nodes.splice(r,1),e.toast({message:p3xr.strings.status.nodeRemoved})}catch(t){if(void 0===t)return;e.generalHandleError(t)}},t.testConnection=async n=>{if(t.p3xrConnectionForm.$setSubmitted(),s())try{const i=p3xr.clone(t.model);if(!0===t.model.askAuth){const e=await o.show({$event:n});i.username=void 0,i.password=void 0,e.username&&(i.username=e.username),e.password&&(i.password=e.password)}p3xr.ui.overlay.show({message:p3xr.strings.title.connectingRedis});const s=await r.request({action:"redis-test-connection",payload:{model:i}});console.warn("response",s),e.toast({message:p3xr.strings.status.redisConnected})}catch(t){e.generalHandleError(t)}finally{p3xr.ui.overlay.hide()}},t.submit=async()=>{if(s()){void 0===t.model.host&&(t.model.host="localhost"),void 0===t.model.port&&(t.model.port=6379),"new"===i.type&&(t.model.id=p3xr.nextId());for(let e of t.model.nodes)void 0===e.host&&(e.host="localhost"),void 0===e.id&&(e.id=p3xr.nextId());try{const o=p3xr.clone(t.model);await r.request({action:"connection-save",payload:{model:o}});e.toast({message:"new"===t.options.type?p3xr.strings.status.added:p3xr.strings.status.saved}),n.cancel()}catch(t){e.generalHandleError(t)}}}}],template:n(559),parent:angular.element(document.body),targetEvent:i.$event,clickOutsideToClose:!0,fullscreen:!0})}catch(t){e.generalHandleError(t)}}}}])},8330:e=>{e.exports=function(e,t){return e===t||e!=e&&t!=t}},8354:(e,t,n)=>{var r=n(6711),o=n(14),i=n(2003),s=n(6596),a=r?r.prototype:void 0,l=a?a.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(i(t))return o(t,e)+"";if(s(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}},8418:(e,t,n)=>{var r=n(7030),o=n(5304);e.exports=function(e){for(var t=o(e),n=t.length;n--;){var i=t[n],s=e[i];t[n]=[i,s,r(s)]}return t}},8426:(e,t,n)=>{var r=n(6385),o=n(7060),i=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,s=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g");e.exports=function(e){return(e=o(e))&&e.replace(i,r).replace(s,"")}},8434:e=>{e.exports='<md-dialog class="fullscreen-dialog"> <form novalidate name="p3xrDialogTreecontrolSettingsForm" ng-submit="submit()"> <md-toolbar md-theme="{{ $root.p3xr.state.themeLayout }}" class="md-hue-3"> <div class="md-toolbar-tools"> <h2 flex md-truncate>{{$root.p3xr.strings.form.treeSettings.label.formName}}</h2> <md-button class="md-icon-button" ng-click="cancel()"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content md-theme="{{ $root.p3xr.state.theme }}"> <md-content> <div class="p3xr-padding"> <div ng-if="$root.p3xr.state.reducedFunctions"> <div> {{ $root.p3xr.strings.form.treeSettings.keyCount() }} </div> <br/> <div> {{ $root.p3xr.strings.label.tooManyKeys({ count: $root.p3xr.state.keysRaw.length, maxLightKeysCount: $root.p3xr.settings.maxLightKeysCount}) }} </div> <br/> </div> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.treeSettings.field.treeSeparator }}</label> <input name="treeSeparator" ng-model="model.treeSeparator"> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.treeSeparatorEmpty }} </div> <br/> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.treeSettings.field.page }}</label> <input type="number" required min="5" max="1000" name="pageCount" step="1" pattern="\\d*" ng-model="model.pageCount"> <div ng-messages="p3xrDialogTreecontrolSettingsForm.pageCount.$error"> <div ng-message-exp="[\'required\', \'min\', \'max\', \'pattern\']"> {{ $root.p3xr.strings.form.treeSettings.error.page }} </div> </div> </md-input-container> <br/> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.treeSettings.field.keyPageCount }}</label> <input type="number" required min="5" max="100" name="keyPageCount" step="1" pattern="\\d*" ng-model="model.keyPageCount"> <div ng-messages="p3xrDialogTreecontrolSettingsForm.keyPageCount.$error"> <div ng-message-exp="[\'required\', \'min\', \'max\', \'pattern\']"> {{ $root.p3xr.strings.form.treeSettings.error.keyPageCount }} </div> </div> </md-input-container> <br/> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.treeSettings.maxValueDisplay }}</label> <input type="number" required min="-1" max="32768" name="maxValueDisplay" step="1" pattern="-?\\d*" ng-model="model.maxValueDisplay"> <div ng-messages="p3xrDialogTreecontrolSettingsForm.maxValueDisplay.$error"> <div ng-message-exp="[\'required\', \'min\', \'max\', \'pattern\']"> {{ $root.p3xr.strings.form.treeSettings.error.maxValueDisplay }} </div> </div> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.form.treeSettings.maxValueDisplayInfo }} </div> <br/> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.treeSettings.maxKeys }}</label> <input type="number" required min="5" max="100000" name="maxKeys" step="1" pattern="-?\\d*" ng-model="model.maxKeys"> <div ng-messages="p3xrDialogTreecontrolSettingsForm.maxKeys.$error"> <div ng-message-exp="[\'required\', \'min\', \'max\', \'pattern\']"> {{ $root.p3xr.strings.form.treeSettings.error.maxKeys }} </div> </div> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.form.treeSettings.maxKeysInfo }} </div> <span ng-if="!$root.p3xr.state.reducedFunctions" style="margin:0;padding:0"> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <md-switch ng-model="model.keysSort" name="keysSort" aria-label="" class="p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> {{ model.keysSort ? $root.p3xr.strings.label.keysSort.on : $root.p3xr.strings.label.keysSort.off }} </md-switch> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.treeKeyStore }} </div> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <md-switch ng-model="model.searchClientSide" name="searchClientSide" aria-label="" ng-disabled="$root.p3xr.state.dbsize > $root.p3xr.settings.maxLightKeysCount" class="p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> {{ model.searchClientSide ? $root.p3xr.strings.form.treeSettings.label.searchModeClient : $root.p3xr.strings.form.treeSettings.label.searchModeServer }} </md-switch> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.page.treeControls.search.info }} <div ng-if="$root.p3xr.state.dbsize > $root.p3xr.settings.maxLightKeysCount "> <br/> {{ $root.p3xr.strings.page.treeControls.search.largeSetInfo }} </div> </div> </span> <br/> <md-input-container class="md-block p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> <md-switch ng-model="model.searchStartsWith" name="searchStartsWith" aria-label="" class="p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> {{ model.searchStartsWith ? $root.p3xr.strings.form.treeSettings.label.searchModeStartsWith : $root.p3xr.strings.form.treeSettings.label.searchModeIncludes }} </md-switch> </md-input-container> <md-input-container class="md-block p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> <md-switch ng-model="model.jsonFormat" name="jsonFormat" aria-label="" class="p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> {{ model.jsonFormat ? $root.p3xr.strings.form.treeSettings.label.jsonFormatTwoSpace : $root.p3xr.strings.form.treeSettings.label.jsonFormatFourSpace }} </md-switch> </md-input-container> <md-input-container class="md-block p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> <md-switch ng-model="model.animation" name="animation" aria-label="" class="p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> {{ model.animation ? $root.p3xr.strings.form.treeSettings.label.animation : $root.p3xr.strings.form.treeSettings.label.noAnimation }} </md-switch> </md-input-container> </div> </md-content> </md-dialog-content> <md-dialog-actions md-theme="{{ $root.p3xr.state.theme }}"> <md-button class="md-raised md-warn" ng-click="cancel()" md-autofocus> <md-icon>cancel</md-icon> {{ $root.p3xr.strings.intention.cancel }} </md-button> <md-button class="md-raised md-primary" type="submit"> <md-icon>save</md-icon> {{ $root.p3xr.strings.intention.save }} </md-button> </md-dialog-actions> </form> </md-dialog> '},8474:(e,t,n)=>{let r;p3xr.ng.component("p3xrMainKey",{template:n(1013),bindings:{p3xrResize:"&"},controller:["p3xrCommon","p3xrRedisParser","p3xrSocket","$rootScope","$stateParams","$timeout","$scope","$mdDialog","$state","$interval","p3xrDialogTtl","p3xrTheme","$mdColors",function(e,t,o,i,s,a,l,d,c,u,m,p,h){u.cancel(r),this.$stateParams=s;let g=!1;const f=()=>!(this.response.ttl<-1||g&&this.response.ttl<1)||(e.toast({message:p3xr.strings.status.keyIsNotExisting}),u.cancel(r),p3xr.state.redisChanged=!0,c.go("main.statistics"),!1),x=n(533),y=()=>{if(this.response.ttl>-1){const e=()=>{if(f()){this.ttlParsed=" "+x(1e3*this.response.ttl,{language:p3xr.settings.getHumanizeDurationLanguage(),delimiter:" "});const e=document.getElementById("p3xr-main-key-ttl-counter");e&&(e.innerText=this.ttlParsed)}else u.cancel(r)};e(),i.p3xr.state.reducedFunctions||(u.cancel(r),r=u((()=>{this.response.ttl=this.response.ttl-1,e()}),1e3))}};this.loading=!1;const b=async(t={})=>{u.cancel(r);let n,{withoutParent:d}=t;void 0===d&&(d=!1);try{this.loading=!0,setTimeout((()=>{l.$digest()}));const p=await o.request({action:"key-get",payload:{key:s.key}});if(this.response=p,-2===p.ttl)return void f();p.size=0;const{type:h,valueBuffer:x}=p;switch(h){case"string":p.value=(new TextDecoder).decode(x);break;case"list":case"set":p.value=x.map((e=>(new TextDecoder).decode(e)));break;case"hash":p.value={},Object.entries(x).forEach((([e,t])=>{p.value[e]=(new TextDecoder).decode(t)}));break;case"zset":p.value=[];for(let b=0;b<x.length;b+=2){const v=(new TextDecoder).decode(x[b]),T=(new TextDecoder).decode(x[b+1]);p.value.push(v),p.value.push(T)}break;case"stream":function m(e){return e.map((e=>Array.isArray(e)?m(e):ArrayBuffer.isView(e)||e instanceof ArrayBuffer?(new TextDecoder).decode(e):e))}p.value=x.map((e=>m(e)))}if("stream"!==p.type)if("object"==typeof p.valueBuffer&&p.length>0)for(let S of Object.keys(p.valueBuffer))p.size+=p.valueBuffer[S].byteLength;else if(Array.isArray(p.valueBuffer))for(let $=0;$<p.valueBuffer.length;$++)p.size+=p.valueBuffer[$].byteLength;else p.size=p.valueBuffer.byteLength;else{p.size=function(e){let t=0;return e.forEach((function e(n){ArrayBuffer.isView(n)||n instanceof ArrayBuffer?t+=n.byteLength:Array.isArray(n)&&n.forEach(e)})),t}(p.valueBuffer)}p.ttl>-1&&(g=!0),y(),l.$digest()}catch(k){n=k,console.error(k),p3xr.settings.handleConnectionIsClosed(k,i)?e.alert(k.message):e.alert(p3xr.strings.label.unableToLoadKey({key:s.key}))}finally{void 0!==n?c.go("main.statistics"):d||null===s.resize||s.resize(),a((()=>{this.loading=!1,l.$digest()}),p3xr.settings.debounce)}},v=()=>{$("#p3xr-theme-styles-tree-key").remove(),$("head").append(`<style id="p3xr-theme-styles-tree-key">\n[data-p3xr-tree-key="${p3xr.ui.htmlEncode(s.key)}"] .p3xr-main-tree-node-label {\n    background-color: ${p.isDark()?h.getThemeColor(p3xr.state.themeCommon+"-accent-300"):h.getThemeColor(p3xr.state.themeCommon+"-accent-800")} !important;\n    color: ${p.isDark()?"black":"white"} !important;\n    padding: 2px;\n}\n</style>`)};this.$onInit=()=>{b(),v()},l.$on("p3xr-theme-switched",v),this.$onDestroy=function(){$("#p3xr-theme-styles-tree-key").remove(),u.cancel(r)},this.charactersPrettyBytes=e=>e<1024||void 0===e?"":"("+p3xr.settings.prettyBytes(e)+")",this.refresh=async e=>{window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/refresh"}),await b(e),l.$digest()},this.rename=e=>{i.$broadcast("p3xr-key-rename",{key:s.key,$event:e.$event})},this.delete=e=>{i.$broadcast("p3xr-key-delete",{key:s.key,event:e.$event})},this.addKey=e=>{e.$event.stopPropagation(),i.$broadcast("p3xr-key-new",{event:e.$event,node:{key:e.key}})},this.setTtl=async t=>{try{const n=await m.show({$event:t.$event,model:{ttl:-1===this.response.ttl?"":this.response.ttl}});if(void 0===n)return;if(null==n.model.ttl||""===String(n.model.ttl).trim()){await o.request({action:"persist",payload:{key:s.key}});window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/persist"}),await this.refresh(),e.toast({message:p3xr.strings.status.persisted})}else if(String(n.model.ttl).match(/^-{0,1}\d+$/)){await o.request({action:"expire",payload:{key:s.key,ttl:parseInt(n.model.ttl)}});window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/expire"}),await this.refresh(),e.toast({message:p3xr.strings.status.ttlChanged})}else e.toast({message:p3xr.strings.status.notInteger})}catch(t){e.generalHandleError(t)}},l.$on("p3xr-refresh-key",(()=>{this.refresh({withoutParent:!0})}))}]})},8476:(e,t,n)=>{var r=n(9336),o=n(1214),i=n(8765),s=n(5456),a=n(7030),l=n(3591),d=n(8059);e.exports=function(e,t){return s(e)&&a(t)?l(d(e),t):function(n){var s=o(n,e);return void 0===s&&s===t?i(n,e):r(t,s,3)}}},8522:(e,t,n)=>{var r=n(4767),o=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():o.call(t,n,1),--this.size,!0)}},8527:e=>{e.exports='<md-dialog aria-label="{{ $root.p3xr.strings.intention.jsonViewShow }}" class="fullscreen-dialog fullscreen-dialog-fix-width" ng-style="{\'minHeight\': minHeight}"> <md-toolbar md-theme="{{$root.p3xr.state.themeLayout}}" class="md-hue-3"> <div class="md-toolbar-tools"> <md-icon>edit</md-icon> &nbsp; {{ $root.p3xr.strings.intention.jsonViewEditor }} <span flex></span> <md-button class="md-icon-button" ng-click="ok()" aria-label="{{ $root.p3xr.strings.intention.close }}"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content md-theme="{{ $root.p3xr.state.theme }}" class="p3xr-roboto-monospace" style="height:100vh" ng-if="isJson" id="p3xr-jsoneditor"> <div ng-if="!isJson" layout-padding> {{ $root.p3xr.strings.label.jsonViewNotParsable}} </div> </md-dialog-content> <md-dialog-content ng-if="!isJson" md-theme="{{ $root.p3xr.state.theme }}" style="height:100vh;padding:8px" class="p3xr-roboto-monospace"> {{ $root.p3xr.strings.label.jsonViewNotParsable}} </md-dialog-content> <md-dialog-actions md-theme="{{ $root.p3xr.state.theme }}"> <md-button ng-click="ok()" class="md-raised md-warn" aria-label="{{ $root.p3xr.strings.intention.close }}" md-autofocus> <md-icon>cancel</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.cancel }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="top">{{ $root.p3xr.strings.intention.cancel }}</md-tooltip> </md-button> <md-button ng-if="isJson && $root.p3xr.state.connection.readonly !== true" class="md-raised md-primary" ng-click="save({ format : false})"> <md-icon>save</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.save }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="top">{{ $root.p3xr.strings.intention.save }}</md-tooltip> </md-button> <md-button ng-if="isJson && $root.p3xr.state.connection.readonly !== true" class="md-raised md-primary" ng-click="save({ format : true})"> <md-icon>save</md-icon> <md-icon>format_line_spacing</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.saveWithFormatJson }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="top">{{ $root.p3xr.strings.intention.saveWithFormatJson }}</md-tooltip> </md-button> </md-dialog-actions>  </md-dialog> '},8562:(e,t,n)=>{p3xr.ng.component("p3xrSettings",{template:n(8119),controller:["p3xrCommon","p3xrDialogConnection","$mdDialog","p3xrSocket","p3xrDialogTreecontrolSettings","$scope",function(e,t,r,o,i,s){this.connectionForm=e=>{t.show(e)},this.connect=({connection:e})=>{s.$emit("p3xr-connect",{connection:e})},this.disconnect=()=>{s.$emit("p3xr-disconnect")},this.setLicense=async t=>{try{const i=r.prompt().title(p3xr.strings.confirm.license.title).textContent(p3xr.strings.confirm.license.textContent).placeholder(p3xr.strings.confirm.license.placeholder).ariaLabel(p3xr.strings.confirm.license.placeholder).initialValue("").targetEvent(t.$event).ok(p3xr.strings.intention.license).cancel(p3xr.strings.intention.cancel),s=await r.show(i),a=await o.request({action:"set-license",payload:{license:s}});n.g.p3xr.isBot()||a.donated===p3xr.state.donated||window.gtag("config",p3xr.settings.googleAnalytics,{page_path:a.donated?"/donated":"/free"}),p3xr.state.donated=a.donated,e.toast({message:"ok"!==a.info?p3xr.strings.error[a.info]:p3xr.strings.status.licenseSaved})}catch(t){if(void 0===t)return;p3xr.strings.error[t.message]&&(t=new Error(p3xr.strings.error[t.message])),e.generalHandleError(t)}},this.openTreeSettingDialog=e=>{i.show(e)},this.deleteConnection=async t=>{const{model:n,ev:r}=t;try{await e.confirm({event:r,message:p3xr.strings.confirm.deleteConnectionText});await o.request({action:"connection-delete",payload:{id:n.id}});e.toast({message:p3xr.strings.status.deleted})}catch(t){if(void 0===t)return;e.generalHandleError(t)}}}]})},8630:(e,t,n)=>{var r=n(3643),o=n(3962),i=n(427),s=n(7675),a=n(5425),l=n(2003),d=n(1262),c=n(8148),u=n(5603),m=n(9221);e.exports=function(e,t,n){var p=l(e),h=p||d(e)||m(e);if(t=s(t,4),null==n){var g=e&&e.constructor;n=h?p?new g:[]:u(e)&&c(g)?o(a(e)):{}}return(h?r:i)(e,(function(e,r,o){return t(n,e,r,o)})),n}},8658:(e,t,n)=>{var r=n(5217);e.exports=function(){this.__data__=new r,this.size=0}},8690:e=>{e.exports=' <div flex layout="row"> <div flex class="p3xr-layout-content"> <ui-view></ui-view> </div> </div> <div id="p3xr-layout-header-container"> <md-toolbar md-whiteframe="3"> <div class="md-toolbar-tools"> <p3xr-button ng-if="!$root.p3xr.state.failed" ui-sref="main.statistics" p3xr-label="$root.p3xr.strings.title.name" p3xr-fa-icon="fas fa-database"></p3xr-button> <p3xr-button ng-if="$root.p3xr.state.failed" ng-click="$root.locationReload()" p3xr-label="$root.p3xr.strings.title.name" p3xr-fa-icon="fas fa-redo"></p3xr-button> <span flex></span> <p3xr-button ng-if="$root.p3xr.state.connection" ui-sref="main.statistics" p3xr-label="$root.p3xr.strings.intention.main" p3xr-md-icon="home"></p3xr-button> <p3xr-button ui-sref="console" ng-if="$root.p3xr.state.connection" p3xr-label="$root.p3xr.strings.intention.console" p3xr-md-icon="keyboard"></p3xr-button> <p3xr-button ng-if="!$root.p3xr.state.failed" ui-sref="settings" p3xr-label="$root.p3xr.strings.intention.settings" p3xr-md-icon="settings"></p3xr-button> </div> </md-toolbar> </div> <div id="p3xr-layout-header-version-donated" md-colors="{ color: $ctrl.getVersionColor() }" ng-if="$root.isElectron === false && $root.p3xr.state.donated && $root.$mdMedia(\'(min-width: 699px)\')">{{ $root.p3xr.state.version }} </div> <div id="p3xr-layout-header-version-free" md-colors="{ color: $ctrl.getVersionColor() }" ng-if="$root.isElectron === false && !$root.p3xr.state.donated && $root.$mdMedia(\'(min-width: 699px)\')">{{ $root.p3xr.state.version }} </div> <div id="p3xr-layout-footer-container"> <md-toolbar> <div class="md-toolbar-tools"> <md-menu ng-if="$root.p3xr.state.connections.list.length > 0"> <p3xr-button ng-click="$mdMenu.open($event)" p3xr-label="$ctrl.connectionName" p3xr-md-icon="power" p3xr-tooltip-direction="top"></p3xr-button> <md-menu-content> <md-menu-item ng-repeat="connection in $root.p3xr.state.connections.list" ng-class="{\'p3xr-md-menu-item-selected\': $root.p3xr.state.connection.id  === connection.id}"> <md-button ng-click="$ctrl.connect(connection, true)"> {{ connection.name }} </md-button> </md-menu-item> </md-menu-content> </md-menu> <span ng-if="$root.p3xr.state.connection"> <md-button ng-click="$ctrl.disconnect()"> <i class="fa fa-power-off"></i> <span hide-xs hide-sm>{{ $root.p3xr.strings.intention.disconnect }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\') || $root.$mdMedia(\'sm\')" md-direction="top">{{ $root.p3xr.strings.intention.disconnect }} </md-tooltip> </md-button> </span> <span flex></span> <p3xr-button ng-click="$ctrl.openLink.donate()" p3xr-label="$root.p3xr.strings.title.donate" p3xr-fa-icon="fas fa-donate" p3xr-tooltip-direction="top"></p3xr-button> <md-menu ng-if="!$root.isElectron || ($root.isElectron && $ctrl.isElectronInitialized)"> <md-button ng-click="$mdMenu.open($event)"> <md-icon>language</md-icon> <span hide-xs hide-sm>{{ $root.p3xr.strings.intention.language }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\') || $root.$mdMedia(\'sm\')" md-direction="top">{{ $root.p3xr.strings.intention.language }} </md-tooltip> </md-button> <md-menu-content> <md-menu-item ng-repeat="(key, value) in $root.p3xr.strings.language" ng-class="{\'p3xr-md-menu-item-selected\': $root.p3xr.settings.language.current === key}"> <md-button ng-click="$ctrl.setLanguage(key)"> {{ $root.p3xr.strings.language[key] }} </md-button> </md-menu-item> </md-menu-content> </md-menu> <md-menu> <md-button ng-click="$mdMenu.open($event)"> <md-icon>color_lens</md-icon> <span hide-xs>{{ $root.p3xr.strings.intention.theme }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\')" md-direction="top">{{ $root.p3xr.strings.intention.theme }} </md-tooltip> </md-button> <md-menu-content> <md-menu-item ng-repeat="key in $ctrl.getThemeKey($root.p3xr.theme)" ng-class="{\'p3xr-md-menu-item-selected\': $ctrl.themeSelectedKey === key}"> <md-button ng-click="$ctrl.setTheme(key)"> {{ $root.p3xr.strings.label.theme[key] }} </md-button> </md-menu-item> </md-menu-content> </md-menu> <md-menu> <md-button ng-click="$mdMenu.open($event)"> <i class="fab fa-github"></i> <span hide-xs hide-sm>{{ $root.p3xr.strings.intention.github }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\') || $root.$mdMedia(\'sm\')" md-direction="top">{{ $root.p3xr.strings.intention.github }} </md-tooltip> </md-button> <md-menu-content> <md-menu-item> <md-button ng-click="$ctrl.openLink.github()"> {{ $root.p3xr.strings.intention.githubRepo }} </md-button> </md-menu-item> <md-menu-item> <md-button ng-click="$ctrl.openLink.githubRelease()"> {{ $root.p3xr.strings.intention.githubRelease }} </md-button> </md-menu-item> <md-menu-item> <md-button ng-click="$ctrl.openLink.githubChangelog()"> {{ $root.p3xr.strings.intention.githubChangelog }} </md-button> </md-menu-item> </md-menu-content> </md-menu> </div> </md-toolbar> </div> <div id="p3xr-layout-reduced" ng-show="$root.p3xr.state.reducedFunctions" md-theme="{{ $root.p3xr.state.themeCommon }}" md-colors="{ background: \'warn\', \'border-color\': \'warn-900-0.5\'}" ng-click="$ctrl.reducedFunctionalty()"> <md-icon style="font-size:20px">warning</md-icon> {{ $root.p3xr.strings.label.reducedFunction }} </div> '},8748:(e,t,n)=>{p3xr.ng.factory("p3xrDialogJsonView",["p3xrCommon","$mdDialog",function(e,t){return new function(){this.show=async r=>{try{await t.show({controller:["$scope","$mdDialog","$timeout",function(e,t,n){e.treeExpandAll=()=>{p3xr.ui.overlay.show({message:p3xr.strings.title.jsonRecursive}),n((()=>{e.howExpanded="recursive",n((()=>{p3xr.ui.overlay.hide()}))}))},e.treeCollapseAll=()=>{e.howExpanded=!0};try{e.howExpanded=!0,e.obj=JSON.parse(r.value),e.isJson=!0}catch(t){e.obj=void 0,e.isJson=!1}e.ok=function(){t.cancel()}}],template:n(3807),parent:angular.element(document.body),targetEvent:r.$event,clickOutsideToClose:!0,fullscreen:!0,multiple:!0})}catch(t){e.generalHandleError(t)}}}}])},8765:(e,t,n)=>{var r=n(6571),o=n(2248);e.exports=function(e,t){return null!=e&&o(e,t,r)}},8821:(e,t,n)=>{var r=n(562),o=n(2003);e.exports=function(e,t,n){var i=t(e);return o(e)?i:r(i,n(e))}},8860:()=>{p3xr.ng.directive("p3xrInput",["p3xrTheme","p3xrCommon",function(e,t){return{template:'<input ng-focus="focused=true" ng-blur="focused=false" class="p3xr-input" md-theme="{{ $root.p3xr.state.themeLayout }}" md-colors="{}" ng-style="{ \'background\': p3xrCommon.inputBackground(), \'color\': p3xrCommon.inputColor(), \'border-color\': p3xrCommon.inputBorderColor()}"/>',replace:!0,link:function(e){e.focused=!1,e.p3xrCommon=t}}}])},8882:e=>{var t=/\s/;e.exports=function(e){for(var n=e.length;n--&&t.test(e.charAt(n)););return n}},9070:(e,t,n)=>{var r=n(8882),o=/^\s+/;e.exports=function(e){return e?e.slice(0,r(e)+1).replace(o,""):e}},9077:e=>{e.exports=' <div> <md-toolbar class="md-primary" ng-class="{\'md-hue-1\': $ctrl.type !== \'quick\', \'md-hue-3\': $ctrl.type === \'quick\'}" md-theme="{{ $root.p3xr.state.themeLayout}}" id="p3xr-console-header"> <div class="md-toolbar-tools" ng-if="$ctrl.type !== \'quick\'"> <h2 flex md-truncate>{{ $root.p3xr.strings.label.console }}</h2> <span ng-click="$ctrl.setMonitorState()" p3xr-monitor-input controller="$ctrl"> <md-tooltip ng-if="$root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.pubsubMonitor }}</md-tooltip> <md-checkbox ng-model="$root.p3xr.state.monitor" style="transform:scale(.75)" id="p3xr-console-pubsub-checkbox"> <span hide-xs>{{ $root.p3xr.strings.intention.pubsubMonitor }}</span> </md-checkbox> </span> <p3xr-button p3xr-label="$root.p3xr.strings.intention.commands" p3xr-md-icon="menu" ng-click="$ctrl.commands({ $event: $event})"></p3xr-button> <p3xr-button p3xr-label="$root.p3xr.strings.intention.clear" p3xr-md-icon="backspace" ng-click="$ctrl.clearConsole()"></p3xr-button> </div> <div class="md-toolbar-tools p3xr-content-border-toolbar" ng-if="$ctrl.type === \'quick\'"> <h2 flex md-truncate>{{ $root.p3xr.strings.intention.quickConsole }}</h2> <span ng-click="$ctrl.setMonitorState()" p3xr-monitor-input controller="$ctrl"> <md-tooltip ng-if="$root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.pubsubMonitor }}</md-tooltip> <md-checkbox ng-model="$root.p3xr.state.monitor" style="transform:scale(.75)" id="p3xr-console-pubsub-checkbox"> <span hide-xs>{{ $root.p3xr.strings.intention.pubsubMonitor }}</span> </md-checkbox> </span> <p3xr-button p3xr-label="$root.p3xr.strings.intention.clear" p3xr-md-icon="backspace" ng-click="$ctrl.clearConsole()"></p3xr-button> <p3xr-button p3xr-label="$root.p3xr.strings.intention.close" p3xr-md-icon="close" ng-click="$ctrl.closeConsole()"></p3xr-button> </div> </md-toolbar> <md-content md-theme="{{ $root.p3xr.state.theme}}" ng-class="{\'layout-padding\': $ctrl.type !== \'quick\'}" id="p3xr-console-content" md-whiteframe="{{ $ctrl.type !== \'quick\' ? 1 : -1}}" class="p3xr-content-border-fixed"> <div style="display:flex;flex-direction:row;align-items:stretch;min-height:100%"> <div id="p3xr-console-content-resizer" ng-if="$ctrl.type === \'quick\'" ng-mousedown="$ctrl.dragStart()" ng-mouseup="$ctrl.dragEnd()"> </div> <div id="p3xr-console-content-output" style="flex-grow:1"> </div> </div> <div id="p3xr-console-content-output" ng-if="$ctrl.type !== \'quick\'"> </div> </md-content> </div> <md-autocomplete md-autofocus id="p3xr-console-autocomplete" ng-class="{\'p3xr-console-autocomplete-quick\': $ctrl.type === \'quick\'}" ng-enter="$ctrl.actionEnter(searchText)" md-input-id="p3xr-console-input" class="p3xr-console" md-input-class="p3xr-input md-input" md-search-text="searchText" md-items="item in  $ctrl.getMatches(searchText)" md-item-text="item" md-clear-button="false" md-escape-options="none"> <md-item-template> <span md-highlight-text="searchText">{{item}}</span> </md-item-template> </md-autocomplete>'},9102:(e,t,n)=>{var r=n(3984)(n(9107),"Promise");e.exports=r},9107:(e,t,n)=>{var r=n(337),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();e.exports=i},9221:(e,t,n)=>{var r=n(5387),o=n(2347),i=n(8315),s=i&&i.isTypedArray,a=s?o(s):r;e.exports=a},9282:(e,t,n)=>{var r=n(9107).Uint8Array;e.exports=r},9304:(e,t,n)=>{var r=n(4198);e.exports=function(e,t,n){var o=e.length;return n=void 0===n?o:n,!t&&n>=o?e:r(e,t,n)}},9336:(e,t,n)=>{var r=n(1894),o=n(2620);e.exports=function e(t,n,i,s,a){return t===n||(null==t||null==n||!o(t)&&!o(n)?t!=t&&n!=n:r(t,n,i,s,e,a))}},9361:e=>{e.exports=function(e){return this.__data__.has(e)}},9390:e=>{e.exports=function(e){return function(t){return null==e?void 0:e[t]}}},9391:(e,t,n)=>{const r=new(n(5093))(window.navigator.userAgent);null!==r.mobile()||null!==r.phone()||r.tablet();p3xr.ng.provider("p3xrTheme",["$mdThemingProvider",function(e){e.generateThemesOnDemand(!0),e.alwaysWatchTheme(!0),e.setNonce();const t="p3xr-theme",n=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"p3xrThemeDark":"p3xrThemeEnterprise";this.start=()=>{Object.keys(p3xr.theme).forEach((t=>{p3xr.theme[t](e)})),e.setDefaultTheme(n)};const r={},o={dark:["p3xrThemeDarkNeu","p3xrThemeDark","p3xrThemeDarkoBluo","p3xrThemeMatrix"],light:["p3xrThemeLight","p3xrThemeEnterprise","p3xrThemeRedis"]};this.$get=["$mdTheming","$rootScope","$cookies","$mdColors",function(i,s,a,l){return new function(){const d=this;this.isDark=()=>o.dark.includes(this.getCurrentThemeName()),this.start=()=>{d.setTheme()},this.setTheme=d=>{console.warn("setTheme",d),void 0===d&&void 0===(d=a.get(t))&&(d=n),r.hasOwnProperty(d)||(i.generateTheme(d),i.generateTheme(`${d}Layout`),i.generateTheme(`${d}Common`),r[d]=!0),e.setDefaultTheme(d),s.p3xr.state.theme=d,a.put(t,d,{expires:p3xr.settings.cookieExpiry}),$body.removeClass("p3xr-theme-light"),$body.removeClass("p3xr-theme-dark"),o.dark.includes(d)?$body.addClass("p3xr-theme-dark"):$body.addClass("p3xr-theme-light"),$("#p3xr-theme-styles").remove();const c=p3xr.state.themeCommon+"-background",u=l.getThemeColor(p3xr.state.themeLayout+"-primary-hue-1"),m=`\n\nbody.p3xr-theme-dark[md-theme="p3xrThemeDarkNeuLayout"] md-toolbar.md-hue-1 .md-button-dark-hover-fix:hover,\nbody.p3xr-theme-dark[md-theme="p3xrThemeDarkLayout"] md-toolbar.md-hue-1 .md-button-dark-hover-fix:hover,\nbody[md-theme="p3xrThemeEnterpriseLayout"] md-toolbar.md-hue-1 .md-button-dark-hover-fix:hover {\n    background-color: rgba(0, 0, 0, 0.1) !important; /* Lighten on hover for example */\n}\n\n[data-p3xr-tree-key]:hover .p3xr-main-tree-node-label {\n    background-color: ${this.isDark()?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.1)"}\n}\n\n.p3xr-theme-dark .p3xr-content-border {\n    border-left: 1px solid ${u};\n    border-right: 1px solid ${u};\n    border-bottom: 1px solid ${u};\n}\n\n.p3xr-theme-light .p3xr-content-border {\n    border-left: 1px solid transparent;\n    border-right: 1px solid transparent;\n    border-bottom: 1px solid transparent;\n}\n\n.p3xr-theme-light .p3xr-content-border-fixed {\n    border-left: 1px solid ${u};\n    border-right: 1px solid ${u};\n    border-bottom: 1px solid ${u};\n}\n\n.p3xr-theme-dark .p3xr-content-border-fixed {\n    border-left: 1px solid ${u};\n    border-right: 1px solid ${u};\n    border-bottom: 1px solid ${u};\n}\n\n\n.p3xr-theme-dark .p3xr-content-border-toolbar {\n    border-left: 1px solid ${u};\n    border-right: 1px solid ${u};\n    border-top: 1px solid ${u};\n}\n\n.p3xr-theme-light .p3xr-content-border-toolbar {\n    border-left: 1px solid ${u};\n    border-right: 1px solid ${u};\n    border-top: 1px solid ${u};\n}\n\n.p3xr-toast-default .md-toast-content {\n    background-color: ${this.isDark()?l.getThemeColor(c):"auto"} !important;\n    border: solid 1px ${this.isDark()?"rgba(255, 255, 255, 0.5)":"auto"} !important;\n    ${this.isDark()?"box-shadow:  0 0 10px  rgba(0,0,0,0.6);":""}\n}\n\ntreecontrol i.tree-branch-head:before {\n    color: ${this.isDark()?l.getThemeColor("amber-A100"):l.getThemeColor("amber-A400")};\n    ${this.isDark()?"text-shadow: 1px 1px 1px rgba(55, 29, 27, 0.5);":"text-shadow: 1px 1px 0px rgba(55, 11, 0, 0.5);"}\n}\n\nbody.p3xr-theme-dark[md-theme="p3xrThemeMatrixLayout"] treecontrol i.tree-branch-head:before {\n    color: ${l.getThemeColor("lime-A400")} !important;\n}\n\n\n.p3xr-list-key-odd-item {\n    background-color: ${l.getThemeColor(p3xr.state.themeLayout+"-background-500-0.1")};\n}\n.p3xr-list-key-item {\n    border-bottom: 1px solid ${this.isDark()?l.getThemeColor(p3xr.state.themeLayout+"-background-300-0.1"):l.getThemeColor(p3xr.state.themeLayout+"-background-700-0.1")};\n}\n\ninput:-webkit-autofill, input:-webkit-autofill:focus {\n    -webkit-box-shadow:0 0 0 50px ${this.isDark()?"rgb(66, 66, 66, 0.9)":"rgba(255, 255, 255, 0.5)"} inset !important;\n    -webkit-text-fill-color: ${this.isDark()?"white":"black"}  !important;\n}\n`;$("head").append('<style id="p3xr-theme-styles">'+m+"</style>");const p="p3xr-theme-meta",h=document.getElementById(p);h&&h.remove();const g=document.createElement("meta");g.id=p,g.name="theme-color",g.content=l.getThemeColor(p3xr.state.themeLayout+"-accent"),document.head.appendChild(g),document.documentElement.style.display="none",document.documentElement.setAttribute("data-color-scheme",this.isDark()?"dark":"light"),document.body.clientWidth,document.documentElement.style.display="",s.$broadcast("p3xr-theme-switched")},this.getCurrentThemeName=()=>a.get(t),this.generateThemeName=e=>"p3xrTheme"+e[0].toUpperCase()+e.substring(1)}}]}])},9449:(e,t,n)=>{var r=n(5528),o=n(8426),i=n(4715),s=RegExp("['’]","g");e.exports=function(e){return function(t){return r(i(o(t).replace(s,"")),e,"")}}},9467:()=>{p3xr.theme.redis=function(e,t){p3xr.theme.redis.order=4,e.theme("p3xrThemeRedisLayout").primaryPalette("red",{default:"800","hue-1":"200","hue-2":"700","hue-3":"900"}).accentPalette("red",{default:"200"}).warnPalette("red").backgroundPalette("red",{default:"900","hue-1":"600","hue-2":"200","hue-3":"200"}),e.theme("p3xrThemeRedis").primaryPalette("grey",{default:"900"}).accentPalette("grey",{default:"600"}).warnPalette("amber"),e.theme("p3xrThemeRedisCommon").primaryPalette("green").accentPalette("grey").warnPalette("red").backgroundPalette("grey")}},9484:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},9513:(e,t,n)=>{var r=n(3287);function o(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var s=e.apply(this,r);return n.cache=i.set(o,s)||i,s};return n.cache=new(o.Cache||r),n}o.Cache=r,e.exports=o},9620:(e,t,n)=>{var r=n(6711),o=n(9282),i=n(8330),s=n(1505),a=n(5483),l=n(5841),d=r?r.prototype:void 0,c=d?d.valueOf:void 0;e.exports=function(e,t,n,r,d,u,m){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!u(new o(e),new o(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return i(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var p=a;case"[object Set]":var h=1&r;if(p||(p=l),e.size!=t.size&&!h)return!1;var g=m.get(e);if(g)return g==t;r|=2,m.set(e,t);var f=s(p(e),p(t),r,d,u,m);return m.delete(e),f;case"[object Symbol]":if(c)return c.call(e)==c.call(t)}return!1}},9712:e=>{var t="\\ud800-\\udfff",n="["+t+"]",r="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",o="\\ud83c[\\udffb-\\udfff]",i="[^"+t+"]",s="(?:\\ud83c[\\udde6-\\uddff]){2}",a="[\\ud800-\\udbff][\\udc00-\\udfff]",l="(?:"+r+"|"+o+")"+"?",d="[\\ufe0e\\ufe0f]?",c=d+l+("(?:\\u200d(?:"+[i,s,a].join("|")+")"+d+l+")*"),u="(?:"+[i+r+"?",r,s,a,n].join("|")+")",m=RegExp(o+"(?="+o+")|"+u+c,"g");e.exports=function(e){return e.match(m)||[]}},9718:e=>{e.exports='<p3xr-key-pager p3xr-controller="$ctrl"></p3xr-key-pager> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start center" layout-align="center center" md-colors="{ background: \'primary-300\' }"> <div flex="20"><span ng-if="!$root.$mdMedia(\'xs\')">&nbsp;</span>{{ $root.p3xr.strings.page.key.stream.table.timestamp }}</div> <div flex="60"> {{ $root.p3xr.strings.page.key.stream.table.field }} <i class="fas fa-chevron-right" style="transform:scale(.75)!important"></i> {{ $root.p3xr.strings.page.key.stream.table.value }} </div> <div flex="20" style="text-align:right" class="p3xr-connected-readonly-filler"> <md-button class="md-icon-button" ng-click="$ctrl.addStream({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.add }}</md-tooltip> <md-icon>add</md-icon> </md-button> </div> </div> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start start" layout-align="center center" ng-repeat="(key, value) in $ctrl.pageBasedList()" ng-class="{ \'p3xr-list-key-odd-item\': $odd }" class="p3xr-list-key-item"> <div flex="20"> <span> {{ value[0] }} <md-tooltip md-direction="top">{{ $ctrl.showTimestamp({ timestamp: value[0]})}}</md-tooltip> </span> </div> <div flex="60" style="overflow:auto;align-items:flex-start"> <span ng-repeat="dataArr in $ctrl.p3xrValueGenerated[key]" class="p3xr-pre">{{ dataArr[0]}} <i class="fas fa-chevron-right" style="transform:scale(.75)!important"></i> {{ dataArr[1]}}<span ng-if="!$last"><br/></span></span> </div> <div flex="20" style="text-align:right"> <md-button class="md-icon-button md-warn" ng-click="$ctrl.deleteStreamTimestamp({ streamTimestamp: value[0], $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.delete }}</md-tooltip> <md-icon>delete</md-icon> </md-button> </div> </div> '},9732:e=>{e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},9768:(e,t,n)=>{var r=n(6929);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},9854:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}},9974:e=>{e.exports='<p3xr-key-pager p3xr-controller="$ctrl"></p3xr-key-pager> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start center" layout-align="center center" md-colors="{ background: \'primary-300\' }"> <div flex="20"> <span ng-if="!$root.$mdMedia(\'xs\')">&nbsp;</span> {{ $root.p3xr.strings.page.key.list.table.index }} </div> <div flex="60"> {{ $root.p3xr.strings.page.key.list.table.value }} </div> <div flex="20" style="text-align:right" class="p3xr-connected-readonly-filler"> <md-button class="md-icon-button" ng-click="$ctrl.appendValue({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.add }}</md-tooltip> <md-icon>add</md-icon> </md-button> </div> </div> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start start" layout-align="center center" ng-repeat="value in $ctrl.pageBasedList() track by $index" ng-class="{ \'p3xr-list-key-odd-item\': $odd }" class="p3xr-list-key-item"> <div flex="20" ng-click="$ctrl.editValue({ index: $index + (($ctrl.page -1) * $root.p3xr.settings.keyPageCount  ), value: value, $event: $event})"> <span ng-if="!$root.$mdMedia(\'xs\')">&nbsp;</span> {{ $index + (($ctrl.page -1) * $root.p3xr.settings.keyPageCount ) }} </div> <div flex="60" style="overflow:auto;align-items:flex-start;max-height:200px" ng-click="$ctrl.editValue({ index: $index + (($ctrl.page -1) * $root.p3xr.settings.keyPageCount  ), value: value, $event: $event})"> <span class="p3xr-pre" ng-if="$root.p3xr.settings.maxValueDisplay > 0 && value.length > $root.p3xr.settings.maxValueDisplay">{{ value.substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span> <span class="p3xr-pre" ng-if="$root.p3xr.settings.maxValueDisplay === 0 || value.length <= $root.p3xr.settings.maxValueDisplay|| $root.p3xr.settings.maxValueDisplay === -1 ">{{ value }}</span> </div> <div flex="20" style="text-align:right"> <md-button class="md-icon-button md-warn" ng-click="$ctrl.deleteListElement({ index: $index + (($ctrl.page -1) * $root.p3xr.settings.keyPageCount  ), $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.delete }}</md-tooltip> <md-icon>delete</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.showJson({ value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.jsonViewShow }}</md-tooltip> <md-icon>table_chart</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.copy({ $event: $event, value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.copy }}</md-tooltip> <md-icon>content_copy</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.downloadBuffer({ $index: $index + (($ctrl.page -1) * $root.p3xr.settings.keyPageCount  ), $event: $event})"> <md-icon>download</md-icon> <md-tooltip>{{ $root.p3xr.strings.intention.downloadBuffer }} </md-tooltip> </md-button> <md-button class="md-icon-button md-primary" ng-click="$ctrl.editValue({ index: $index + (($ctrl.page -1) * $root.p3xr.settings.keyPageCount  ), value: value, $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.edit }}</md-tooltip> <md-icon>edit</md-icon> </md-button> </div> </div> '}},s={};function a(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={id:e,loaded:!1,exports:{}};return i[e].call(n.exports,n,n.exports,a),n.loaded=!0,n.exports}a.m=i,a.amdD=function(){throw new Error("define cannot be used indirect")},e=[],a.O=(t,n,r,o)=>{if(!n){var i=1/0;for(c=0;c<e.length;c++){for(var[n,r,o]=e[c],s=!0,l=0;l<n.length;l++)(!1&o||i>=o)&&Object.keys(a.O).every((e=>a.O[e](n[l])))?n.splice(l--,1):(s=!1,o<i&&(i=o));if(s){e.splice(c--,1);var d=r();void 0!==d&&(t=d)}}return t}o=o||0;for(var c=e.length;c>0&&e[c-1][2]>o;c--)e[c]=e[c-1];e[c]=[n,r,o]},a.F={},a.E=e=>{Object.keys(a.F).map((t=>{a.F[t](e)}))},n=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,a.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var o=Object.create(null);a.r(o);var i={};t=t||[null,n({}),n([]),n(n)];for(var s=2&r&&e;"object"==typeof s&&!~t.indexOf(s);s=n(s))Object.getOwnPropertyNames(s).forEach((t=>i[t]=()=>e[t]));return i.default=()=>e,a.d(o,i),o},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce(((t,n)=>(a.f[n](e,t),t)),[])),a.u=e=>e+".d7b47ad7c5eab16d1b52.js",a.miniCssF=e=>e+".6264308c6da6a65a9f01.css",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},o="p3x-redis-ui-material:",a.l=(e,t,n,i)=>{if(r[e])r[e].push(t);else{var s,l;if(void 0!==n)for(var d=document.getElementsByTagName("script"),c=0;c<d.length;c++){var u=d[c];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==o+n){s=u;break}}s||(l=!0,(s=document.createElement("script")).charset="utf-8",s.timeout=120,a.nc&&s.setAttribute("nonce",a.nc),s.setAttribute("data-webpack",o+n),s.src=e),r[e]=[t];var m=(t,n)=>{s.onerror=s.onload=null,clearTimeout(p);var o=r[e];if(delete r[e],s.parentNode&&s.parentNode.removeChild(s),o&&o.forEach((e=>e(n))),t)return t(n)},p=setTimeout(m.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=m.bind(null,s.onerror),s.onload=m.bind(null,s.onload),l&&document.head.appendChild(s)}},a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),a.p="",(()=>{if("undefined"!=typeof document){var e=e=>new Promise(((t,n)=>{var r=a.miniCssF(e),o=a.p+r;if(((e,t)=>{for(var n=document.getElementsByTagName("link"),r=0;r<n.length;r++){var o=(s=n[r]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(o===e||o===t))return s}var i=document.getElementsByTagName("style");for(r=0;r<i.length;r++){var s;if((o=(s=i[r]).getAttribute("data-href"))===e||o===t)return s}})(r,o))return t();((e,t,n,r,o)=>{var i=document.createElement("link");i.rel="stylesheet",i.type="text/css",a.nc&&(i.nonce=a.nc),i.onerror=i.onload=n=>{if(i.onerror=i.onload=null,"load"===n.type)r();else{var s=n&&n.type,a=n&&n.target&&n.target.href||t,l=new Error("Loading CSS chunk "+e+" failed.\n("+s+": "+a+")");l.name="ChunkLoadError",l.code="CSS_CHUNK_LOAD_FAILED",l.type=s,l.request=a,i.parentNode&&i.parentNode.removeChild(i),o(l)}},i.href=t,n?n.parentNode.insertBefore(i,n.nextSibling):document.head.appendChild(i)})(e,o,null,t,n)})),t={792:0};a.f.miniCss=(n,r)=>{t[n]?r.push(t[n]):0!==t[n]&&{822:1}[n]&&r.push(t[n]=e(n).then((()=>{t[n]=0}),(e=>{throw delete t[n],e})))},a.F.miniCss=e=>{if((!a.o(t,e)||void 0===t[e])&&118!=e){t[e]=null;var n=document.createElement("link");a.nc&&n.setAttribute("nonce",a.nc),n.rel="prefetch",n.as="style",n.href=a.p+a.miniCssF(e),document.head.appendChild(n)}}}})(),(()=>{var e={792:0};a.f.j=(t,n)=>{var r=a.o(e,t)?e[t]:void 0;if(0!==r)if(r)n.push(r[2]);else if(822!=t){var o=new Promise(((n,o)=>r=e[t]=[n,o]));n.push(r[2]=o);var i=a.p+a.u(t),s=new Error;a.l(i,(n=>{if(a.o(e,t)&&(0!==(r=e[t])&&(e[t]=void 0),r)){var o=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+i+")",s.name="ChunkLoadError",s.type=o,s.request=i,r[1](s)}}),"chunk-"+t,t)}else e[t]=0},a.F.j=t=>{if((!a.o(e,t)||void 0===e[t])&&822!=t){e[t]=null;var n=document.createElement("link");n.charset="utf-8",a.nc&&n.setAttribute("nonce",a.nc),n.rel="prefetch",n.as="script",n.href=a.p+a.u(t),document.head.appendChild(n)}},a.O.j=t=>0===e[t];var t=(t,n)=>{var r,o,[i,s,l]=n,d=0;if(i.some((t=>0!==e[t]))){for(r in s)a.o(s,r)&&(a.m[r]=s[r]);if(l)var c=l(a)}for(t&&t(n);d<i.length;d++)o=i[d],a.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return a.O(c)},n=self.webpackChunkp3x_redis_ui_material=self.webpackChunkp3x_redis_ui_material||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),a.O(0,[792],(()=>{a.E(822),a.E(118)}),5);var l={};a(1303),a(1886),a.g.p3xr=a.g.p3xr||{},p3xr.theme={dark:void 0,light:void 0},p3xr.ui={overlay:void 0,htmlEncode:a.g.htmlEncode},a(7426),a(4650),a(968),a(8319),a(1670),a(275),a(1338),a(5719),a(7543),a(7261),a(6850),a(4306),p3xr.settings.language.translation.en=a(2514),p3xr.settings.language.translation.zn=a(5245),p3xr.settings.language.translation.ru=a(3004),a(5728),l=a.O(l)})();